Search in sources :

Example 1 with UserAuthor

use of com.pratilipi.data.type.UserAuthor in project pratilipi by Pratilipi.

the class UserAuthorDataUtil method hasAccessToUpdateUserAuthorData.

public static boolean hasAccessToUpdateUserAuthorData(UserAuthor userAuthor, AccessType accessType) {
    AccessToken accessToken = AccessTokenFilter.getAccessToken();
    if (!userAuthor.getUserId().equals(accessToken.getUserId()))
        return false;
    if (!UserAccessUtil.hasUserAccess(accessToken.getUserId(), null, accessType))
        return false;
    // User can not follow his/her own Author profile.
    if (accessType == AccessType.USER_AUTHOR_FOLLOWING) {
        DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
        Author author = dataAccessor.getAuthor(userAuthor.getAuthorId());
        if (userAuthor.getUserId().equals(author.getUserId()))
            return false;
    }
    return true;
}
Also used : AccessToken(com.pratilipi.data.type.AccessToken) DataAccessor(com.pratilipi.data.DataAccessor) UserAuthor(com.pratilipi.data.type.UserAuthor) Author(com.pratilipi.data.type.Author)

Example 2 with UserAuthor

use of com.pratilipi.data.type.UserAuthor in project pratilipi by Pratilipi.

the class UserAuthorDataUtil method saveUserAuthorFollow.

public static UserAuthorData saveUserAuthorFollow(Long userId, Long authorId, UserFollowState followState) throws InvalidArgumentException, InsufficientAccessException {
    DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
    UserAuthor userAuthor = dataAccessor.getUserAuthor(userId, authorId);
    if (userAuthor == null) {
        userAuthor = dataAccessor.newUserAuthor();
        userAuthor.setUserId(userId);
        userAuthor.setAuthorId(authorId);
    }
    if (!hasAccessToUpdateUserAuthorData(userAuthor, AccessType.USER_AUTHOR_FOLLOWING))
        throw new InsufficientAccessException();
    AccessToken accessToken = AccessTokenFilter.getAccessToken();
    AuditLog auditLog = dataAccessor.newAuditLog(accessToken, AccessType.USER_AUTHOR_FOLLOWING, userAuthor);
    userAuthor.setFollowState(followState);
    userAuthor.setFollowDate(new Date());
    userAuthor = dataAccessor.createOrUpdateUserAuthor(userAuthor, auditLog);
    return createUserAuthorData(userAuthor);
}
Also used : DataAccessor(com.pratilipi.data.DataAccessor) AccessToken(com.pratilipi.data.type.AccessToken) UserAuthor(com.pratilipi.data.type.UserAuthor) InsufficientAccessException(com.pratilipi.common.exception.InsufficientAccessException) AuditLog(com.pratilipi.data.type.AuditLog) Date(java.util.Date)

Example 3 with UserAuthor

use of com.pratilipi.data.type.UserAuthor in project pratilipi by Pratilipi.

the class UserAuthorDataUtil method getUserFollowList.

public static DataListCursorTuple<AuthorData> getUserFollowList(Long userId, String cursor, Integer offset, Integer resultCount) {
    DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
    User user = dataAccessor.getUser(userId);
    if (user.getFollowCount() == 0L)
        return new DataListCursorTuple<>(new ArrayList<AuthorData>(0), null, 0L);
    DataListCursorTuple<Long> authorIdListCursorTuple = dataAccessor.getUserAuthorFollowList(userId, null, cursor, offset, resultCount);
    List<Long> authorIdList = authorIdListCursorTuple.getDataList();
    List<AuthorData> authorDataList = AuthorDataUtil.createAuthorDataList(authorIdList, true);
    // Setting AuthorData.isFollowing flag
    if (userId.equals(AccessTokenFilter.getAccessToken().getUserId())) {
        for (AuthorData authorData : authorDataList) authorData.setFollowing(true);
    } else {
        List<UserAuthor> userAuthorList = dataAccessor.getUserAuthorList(AccessTokenFilter.getAccessToken().getUserId(), authorIdList);
        if (userAuthorList.size() != 0)
            for (int i = 0; i < authorIdList.size(); i++) if (userAuthorList.get(i) != null && userAuthorList.get(i).getFollowState() == UserFollowState.FOLLOWING)
                authorDataList.get(i).setFollowing(true);
    }
    // Setting UserData.isFollowing flag
    Author author = dataAccessor.getAuthorByUserId(AccessTokenFilter.getAccessToken().getUserId());
    if (author != null) {
        List<Long> userIdList = new ArrayList<>(authorDataList.size());
        List<UserData> userDataList = new ArrayList<>(authorDataList.size());
        for (AuthorData authorData : authorDataList) {
            if (authorData.getUser().getId() != null) {
                userIdList.add(authorData.getUser().getId());
                userDataList.add(authorData.getUser());
            }
        }
        List<UserAuthor> userAuthorList = dataAccessor.getUserAuthorList(userIdList, author.getId());
        if (userAuthorList != null) {
            for (UserAuthor userAuthor : userAuthorList) if (userAuthor != null && userAuthor.getFollowState() == UserFollowState.FOLLOWING)
                userDataList.get(userIdList.indexOf(userAuthor.getUserId())).setFollowing(true);
        }
    }
    return new DataListCursorTuple<>(authorDataList, authorIdListCursorTuple.getCursor(), user.getFollowCount());
}
Also used : User(com.pratilipi.data.type.User) UserData(com.pratilipi.data.client.UserData) DataAccessor(com.pratilipi.data.DataAccessor) ArrayList(java.util.ArrayList) DataListCursorTuple(com.pratilipi.data.DataListCursorTuple) UserAuthorData(com.pratilipi.data.client.UserAuthorData) AuthorData(com.pratilipi.data.client.AuthorData) UserAuthor(com.pratilipi.data.type.UserAuthor) UserAuthor(com.pratilipi.data.type.UserAuthor) Author(com.pratilipi.data.type.Author)

Example 4 with UserAuthor

use of com.pratilipi.data.type.UserAuthor in project pratilipi by Pratilipi.

the class AuditLogProcessApi method get.

@Get
public GenericResponse get(GenericRequest request) throws UnexpectedServerException {
    DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
    // Fetching AppProperty
    String appPropertyId = "Api.AuditLogProcess";
    AppProperty appProperty = dataAccessor.getAppProperty(appPropertyId);
    if (appProperty == null)
        appProperty = dataAccessor.newAppProperty(appPropertyId);
    // Fetching list of audit logs
    DataListCursorTuple<AuditLog> auditLogDataListCursorTuple = dataAccessor.getAuditLogList(// Mon Aug 01 00:00:00 IST 2016
    new Date(1469989800000L), (String) appProperty.getValue(), 5000);
    // Make sets of PrimaryContent ids
    Map<Long, Set<Long>> pratilipiUpdateIds = new HashMap<>();
    Set<String> userPratilipiUpdateIds = new HashSet<>();
    Set<String> userAuthorUpdateIds = new HashSet<>();
    Set<Long> commentUpdateIds = new HashSet<>();
    Set<String> voteUpdateIds = new HashSet<>();
    Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new GsonLongDateAdapter()).create();
    for (AuditLog auditLog : auditLogDataListCursorTuple.getDataList()) {
        // TODO: Delete following condition as soon as 'legacy' module is removed
        if (auditLog.getUserId() == null || auditLog.getPrimaryContentId() == null) {
            continue;
        }
        if (auditLog.getUserId().equals(SystemProperty.SYSTEM_USER_ID)) {
            continue;
        }
        if (auditLog.getAccessType() == AccessType.PRATILIPI_UPDATE) {
            Pratilipi oldPratilipi = gson.fromJson(auditLog.getEventDataOld(), PratilipiEntity.class);
            Pratilipi newPratilipi = gson.fromJson(auditLog.getEventDataNew(), PratilipiEntity.class);
            if (oldPratilipi.getState() == PratilipiState.DRAFTED && newPratilipi.getState() == PratilipiState.PUBLISHED) {
                Set<Long> userIdSet = pratilipiUpdateIds.get(auditLog.getPrimaryContentIdLong());
                if (userIdSet == null) {
                    userIdSet = new HashSet<>();
                    pratilipiUpdateIds.put(auditLog.getPrimaryContentIdLong(), userIdSet);
                }
                userIdSet.add(auditLog.getUserId());
            }
        } else if (auditLog.getAccessType() == AccessType.USER_PRATILIPI_REVIEW) {
            UserPratilipi oldUserPratilipi = gson.fromJson(auditLog.getEventDataOld(), UserPratilipiEntity.class);
            UserPratilipi newUserPratilipi = gson.fromJson(auditLog.getEventDataNew(), UserPratilipiEntity.class);
            if (oldUserPratilipi.getRating() == null && oldUserPratilipi.getReview() == null && (newUserPratilipi.getRating() != null || newUserPratilipi.getReview() != null))
                userPratilipiUpdateIds.add(auditLog.getPrimaryContentId());
        } else if (auditLog.getAccessType() == AccessType.USER_AUTHOR_FOLLOWING) {
            UserAuthor oldUserAuthor = gson.fromJson(auditLog.getEventDataOld(), UserAuthorEntity.class);
            UserAuthor newUserAuthor = gson.fromJson(auditLog.getEventDataNew(), UserAuthorEntity.class);
            if (oldUserAuthor.getFollowState() == null && newUserAuthor.getFollowState() == UserFollowState.FOLLOWING)
                userAuthorUpdateIds.add(auditLog.getPrimaryContentId());
        } else if (auditLog.getAccessType() == AccessType.COMMENT_ADD) {
            commentUpdateIds.add(auditLog.getPrimaryContentIdLong());
        } else if (auditLog.getAccessType() == AccessType.VOTE) {
            Vote newVote = gson.fromJson(auditLog.getEventDataNew(), VoteEntity.class);
            if (newVote.getType() == VoteType.LIKE)
                voteUpdateIds.add(auditLog.getPrimaryContentId());
        }
    }
    // Batch get Vote entities
    logger.log(Level.INFO, "Fetching " + voteUpdateIds.size() + " Vote Entities.");
    Map<String, Vote> votes = dataAccessor.getVotes(voteUpdateIds);
    // Batch get Comment and entities
    Set<Long> commentIds = new HashSet<>(commentUpdateIds);
    for (Vote vote : votes.values()) if (vote.getParentType() == VoteParentType.COMMENT)
        commentIds.add(vote.getParentIdLong());
    logger.log(Level.INFO, "Fetching " + commentIds.size() + " Comment Entities.");
    Map<Long, Comment> comments = dataAccessor.getComments(commentIds);
    // Batch get UserPratilipi entities
    Set<String> userPratilipiIds = new HashSet<>(userPratilipiUpdateIds);
    for (Comment comment : comments.values()) if (comment.getParentType() == CommentParentType.REVIEW)
        userPratilipiIds.add(comment.getParentId());
    for (Vote vote : votes.values()) if (vote.getParentType() == VoteParentType.REVIEW)
        userPratilipiIds.add(vote.getParentId());
    logger.log(Level.INFO, "Fetching " + userPratilipiIds.size() + " UserPratilipi Entities.");
    Map<String, UserPratilipi> userPratilipis = dataAccessor.getUserPratilipis(userPratilipiIds);
    // Batch get Pratilipi entities
    Set<Long> pratilipiIds = new HashSet<>(pratilipiUpdateIds.keySet());
    for (UserPratilipi userPratilipi : userPratilipis.values()) pratilipiIds.add(userPratilipi.getPratilipiId());
    logger.log(Level.INFO, "Fetching " + pratilipiIds.size() + " Pratilipi Entities.");
    Map<Long, Pratilipi> pratilipis = dataAccessor.getPratilipis(pratilipiIds);
    // Batch get UserAuthor entities
    logger.log(Level.INFO, "Fetching " + userAuthorUpdateIds.size() + " UserAuthor Entities.");
    Map<String, UserAuthor> userAuthors = dataAccessor.getUserAuthors(userAuthorUpdateIds);
    // Batch get Author entities
    Set<Long> authorIds = new HashSet<>();
    for (Pratilipi pratilipi : pratilipis.values()) authorIds.add(pratilipi.getAuthorId());
    for (UserAuthor userAuthor : userAuthors.values()) authorIds.add(userAuthor.getAuthorId());
    logger.log(Level.INFO, "Fetching " + authorIds.size() + " Author Entities.");
    Map<Long, Author> authors = dataAccessor.getAuthors(authorIds);
    List<Email> totalEmailList = new ArrayList<>();
    // auditLog.getAccessType() == AccessType.PRATILIPI_UPDATE
    for (Long pratilipiId : pratilipiUpdateIds.keySet()) {
        Pratilipi pratilipi = pratilipis.get(pratilipiId);
        Set<Long> followerUserIdList = new HashSet<>(dataAccessor.getUserAuthorFollowList(null, pratilipi.getAuthorId(), null, null, null).getDataList());
        Email email = _createPratilipiPublishedEmail(pratilipi, authors.get(pratilipi.getAuthorId()));
        if (email != null)
            totalEmailList.add(email);
        totalEmailList.addAll(_createPratilipiPublishedEmails(pratilipi, followerUserIdList));
        // Send notification to all AEEs as well
        // only if the content is self-published
        List<Long> aeeUserIdList = _getAeeUserIdList(pratilipi.getLanguage());
        Set<Long> userIdSet = pratilipiUpdateIds.get(pratilipiId);
        for (Long userId : userIdSet) {
            if (!aeeUserIdList.contains(userId)) {
                followerUserIdList.addAll(aeeUserIdList);
                break;
            }
        }
        _createPratilipiPublishedNotification(pratilipi, authors.get(pratilipi.getAuthorId()));
        _createPratilipiPublishedNotifications(pratilipi, followerUserIdList);
    }
    // auditLog.getAccessType() == AccessType.USER_PRATILIPI_REVIEW
    for (String userPratilipiId : userPratilipiUpdateIds) {
        UserPratilipi userPratilipi = userPratilipis.get(userPratilipiId);
        if (userPratilipi.getReviewState() != UserReviewState.PUBLISHED)
            continue;
        Long pratilipiId = userPratilipi.getPratilipiId();
        Email email = _createUserPratilipiReviewEmail(userPratilipi, authors.get(pratilipis.get(pratilipiId).getAuthorId()));
        if (email != null)
            totalEmailList.add(email);
    }
    // auditLog.getAccessType() == AccessType.USER_AUTHOR_FOLLOWING
    for (String userAuthorId : userAuthorUpdateIds) {
        UserAuthor userAuthor = userAuthors.get(userAuthorId);
        _createUserAuthorFollowingNotifications(userAuthor, authors.get(userAuthor.getAuthorId()));
        Email email = _createUserAuthorFollowingEmail(userAuthor, authors.get(userAuthor.getAuthorId()));
        if (email != null)
            totalEmailList.add(email);
    }
    // auditLog.getAccessType() == AccessType.COMMENT_ADD
    for (Long commentId : commentUpdateIds) {
        Comment comment = comments.get(commentId);
        if (comment.getParentType() != CommentParentType.REVIEW)
            continue;
        UserPratilipi userPratilipi = userPratilipis.get(comment.getParentId());
        Email email = _createCommentAddedReviewerEmail(userPratilipi, comment);
        if (email != null)
            totalEmailList.add(email);
    /*	// Business call - Not to send CommentAddedAuthorEmail.
			Pratilipi pratilipi = pratilipis.get( userPratilipi.getPratilipiId() );
			Author author = authors.get( pratilipi.getAuthorId() );
			email = _createCommentAddedAuthorEmail( author, comment );
			if( email != null )
				totalEmailList.add( email );
			*/
    }
    // auditLog.getAccessType() == AccessType.VOTE
    for (String voteId : voteUpdateIds) {
        Vote vote = votes.get(voteId);
        if (vote.getParentType() == VoteParentType.REVIEW) {
            UserPratilipi userPratilipi = userPratilipis.get(vote.getParentId());
            // To the reviewer
            Email email = _createVoteOnReviewReviewerEmail(userPratilipi, vote);
            if (email != null)
                totalEmailList.add(email);
        } else if (vote.getParentType() == VoteParentType.COMMENT) {
            // To the commentor
            Email email = _createVoteOnCommentCommentorEmail(comments.get(vote.getParentIdLong()), vote);
            if (email != null)
                totalEmailList.add(email);
        }
    }
    _updateEmailTable(totalEmailList);
    // Updating AppProperty.
    if (auditLogDataListCursorTuple.getDataList().size() > 0) {
        appProperty.setValue(auditLogDataListCursorTuple.getCursor());
        appProperty = dataAccessor.createOrUpdateAppProperty(appProperty);
    }
    return new GenericResponse();
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) Email(com.pratilipi.data.type.Email) HashMap(java.util.HashMap) DataAccessor(com.pratilipi.data.DataAccessor) ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) AuditLog(com.pratilipi.data.type.AuditLog) UserPratilipi(com.pratilipi.data.type.UserPratilipi) UserAuthor(com.pratilipi.data.type.UserAuthor) HashSet(java.util.HashSet) Comment(com.pratilipi.data.type.Comment) Vote(com.pratilipi.data.type.Vote) GsonBuilder(com.google.gson.GsonBuilder) GenericResponse(com.pratilipi.api.shared.GenericResponse) Date(java.util.Date) UserAuthor(com.pratilipi.data.type.UserAuthor) Author(com.pratilipi.data.type.Author) UserPratilipi(com.pratilipi.data.type.UserPratilipi) Pratilipi(com.pratilipi.data.type.Pratilipi) AppProperty(com.pratilipi.data.type.AppProperty) GsonLongDateAdapter(com.pratilipi.common.util.GsonLongDateAdapter) UserPratilipiEntity(com.pratilipi.data.type.gae.UserPratilipiEntity) Get(com.pratilipi.api.annotation.Get)

Example 5 with UserAuthor

use of com.pratilipi.data.type.UserAuthor in project pratilipi by Pratilipi.

the class AuthorApi method get.

@Get
public Response get(GetRequest request) {
    DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
    Author author = dataAccessor.getAuthor(request.authorId);
    UserAuthor userAuthor = dataAccessor.getUserAuthor(AccessTokenFilter.getAccessToken().getUserId(), request.authorId);
    AuthorData authorData = AuthorDataUtil.createAuthorData(author, null, null);
    Response response = new Response(authorData);
    response.setFollowing(userAuthor != null && userAuthor.getFollowState() == UserFollowState.FOLLOWING);
    return response;
}
Also used : GenericResponse(com.pratilipi.api.shared.GenericResponse) DataAccessor(com.pratilipi.data.DataAccessor) AuthorData(com.pratilipi.data.client.AuthorData) UserAuthor(com.pratilipi.data.type.UserAuthor) Author(com.pratilipi.data.type.Author) UserAuthor(com.pratilipi.data.type.UserAuthor) Get(com.pratilipi.api.annotation.Get)

Aggregations

UserAuthor (com.pratilipi.data.type.UserAuthor)12 DataAccessor (com.pratilipi.data.DataAccessor)9 Author (com.pratilipi.data.type.Author)6 ArrayList (java.util.ArrayList)4 AuthorData (com.pratilipi.data.client.AuthorData)3 UserData (com.pratilipi.data.client.UserData)3 AccessToken (com.pratilipi.data.type.AccessToken)3 UserPratilipi (com.pratilipi.data.type.UserPratilipi)3 UserAuthorEntity (com.pratilipi.data.type.gae.UserAuthorEntity)3 UserPratilipiEntity (com.pratilipi.data.type.gae.UserPratilipiEntity)3 Date (java.util.Date)3 Get (com.pratilipi.api.annotation.Get)2 GenericResponse (com.pratilipi.api.shared.GenericResponse)2 DataListCursorTuple (com.pratilipi.data.DataListCursorTuple)2 AuditLog (com.pratilipi.data.type.AuditLog)2 Comment (com.pratilipi.data.type.Comment)2 Pratilipi (com.pratilipi.data.type.Pratilipi)2 Vote (com.pratilipi.data.type.Vote)2 HashMap (java.util.HashMap)2 Cursor (com.google.appengine.api.datastore.Cursor)1