public async Task <CreateInvitationOperationResponse> Execute(CreateInvitationOperationRequest request)
        {
            var inviter = await _authorizationContext.CurrentIdentity();

            var existingInvitee = await _userRepository.QuerySingleOrDefaultAsync(user => user.Email == request.Email);

            if (existingInvitee != null)
            {
                throw new EmailAlreadyUseException();
            }

            var invite = new Domain.Entity.Infrastructure.Authentication.Invite
            {
                Id               = Guid.NewGuid(),
                InvitationTo     = request.Email,
                InvitationFromId = inviter.Id,
                FirstName        = request.FirstName,
                LastName         = request.LastName,
                Role             = request.Role ?? Constants.Employee.DefaultRole,
                Created          = DateTime.Now
            };

            var createInviteTask = _invitationRepository.CreateAsync(invite);

            string message = BuildInviteEmailMessage(invite.Id);

            var sendEmailTask =
                _emailService.SendEmailAsync("Invitation to Epicenter Calendar", message, invite.InvitationTo);

            await createInviteTask;
            await sendEmailTask;

            return(new CreateInvitationOperationResponse());
        }
Example #2
0
        public async Task <IActionResult> CreateInvite([FromBody] InviteModel model)
        {
            var request = new CreateInvitationOperationRequest
            {
                Email     = model.Email,
                FirstName = model.FirstName,
                LastName  = model.LastName,
                Role      = model.Role
            };

            try
            {
                await _createInvitationOperation.Execute(request);
            }
            catch (EmailAlreadyUseException exception)
            {
                return(BadRequest(new ErrorModel(exception.Message)));
            }

            return(Ok());
        }