From 8e77234a3e79f9bc586d90bd29b5e2e1479c561c Mon Sep 17 00:00:00 2001 From: ychung-mot Date: Mon, 25 Mar 2024 14:15:21 -0700 Subject: [PATCH] chore: new access request notification --- .../StrDss.Data/Repositories/UserRepository.cs | 10 ++++++++++ .../EmailTemplates/NewAccessRequest.cs | 18 ++++++++++++++++++ server/StrDss.Service/UserService.cs | 16 ++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 server/StrDss.Service/EmailTemplates/NewAccessRequest.cs diff --git a/server/StrDss.Data/Repositories/UserRepository.cs b/server/StrDss.Data/Repositories/UserRepository.cs index 431c9995..3fd76e73 100644 --- a/server/StrDss.Data/Repositories/UserRepository.cs +++ b/server/StrDss.Data/Repositories/UserRepository.cs @@ -17,6 +17,7 @@ public interface IUserRepository Task UpdateUserAsync(UserDto dto); Task DenyAccessRequest(AccessRequestDenyDto dto); Task ApproveAccessRequest(AccessRequestApproveDto dto, string role); + Task> GetAdminUsers(); } public class UserRepository : RepositoryBase, IUserRepository { @@ -104,5 +105,14 @@ public async Task ApproveAccessRequest(AccessRequestApproveDto dto, string role) var roleEntity = await _dbContext.DssUserRoles.FirstAsync(x => x.UserRoleCd == role); entity.UserRoleCds.Add(roleEntity); } + + public async Task> GetAdminUsers() + { + var adminUsers = await _dbContext.DssUserRoles + .Where(x => x.UserRoleCd == Roles.CeuAdmin) + .SelectMany(x => x.UserIdentities).ToListAsync(); + + return _mapper.Map>(adminUsers); + } } } diff --git a/server/StrDss.Service/EmailTemplates/NewAccessRequest.cs b/server/StrDss.Service/EmailTemplates/NewAccessRequest.cs new file mode 100644 index 00000000..9930665a --- /dev/null +++ b/server/StrDss.Service/EmailTemplates/NewAccessRequest.cs @@ -0,0 +1,18 @@ +namespace StrDss.Service.EmailTemplates +{ + public class NewAccessRequest : EmailTemplateBase + { + public NewAccessRequest(IEmailMessageService emailService) + : base(emailService) + { + } + public string Link { get; set; } = ""; + public override string GetContent() + { + Subject = "STR Data Portal - New Access Request"; + + return +$@"New access request has been raised and requires review. {Link}"; + } + } +} diff --git a/server/StrDss.Service/UserService.cs b/server/StrDss.Service/UserService.cs index 6e90bbac..0999db59 100644 --- a/server/StrDss.Service/UserService.cs +++ b/server/StrDss.Service/UserService.cs @@ -89,6 +89,22 @@ public async Task>> CreateAccessRequestAsync(Acc _unitOfWork.Commit(); + var adminUsers = await _userRepo.GetAdminUsers(); + + if (adminUsers.Count > 0) + { + var emails = adminUsers.Select(x => x.EmailAddressDsc); + + var template = new NewAccessRequest(_emailService) + { + Link = GetHostUrl(), + To = emails, + Info = $"New Access Request email for {_currentUser.DisplayName}" + }; + + await template.SendEmail(); + } + return errors; }