add inapp notification events in main app
This commit is contained in:
parent
708fa69c53
commit
17d97bb3b3
|
@ -0,0 +1,78 @@
|
|||
package eu.eudat.model.persist;
|
||||
|
||||
import eu.eudat.commons.validation.BaseValidator;
|
||||
import eu.eudat.commons.validation.ValidatorFactory;
|
||||
import eu.eudat.commons.validation.specification.Specification;
|
||||
import eu.eudat.convention.ConventionService;
|
||||
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class UserRequestPersist {
|
||||
|
||||
private UUID userId;
|
||||
public static final String _userId = "userId";
|
||||
|
||||
private String email;
|
||||
public static final String _email = "email";
|
||||
|
||||
public UUID getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(UUID userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
@Component(UserRequestPersistValidator.ValidatorName)
|
||||
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||
public static class UserRequestPersistValidator extends BaseValidator<UserRequestPersist> {
|
||||
|
||||
public static final String ValidatorName = "UserRequestPersistValidator";
|
||||
|
||||
private final MessageSource messageSource;
|
||||
|
||||
private final ValidatorFactory validatorFactory;
|
||||
|
||||
protected UserRequestPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource, ValidatorFactory validatorFactory) {
|
||||
super(conventionService, errors);
|
||||
this.messageSource = messageSource;
|
||||
this.validatorFactory = validatorFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<UserRequestPersist> modelClass() {
|
||||
return UserRequestPersist.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Specification> specifications(UserRequestPersist item) {
|
||||
return Arrays.asList(
|
||||
this.spec()
|
||||
.must(() -> this.isValidGuid(item.getUserId()))
|
||||
.failOn(UserRequestPersist._userId).failWith(messageSource.getMessage("Validation_Required", new Object[]{UserRequestPersist._userId}, LocaleContextHolder.getLocale())),
|
||||
|
||||
this.spec()
|
||||
.must(() -> !this.isEmpty(item.getEmail()))
|
||||
.failOn(UserRequestPersist._email).failWith(messageSource.getMessage("Validation_Required", new Object[]{UserRequestPersist._email}, LocaleContextHolder.getLocale()))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -217,6 +217,14 @@ public class DescriptionServiceImpl implements DescriptionService {
|
|||
if (!dmpUser.getUserId().equals(this.userScope.getUserIdSafe())){
|
||||
UserEntity user = this.queryFactory.query(UserQuery.class).ids(dmpUser.getUserId()).first();
|
||||
if (user != null){
|
||||
this.createDescriptionNotificationEvent(description, user, NotificationContactType.EMAIL);
|
||||
this.createDescriptionNotificationEvent(description, user, NotificationContactType.IN_APP);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createDescriptionNotificationEvent(DescriptionEntity description, UserEntity user, NotificationContactType type) throws InvalidApplicationException {
|
||||
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
||||
event.setUserId(this.userScope.getUserId());
|
||||
|
||||
|
@ -227,7 +235,7 @@ public class DescriptionServiceImpl implements DescriptionService {
|
|||
contactPairs.add(new ContactPair(ContactInfoType.Email, query.first().getValue()));
|
||||
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
||||
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
||||
event.setContactTypeHint(NotificationContactType.EMAIL);
|
||||
event.setContactTypeHint(type);
|
||||
|
||||
event = this.applyNotificationType(description.getStatus(), event);
|
||||
NotificationFieldData data = new NotificationFieldData();
|
||||
|
@ -241,9 +249,6 @@ public class DescriptionServiceImpl implements DescriptionService {
|
|||
|
||||
eventHandler.handle(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private NotificationIntegrationEvent applyNotificationType(DescriptionStatus status, NotificationIntegrationEvent event) {
|
||||
switch (status) {
|
||||
|
|
|
@ -227,7 +227,8 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
|||
data.setUserId(user.getUserId());
|
||||
data.setRole(user.getRole());
|
||||
this.entityManager.persist(data);
|
||||
this.sendJoinMail(data);
|
||||
this.sendDescriptionTemplateInvitationEvent(data, NotificationContactType.EMAIL);
|
||||
this.sendDescriptionTemplateInvitationEvent(data, NotificationContactType.IN_APP);
|
||||
}
|
||||
updatedCreatedIds.add(data.getId());
|
||||
}
|
||||
|
@ -236,7 +237,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
|||
this.deleterFactory.deleter(UserDescriptionTemplateDeleter.class).delete(toDelete);
|
||||
}
|
||||
|
||||
private void sendJoinMail(UserDescriptionTemplateEntity userDescriptionTemplate) throws InvalidApplicationException {
|
||||
private void sendDescriptionTemplateInvitationEvent(UserDescriptionTemplateEntity userDescriptionTemplate, NotificationContactType type) throws InvalidApplicationException {
|
||||
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
||||
event.setTenant(tenantScope.getTenant());
|
||||
event.setUserId(userScope.getUserIdSafe());
|
||||
|
@ -251,7 +252,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
|||
contactPairs.add(new ContactPair(ContactInfoType.Email, query.first().getValue()));
|
||||
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
||||
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
||||
event.setContactTypeHint(NotificationContactType.EMAIL);
|
||||
event.setContactTypeHint(type);
|
||||
event.setNotificationType(notificationProperties.getDescriptionTemplateInvitationType());
|
||||
NotificationFieldData data = new NotificationFieldData();
|
||||
List<FieldInfo> fieldInfoList = new ArrayList<>();
|
||||
|
@ -261,7 +262,6 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
|||
data.setFields(fieldInfoList);
|
||||
event.setData(jsonHandlingService.toJsonSafe(data));
|
||||
eventHandler.handle(event);
|
||||
|
||||
}
|
||||
|
||||
private void addOwner(DescriptionTemplateEntity descriptionTemplateEntity) throws InvalidApplicationException {
|
||||
|
|
|
@ -186,6 +186,14 @@ public class DmpServiceImpl implements DmpService {
|
|||
if (!dmpUser.getUserId().equals(this.userScope.getUserIdSafe())){
|
||||
UserEntity user = this.queryFactory.query(UserQuery.class).ids(dmpUser.getUserId()).first();
|
||||
if (user != null){
|
||||
this.createDmpNotificationEvent(dmp, user, NotificationContactType.EMAIL);
|
||||
this.createDmpNotificationEvent(dmp, user, NotificationContactType.IN_APP);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createDmpNotificationEvent(DmpEntity dmp, UserEntity user, NotificationContactType type) throws InvalidApplicationException {
|
||||
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
||||
event.setUserId(this.userScope.getUserId());
|
||||
UserContactInfoQuery query = this.queryFactory.query(UserContactInfoQuery.class).userIds(user.getId());
|
||||
|
@ -195,7 +203,7 @@ public class DmpServiceImpl implements DmpService {
|
|||
contactPairs.add(new ContactPair(ContactInfoType.Email, query.first().getValue()));
|
||||
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
||||
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
||||
event.setContactTypeHint(NotificationContactType.EMAIL);
|
||||
event.setContactTypeHint(type);
|
||||
|
||||
event = this.applyNotificationType(dmp.getStatus(), event);
|
||||
NotificationFieldData data = new NotificationFieldData();
|
||||
|
@ -209,9 +217,6 @@ public class DmpServiceImpl implements DmpService {
|
|||
|
||||
eventHandler.handle(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private NotificationIntegrationEvent applyNotificationType(DmpStatus status, NotificationIntegrationEvent event) {
|
||||
switch (status) {
|
||||
|
@ -737,6 +742,11 @@ public class DmpServiceImpl implements DmpService {
|
|||
private void sendDmpInvitationExistingUser(UUID userId, DmpEntity dmp, DmpUserRole role) throws InvalidApplicationException {
|
||||
UserEntity recipient = this.queryFactory.query(UserQuery.class).ids(userId).isActive(IsActive.Active).first();
|
||||
String email = this.queryFactory.query(UserContactInfoQuery.class).userIds(recipient.getId()).first().getValue();
|
||||
this.createDmpInvitationExistingUserEvent(recipient, dmp, role, email, NotificationContactType.EMAIL);
|
||||
this.createDmpInvitationExistingUserEvent(recipient, dmp, role, email, NotificationContactType.IN_APP);
|
||||
}
|
||||
|
||||
private void createDmpInvitationExistingUserEvent(UserEntity recipient, DmpEntity dmp, DmpUserRole role, String email, NotificationContactType type) throws InvalidApplicationException {
|
||||
|
||||
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
||||
event.setUserId(this.userScope.getUserIdSafe());
|
||||
|
@ -745,7 +755,7 @@ public class DmpServiceImpl implements DmpService {
|
|||
contactPairs.add(new ContactPair(ContactInfoType.Email, email));
|
||||
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
||||
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
||||
event.setContactTypeHint(NotificationContactType.EMAIL);
|
||||
event.setContactTypeHint(type);
|
||||
event.setNotificationType(notificationProperties.getDmpInvitationExistingUserType());
|
||||
NotificationFieldData data = new NotificationFieldData();
|
||||
List<FieldInfo> fieldInfoList = new ArrayList<>();
|
||||
|
|
|
@ -2,6 +2,7 @@ package eu.eudat.service.user;
|
|||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import eu.eudat.model.User;
|
||||
import eu.eudat.model.persist.UserRequestPersist;
|
||||
import eu.eudat.model.persist.UserPersist;
|
||||
import eu.eudat.model.persist.UserRolePatchPersist;
|
||||
import gr.cite.tools.exception.MyApplicationException;
|
||||
|
@ -31,9 +32,9 @@ public interface UserService {
|
|||
|
||||
User patchRoles(UserRolePatchPersist model, FieldSet fields) throws InvalidApplicationException;
|
||||
|
||||
void sendMergeAccountConfirmation(String email) throws InvalidApplicationException, JAXBException;
|
||||
void sendMergeAccountConfirmation(UserRequestPersist model) throws InvalidApplicationException, JAXBException;
|
||||
|
||||
void sendRemoveCredentialConfirmation(String email) throws InvalidApplicationException, JAXBException;
|
||||
void sendRemoveCredentialConfirmation(UserRequestPersist model) throws InvalidApplicationException, JAXBException;
|
||||
|
||||
void confirmMergeAccount(String token) throws InvalidApplicationException;
|
||||
|
||||
|
|
|
@ -343,20 +343,28 @@ public class UserServiceImpl implements UserService {
|
|||
//endregion
|
||||
|
||||
//notifications
|
||||
public void sendMergeAccountConfirmation(String email) throws InvalidApplicationException, JAXBException {
|
||||
String token = this.createActionConfirmation(email, ActionConfirmationType.MergeAccount);
|
||||
public void sendMergeAccountConfirmation(UserRequestPersist model) throws InvalidApplicationException, JAXBException {
|
||||
UserEntity user = this.queryFactory.query(UserQuery.class).ids(model.getUserId()).isActive(IsActive.Active).first();
|
||||
if (user == null){
|
||||
throw new MyApplicationException("User don't exist");
|
||||
}
|
||||
String token = this.createActionConfirmation(model.getEmail(), ActionConfirmationType.MergeAccount);
|
||||
createMergeNotificationEvent(token, user, model.getEmail(), NotificationContactType.EMAIL);
|
||||
createMergeNotificationEvent(token, user, model.getEmail(), NotificationContactType.IN_APP);
|
||||
}
|
||||
|
||||
private void createMergeNotificationEvent(String token, UserEntity user, String email, NotificationContactType type) throws InvalidApplicationException {
|
||||
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
||||
event.setUserId(this.userScope.getUserIdSafe());
|
||||
event.setUserId(user.getId());
|
||||
List<ContactPair> contactPairs = new ArrayList<>();
|
||||
contactPairs.add(new ContactPair(ContactInfoType.Email, email));
|
||||
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
||||
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
||||
event.setContactTypeHint(NotificationContactType.EMAIL);
|
||||
event.setContactTypeHint(type);
|
||||
event.setNotificationType(notificationProperties.getMergeAccountConfirmationType());
|
||||
NotificationFieldData data = new NotificationFieldData();
|
||||
List<FieldInfo> fieldInfoList = new ArrayList<>();
|
||||
fieldInfoList.add(new FieldInfo("{userName}", DataType.String, this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserIdSafe()).first().getName()));
|
||||
fieldInfoList.add(new FieldInfo("{userName}", DataType.String, user.getName()));
|
||||
fieldInfoList.add(new FieldInfo("{confirmationToken}", DataType.String, token));
|
||||
fieldInfoList.add(new FieldInfo("{expiration_time}", DataType.String, this.secondsToTime(this.notificationProperties.getEmailExpirationTimeSeconds())));
|
||||
data.setFields(fieldInfoList);
|
||||
|
@ -364,26 +372,34 @@ public class UserServiceImpl implements UserService {
|
|||
eventHandler.handle(event);
|
||||
}
|
||||
|
||||
public void sendRemoveCredentialConfirmation(String email) throws InvalidApplicationException, JAXBException {
|
||||
public void sendRemoveCredentialConfirmation(UserRequestPersist model) throws InvalidApplicationException, JAXBException {
|
||||
|
||||
UserContactInfoEntity userContactInfo = this.queryFactory.query(UserContactInfoQuery.class).types(ContactInfoType.Email).userIds(this.userScope.getUserIdSafe()).values(email).first();
|
||||
UserQuery userQuery = this.queryFactory.query(UserQuery.class).ids(model.getUserId()).isActive(IsActive.Active);
|
||||
if (userQuery == null || userQuery.count() == 0){
|
||||
throw new MyApplicationException("User don't exist");
|
||||
}
|
||||
UserContactInfoEntity userContactInfo = this.queryFactory.query(UserContactInfoQuery.class).types(ContactInfoType.Email).userIds(model.getUserId()).values(model.getEmail()).first();
|
||||
if(userContactInfo == null){
|
||||
throw new MyApplicationException("Email does not exist in this user!");
|
||||
}
|
||||
UserCredentialQuery query = this.queryFactory.query(UserCredentialQuery.class).userIds(this.userScope.getUserIdSafe());
|
||||
UserCredentialQuery query = this.queryFactory.query(UserCredentialQuery.class).userIds(model.getUserId());
|
||||
if (query == null || query.count() == 0){
|
||||
throw new MyApplicationException("This user don't have credential!");
|
||||
}
|
||||
|
||||
String token = this.createActionConfirmation(email, ActionConfirmationType.RemoveCredential);
|
||||
String token = this.createActionConfirmation(model.getEmail(), ActionConfirmationType.RemoveCredential);
|
||||
this.createRemoveCredentialNotificationEvent(token, model.getEmail(), model.getUserId(), NotificationContactType.EMAIL);
|
||||
this.createRemoveCredentialNotificationEvent(token, model.getEmail(), model.getUserId(), NotificationContactType.IN_APP);
|
||||
}
|
||||
|
||||
private void createRemoveCredentialNotificationEvent(String token, String email, UUID userId, NotificationContactType type) throws InvalidApplicationException {
|
||||
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
||||
event.setUserId(this.userScope.getUserIdSafe());
|
||||
event.setUserId(userId);
|
||||
List<ContactPair> contactPairs = new ArrayList<>();
|
||||
contactPairs.add(new ContactPair(ContactInfoType.Email, email));
|
||||
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
||||
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
||||
event.setContactTypeHint(NotificationContactType.EMAIL);
|
||||
event.setContactTypeHint(type);
|
||||
event.setNotificationType(notificationProperties.getRemoveCredentialConfirmationType());
|
||||
NotificationFieldData data = new NotificationFieldData();
|
||||
List<FieldInfo> fieldInfoList = new ArrayList<>();
|
||||
|
|
|
@ -14,6 +14,7 @@ import eu.eudat.model.builder.DmpAssociatedUserBuilder;
|
|||
import eu.eudat.model.builder.UserBuilder;
|
||||
import eu.eudat.model.censorship.DmpAssociatedUserCensor;
|
||||
import eu.eudat.model.censorship.UserCensor;
|
||||
import eu.eudat.model.persist.UserRequestPersist;
|
||||
import eu.eudat.model.persist.UserPersist;
|
||||
import eu.eudat.model.persist.UserRolePatchPersist;
|
||||
import eu.eudat.model.result.QueryResult;
|
||||
|
@ -270,23 +271,24 @@ public class UserController {
|
|||
this.auditService.track(AuditableAction.User_Delete, "id", id);
|
||||
}
|
||||
|
||||
@GetMapping("mine/merge-account-request/{email}")
|
||||
@PostMapping("mine/merge-account-request/{email}")
|
||||
@Transactional
|
||||
public ResponseEntity<ResponseItem<String>> mergeAccount(@PathVariable("email") String email) throws InvalidApplicationException, JAXBException {
|
||||
logger.debug(new MapLogEntry("merge account to user").And("email", email));
|
||||
@ValidationFilterAnnotation(validator = UserRequestPersist.UserRequestPersistValidator.ValidatorName, argumentName = "model")
|
||||
public Boolean mergeAccount(@RequestBody UserRequestPersist model) throws InvalidApplicationException, JAXBException {
|
||||
logger.debug(new MapLogEntry("merge account to user").And("email", model));
|
||||
|
||||
this.userTypeService.sendMergeAccountConfirmation(email);
|
||||
this.userTypeService.sendMergeAccountConfirmation(model);
|
||||
|
||||
this.auditService.track(AuditableAction.User_MergeRequest, Map.ofEntries(
|
||||
new AbstractMap.SimpleEntry<String, Object>("email", email)
|
||||
new AbstractMap.SimpleEntry<String, Object>("model", model)
|
||||
));
|
||||
|
||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<String>().status(ApiMessageCode.SUCCESS_MESSAGE).payload("Merge Account Request Success"));
|
||||
return true;
|
||||
}
|
||||
|
||||
@GetMapping("mine/confirm-merge-account/token/{token}")
|
||||
@Transactional
|
||||
public ResponseEntity<ResponseItem<String>> confirmMergeAccount(@PathVariable("token") String token) throws InvalidApplicationException, JAXBException {
|
||||
public Boolean confirmMergeAccount(@PathVariable("token") String token) throws InvalidApplicationException, JAXBException {
|
||||
logger.debug(new MapLogEntry("confirm merge account to user").And("token", token));
|
||||
|
||||
this.userTypeService.confirmMergeAccount(token);
|
||||
|
@ -295,26 +297,27 @@ public class UserController {
|
|||
new AbstractMap.SimpleEntry<String, Object>("token", token)
|
||||
));
|
||||
|
||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<String>().status(ApiMessageCode.SUCCESS_MESSAGE).payload("Merge Account Confirm Success"));
|
||||
return true;
|
||||
}
|
||||
|
||||
@GetMapping("mine/remove-credential-request/{email}")
|
||||
@Transactional
|
||||
public ResponseEntity<ResponseItem<String>> removeCredentialAccount(@PathVariable("email") String email) throws InvalidApplicationException, JAXBException {
|
||||
logger.debug(new MapLogEntry("remove credential request to user").And("email", email));
|
||||
@ValidationFilterAnnotation(validator = UserRequestPersist.UserRequestPersistValidator.ValidatorName, argumentName = "model")
|
||||
public Boolean removeCredentialAccount(@RequestBody UserRequestPersist model) throws InvalidApplicationException, JAXBException {
|
||||
logger.debug(new MapLogEntry("remove credential request to user").And("model", model));
|
||||
|
||||
this.userTypeService.sendRemoveCredentialConfirmation(email);
|
||||
this.userTypeService.sendRemoveCredentialConfirmation(model);
|
||||
|
||||
this.auditService.track(AuditableAction.User_RemoveCredentialRequest, Map.ofEntries(
|
||||
new AbstractMap.SimpleEntry<String, Object>("email", email)
|
||||
new AbstractMap.SimpleEntry<String, Object>("email", model)
|
||||
));
|
||||
|
||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<String>().status(ApiMessageCode.SUCCESS_MESSAGE).payload("Remove Credential Request Success"));
|
||||
return true;
|
||||
}
|
||||
|
||||
@GetMapping("mine/confirm-remove-credential/token/{token}")
|
||||
@Transactional
|
||||
public ResponseEntity<ResponseItem<String>> confirmRemoveCredentialAccount(@PathVariable("token") String token) throws InvalidApplicationException, JAXBException {
|
||||
public Boolean confirmRemoveCredentialAccount(@PathVariable("token") String token) throws InvalidApplicationException, JAXBException {
|
||||
logger.debug(new MapLogEntry("confirm remove credential to user").And("token", token));
|
||||
|
||||
this.userTypeService.confirmRemoveCredential(token);
|
||||
|
@ -323,6 +326,6 @@ public class UserController {
|
|||
new AbstractMap.SimpleEntry<String, Object>("model", token)
|
||||
));
|
||||
|
||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<String>().status(ApiMessageCode.SUCCESS_MESSAGE).payload("Remove Credential Account Success"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue