Search in sources :

Example 11 with Task

use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.

the class UserProcessApi method get.

@Get
public GenericResponse get(GenericRequest request) {
    DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
    // Fetching AppProperty
    AppProperty appProperty = dataAccessor.getAppProperty(appPropertyId);
    if (appProperty == null) {
        appProperty = dataAccessor.newAppProperty(appPropertyId);
        appProperty.setValue(new Date(0));
    }
    List<Key<UserEntity>> keyList = ObjectifyService.ofy().load().type(UserEntity.class).filter("SIGN_UP_DATE >", appProperty.getValue()).order("SIGN_UP_DATE").limit(10000).keys().list();
    // Creating task for each user.
    List<Task> taskList = new ArrayList<>(keyList.size());
    for (Key<UserEntity> key : keyList) {
    /*
			Task task = TaskQueueFactory.newTask()
					.setUrl( "/user/process" )
					.addParam( "userId", key.getId() + "" )
					.addParam( "validateData", "true" );
			taskList.add( task );
			*/
    }
    TaskQueueFactory.getUserOfflineTaskQueue().addAll(taskList);
    logger.log(Level.INFO, "Added " + taskList.size() + " tasks.");
    // Updating AppProperty.
    if (taskList.size() > 0) {
        appProperty.setValue(dataAccessor.getUser(keyList.get(keyList.size() - 1).getId()).getSignUpDate());
        dataAccessor.createOrUpdateAppProperty(appProperty);
    }
    return new GenericResponse();
}
Also used : Task(com.pratilipi.taskqueue.Task) GenericResponse(com.pratilipi.api.shared.GenericResponse) DataAccessor(com.pratilipi.data.DataAccessor) ArrayList(java.util.ArrayList) AppProperty(com.pratilipi.data.type.AppProperty) Date(java.util.Date) Key(com.googlecode.objectify.Key) UserEntity(com.pratilipi.data.type.gae.UserEntity) Get(com.pratilipi.api.annotation.Get)

Example 12 with Task

use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.

the class UserV1Api method post.

@Post
public Response post(PostRequest request) throws InvalidArgumentException, InsufficientAccessException {
    UserData userData = request.userId == null ? new UserData(AccessTokenFilter.getAccessToken().getUserId()) : new UserData(request.userId.equals(0L) ? null : request.userId);
    if (request.hasName) {
        String firstName = request.name.trim();
        String lastName = null;
        if (firstName.lastIndexOf(' ') != -1) {
            lastName = firstName.substring(firstName.lastIndexOf(' ') + 1);
            firstName = firstName.substring(0, firstName.lastIndexOf(' '));
        }
        userData.setFirstName(firstName);
        userData.setLastName(lastName);
    }
    if (request.hasEmail)
        userData.setEmail(request.email);
    if (request.hasPhone)
        userData.setPhone(request.phone);
    if (request.hasLanguage)
        userData.setLanguage(request.language);
    // Save UserData
    userData = UserDataUtil.saveUserData(userData);
    // New User (added by AEE)
    if (request.userId != null && request.userId.equals(0L)) {
        // Create Author profile for the User
        Long authorId = AuthorDataUtil.createAuthorProfile(userData, request.language == null ? UxModeFilter.getFilterLanguage() : request.language);
        userData.setAuthor(new AuthorData(authorId));
        userData.setProfilePageUrl("/author/" + authorId);
        // Send welcome mail to the user
        Task task = TaskQueueFactory.newTask().setUrl("/user/email").addParam("userId", userData.getId().toString()).addParam("language", request.language == null ? UxModeFilter.getDisplayLanguage().toString() : request.language.toString()).addParam("sendWelcomeMail", "true");
        TaskQueueFactory.getUserTaskQueue().add(task);
    }
    return new Response(userData);
}
Also used : GenericResponse(com.pratilipi.api.shared.GenericResponse) Task(com.pratilipi.taskqueue.Task) UserData(com.pratilipi.data.client.UserData) AuthorData(com.pratilipi.data.client.AuthorData) Post(com.pratilipi.api.annotation.Post)

Example 13 with Task

use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.

the class EmailProcessApi method get.

@Get
public GenericResponse get(GenericRequest request) throws UnexpectedServerException {
    DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
    RtdbAccessor rtdbAccessor = DataAccessorFactory.getRtdbAccessor();
    Map<Long, UserPreferenceRtdb> userPreferences = null;
    List<Email> emailList = new ArrayList<>();
    DataListIterator<Email> it = dataAccessor.getEmailListIteratorForStatePending(null, false);
    Set<Long> userIds = new HashSet<>();
    while (it.hasNext()) {
        Email email = it.next();
        emailList.add(email);
        userIds.add(email.getUserId());
    }
    userPreferences = rtdbAccessor.getUserPreferences(userIds);
    Map<Long, User> users = dataAccessor.getUsers(userPreferences.keySet());
    // Re-scheduling for all Emails
    DateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss z");
    dateFormat.setTimeZone(TimeZone.getTimeZone("IST"));
    for (Email email : emailList) {
        UserPreferenceRtdb preference = userPreferences.get(email.getUserId());
        User user = users.get(email.getUserId());
        if (email.getScheduledDate().before(new Date()))
            continue;
        if (email.getScheduledDate().equals(preference.getEmailFrequency().getNextSchedule(user.getLastEmailedDate())))
            continue;
        email.setScheduledDate(preference.getEmailFrequency().getNextSchedule(user.getLastEmailedDate()));
        email.setLastUpdated(new Date());
        if (email.getScheduledDate() == null) {
            // User changed setting to NEVER -> Scheduled Date will be null
            email.setState(EmailState.DROPPED);
        } else {
            logger.log(Level.INFO, "Rescheduling email: " + email.getId() + " from " + dateFormat.format(email.getScheduledDate()) + " to " + dateFormat.format(preference.getEmailFrequency().getNextSchedule(user.getLastEmailedDate())));
        }
    }
    // Creating Tasks
    List<Task> taskList = new ArrayList<>();
    Set<Long> userIdTaskSet = new HashSet<>();
    for (Email email : emailList) {
        if (// User changed setting to NEVER -> Email Dropped
        email.getState() != EmailState.PENDING)
            continue;
        if (email.getScheduledDate().after(new Date()))
            continue;
        UserPreferenceRtdb preference = userPreferences.get(email.getUserId());
        if (preference.getEmailFrequency() == EmailFrequency.IMMEDIATELY)
            taskList.add(TaskQueueFactory.newTask().setUrl("/email/process").addParam("emailId", email.getId().toString()));
        else
            userIdTaskSet.add(email.getUserId());
        email.setState(EmailState.IN_PROGRESS);
        email.setLastUpdated(new Date());
    }
    for (Long userId : userIdTaskSet) taskList.add(TaskQueueFactory.newTask().setUrl("/email/process").addParam("userId", userId.toString()));
    TaskQueueFactory.getEmailHpTaskQueue().addAll(taskList);
    emailList = dataAccessor.createOrUpdateEmailList(emailList);
    return new GenericResponse();
}
Also used : Task(com.pratilipi.taskqueue.Task) Email(com.pratilipi.data.type.Email) User(com.pratilipi.data.type.User) GenericResponse(com.pratilipi.api.shared.GenericResponse) DataAccessor(com.pratilipi.data.DataAccessor) ArrayList(java.util.ArrayList) Date(java.util.Date) RtdbAccessor(com.pratilipi.data.RtdbAccessor) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) UserPreferenceRtdb(com.pratilipi.data.type.UserPreferenceRtdb) SimpleDateFormat(java.text.SimpleDateFormat) HashSet(java.util.HashSet) Get(com.pratilipi.api.annotation.Get)

Aggregations

Task (com.pratilipi.taskqueue.Task)13 GenericResponse (com.pratilipi.api.shared.GenericResponse)7 Date (java.util.Date)6 Get (com.pratilipi.api.annotation.Get)5 DataAccessor (com.pratilipi.data.DataAccessor)5 ArrayList (java.util.ArrayList)5 Post (com.pratilipi.api.annotation.Post)4 AppProperty (com.pratilipi.data.type.AppProperty)3 UserPratilipi (com.pratilipi.data.type.UserPratilipi)3 Key (com.googlecode.objectify.Key)2 UserData (com.pratilipi.data.client.UserData)2 Pratilipi (com.pratilipi.data.type.Pratilipi)2 PratilipiEntity (com.pratilipi.data.type.gae.PratilipiEntity)2 UserPratilipiEntity (com.pratilipi.data.type.gae.UserPratilipiEntity)2 LinkedList (java.util.LinkedList)2 Cursor (com.google.appengine.api.datastore.Cursor)1 Async (com.pratilipi.common.util.Async)1 PratilipiFilter (com.pratilipi.common.util.PratilipiFilter)1 RtdbAccessor (com.pratilipi.data.RtdbAccessor)1 AuthorData (com.pratilipi.data.client.AuthorData)1