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();
}
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;
}
Aggregations