Search in sources :

Example 1 with UserOnboarding

use of io.lumeer.api.model.UserOnboarding in project engine by Lumeer.

the class UserFacade method updateOnboarding.

public UserOnboarding updateOnboarding(final UserOnboarding onboarding) {
    final User currentUser = getCurrentUser();
    final UserOnboarding currentOnboarding = Objects.requireNonNullElse(currentUser.getOnboarding(), new UserOnboarding());
    currentUser.setOnboarding(onboarding);
    User updatedUser = updateUserAndSendNotification(null, currentUser.getId(), currentUser);
    userCache.updateUser(updatedUser.getEmail(), updatedUser);
    if (Optional.ofNullable(currentOnboarding.getInvitedUsers()).orElse(0) == 0 && Optional.ofNullable(updatedUser.getOnboarding().getInvitedUsers()).orElse(0) > 0) {
        eventLogFacade.logEvent(updatedUser, "Invited " + updatedUser.getOnboarding().getInvitedUsers() + " users in onboarding process");
    }
    if (!currentOnboarding.isVideoPlayed() && updatedUser.getOnboarding().isVideoPlayed()) {
        eventLogFacade.logEvent(updatedUser, "Onboarding video played");
    }
    if (Optional.ofNullable(currentOnboarding.getVideoPlayedSeconds()).orElse(0) == 0 && Optional.ofNullable(updatedUser.getOnboarding().getVideoPlayedSeconds()).orElse(0) > 0) {
        eventLogFacade.logEvent(updatedUser, "Watched onboarding video for " + updatedUser.getOnboarding().getVideoPlayedSeconds() + " seconds");
    }
    if (!currentOnboarding.isHelpOpened() && updatedUser.getOnboarding().isHelpOpened()) {
        eventLogFacade.logEvent(updatedUser, "Opened help for the first time");
    }
    return updatedUser.getOnboarding();
}
Also used : User(io.lumeer.api.model.User) UpdateCurrentUser(io.lumeer.engine.api.event.UpdateCurrentUser) CreateOrUpdateUser(io.lumeer.engine.api.event.CreateOrUpdateUser) RemoveUser(io.lumeer.engine.api.event.RemoveUser) UserOnboarding(io.lumeer.api.model.UserOnboarding)

Example 2 with UserOnboarding

use of io.lumeer.api.model.UserOnboarding in project engine by Lumeer.

the class UserCodec method decode.

@Override
@SuppressWarnings("unchecked")
public User decode(final BsonReader bsonReader, final DecoderContext decoderContext) {
    Document bson = documentCodec.decode(bsonReader, decoderContext);
    String id = bson.getObjectId(ID).toHexString();
    String name = bson.getString(NAME);
    String email = bson.getString(EMAIL);
    List<String> authIds = bson.get(AUTH_IDS, List.class);
    // old style
    Set<String> organizations;
    if (bson.containsKey(ALL_GROUPS)) {
        List<Document> documentList = bson.get(ALL_GROUPS, List.class);
        organizations = convertGroupsMapToOrganizations(documentList);
    } else {
        List<String> organizationsList = bson.getList(ORGANIZATIONS, String.class);
        organizations = organizationsList != null ? new HashSet<>(organizationsList) : Collections.emptySet();
    }
    String defaultOrganizationId = bson.getString(DEFAULT_ORGANIZATION_ID);
    String defaultProjectId = bson.getString(DEFAULT_PROJECT_ID);
    List<String> wishes = bson.get(User.WISHES, List.class);
    Boolean agreement = bson.getBoolean(AGREEMENT);
    ZonedDateTime agreementDate = null;
    if (bson.getDate(AGREEMENT_DATE) != null) {
        agreementDate = ZonedDateTime.ofInstant(bson.getDate(AGREEMENT_DATE).toInstant(), ZoneOffset.UTC);
    }
    Boolean newsletter = bson.getBoolean(NEWSLETTER);
    Boolean wizardDismissed = bson.getBoolean(WIZARD_DISMISSED);
    Boolean affiliatePartner = bson.getBoolean(AFFILIATE_PARTNER);
    Boolean emailVerified = bson.getBoolean(EMAIL_VERIFIED);
    String referral = bson.getString(REFERRAL);
    String language = bson.getString(LANGUAGE);
    String timeZone = bson.getString(TIME_ZONE);
    List<NotificationSetting> notificationSettings;
    final String notificationsLanguage = bson.getString(NOTIFICATIONS_LANGUAGE);
    List<Document> notifications = bson.getList(NOTIFICATIONS, Document.class);
    if (notifications != null && notifications.size() != 2 && notifications.size() != 0) {
        // it is not empty and it does not contain just the following 2 settings
        notificationSettings = new ArrayList<>(notifications).stream().map(NotificationSettingCodec::convertFromDocument).collect(Collectors.toList());
        if (notificationSettings.stream().filter(ns -> ns.getNotificationType() == NotificationType.TASK_COMMENTED && ns.getNotificationChannel() == NotificationChannel.Internal).findFirst().isEmpty()) {
            notificationSettings.add(new NotificationSetting(NotificationType.TASK_COMMENTED, NotificationChannel.Internal, NotificationFrequency.Immediately));
            notificationSettings.add(new NotificationSetting(NotificationType.TASK_MENTIONED, NotificationChannel.Internal, NotificationFrequency.Immediately));
        }
        if (notificationSettings.stream().filter(ns -> ns.getNotificationType() == NotificationType.TASK_REOPENED && ns.getNotificationChannel() == NotificationChannel.Internal).findFirst().isEmpty()) {
            notificationSettings.add(new NotificationSetting(NotificationType.TASK_REOPENED, NotificationChannel.Internal, NotificationFrequency.Immediately));
        }
        if (notificationSettings.stream().anyMatch(ns -> ns.getNotificationType() == NotificationType.TASK_ASSIGNED && ns.getNotificationChannel() == NotificationChannel.Email) && notificationSettings.stream().filter(ns -> ns.getNotificationType() == NotificationType.TASK_REOPENED && ns.getNotificationChannel() == NotificationChannel.Email).findFirst().isEmpty()) {
            notificationSettings.add(new NotificationSetting(NotificationType.TASK_REOPENED, NotificationChannel.Email, NotificationFrequency.Immediately));
        }
    } else {
        notificationSettings = List.of(new NotificationSetting(NotificationType.ORGANIZATION_SHARED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.PROJECT_SHARED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.COLLECTION_SHARED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.VIEW_SHARED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.BULK_ACTION, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_ASSIGNED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_REOPENED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_UPDATED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_REMOVED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_UNASSIGNED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.STATE_UPDATE, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.DUE_DATE_SOON, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.PAST_DUE_DATE, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.DUE_DATE_CHANGED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_COMMENTED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_MENTIONED, NotificationChannel.Internal, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.ORGANIZATION_SHARED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.PROJECT_SHARED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.COLLECTION_SHARED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.VIEW_SHARED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.BULK_ACTION, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_ASSIGNED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_REOPENED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_UPDATED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_REMOVED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_UNASSIGNED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.STATE_UPDATE, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.DUE_DATE_SOON, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.PAST_DUE_DATE, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.DUE_DATE_CHANGED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_COMMENTED, NotificationChannel.Email, NotificationFrequency.Immediately), new NotificationSetting(NotificationType.TASK_MENTIONED, NotificationChannel.Email, NotificationFrequency.Immediately));
    }
    Document hints = bson.get(HINTS, Document.class);
    NotificationsSettings settings = new NotificationsSettings(notificationSettings, notificationsLanguage);
    User user = new User(id, name, email, organizations, wishes, agreement, agreementDate, newsletter, wizardDismissed, referral, settings, new DataDocument(hints == null ? new Document() : hints));
    user.setAuthIds(authIds != null ? new HashSet<>(authIds) : new HashSet<>());
    user.setDefaultWorkspace(new DefaultWorkspace(defaultOrganizationId, defaultProjectId));
    user.setAffiliatePartner(affiliatePartner != null && affiliatePartner);
    user.setEmailVerified(emailVerified != null && emailVerified);
    user.setTimeZone(timeZone);
    user.setLanguage(language);
    Document onboarding = bson.get(ONBOARDING, Document.class);
    UserOnboarding userOnboarding = onboarding != null ? UserOnboardingCodec.convertFromDocument(onboarding) : new UserOnboarding();
    user.setOnboarding(userOnboarding);
    return user;
}
Also used : Document(org.bson.Document) NotificationSetting(io.lumeer.api.model.NotificationSetting) NotificationType(io.lumeer.api.model.NotificationType) NotificationChannel(io.lumeer.api.model.NotificationChannel) Date(java.util.Date) ZonedDateTime(java.time.ZonedDateTime) User(io.lumeer.api.model.User) CodecRegistry(org.bson.codecs.configuration.CodecRegistry) BsonReader(org.bson.BsonReader) BsonValue(org.bson.BsonValue) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) ZoneOffset(java.time.ZoneOffset) UserOnboarding(io.lumeer.api.model.UserOnboarding) DecoderContext(org.bson.codecs.DecoderContext) EncoderContext(org.bson.codecs.EncoderContext) DataDocument(io.lumeer.engine.api.data.DataDocument) BsonObjectId(org.bson.BsonObjectId) Set(java.util.Set) NotificationFrequency(io.lumeer.api.model.NotificationFrequency) Collectors(java.util.stream.Collectors) DefaultWorkspace(io.lumeer.api.model.DefaultWorkspace) List(java.util.List) NotificationsSettings(io.lumeer.api.model.NotificationsSettings) Codec(org.bson.codecs.Codec) ObjectId(org.bson.types.ObjectId) BsonWriter(org.bson.BsonWriter) CollectibleCodec(org.bson.codecs.CollectibleCodec) Collections(java.util.Collections) DataDocument(io.lumeer.engine.api.data.DataDocument) User(io.lumeer.api.model.User) DefaultWorkspace(io.lumeer.api.model.DefaultWorkspace) UserOnboarding(io.lumeer.api.model.UserOnboarding) ArrayList(java.util.ArrayList) Document(org.bson.Document) DataDocument(io.lumeer.engine.api.data.DataDocument) NotificationsSettings(io.lumeer.api.model.NotificationsSettings) ZonedDateTime(java.time.ZonedDateTime) NotificationSetting(io.lumeer.api.model.NotificationSetting) HashSet(java.util.HashSet)

Aggregations

User (io.lumeer.api.model.User)2 UserOnboarding (io.lumeer.api.model.UserOnboarding)2 DefaultWorkspace (io.lumeer.api.model.DefaultWorkspace)1 NotificationChannel (io.lumeer.api.model.NotificationChannel)1 NotificationFrequency (io.lumeer.api.model.NotificationFrequency)1 NotificationSetting (io.lumeer.api.model.NotificationSetting)1 NotificationType (io.lumeer.api.model.NotificationType)1 NotificationsSettings (io.lumeer.api.model.NotificationsSettings)1 DataDocument (io.lumeer.engine.api.data.DataDocument)1 CreateOrUpdateUser (io.lumeer.engine.api.event.CreateOrUpdateUser)1 RemoveUser (io.lumeer.engine.api.event.RemoveUser)1 UpdateCurrentUser (io.lumeer.engine.api.event.UpdateCurrentUser)1 ZoneOffset (java.time.ZoneOffset)1 ZonedDateTime (java.time.ZonedDateTime)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 Date (java.util.Date)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1