Пример #1
0
        public async Task <OperationResult> UpdateEmailRecipient(
            EmailRecipientUpdateModel requestModel)
        {
            //using (var transaction = await _dbContext.Database.BeginTransactionAsync())
//                {
            try
            {
                var emailRecipient = await _dbContext.EmailRecipients
                                     .Include(x => x.TagRecipients)
                                     .FirstOrDefaultAsync(x => x.Id == requestModel.Id);

                if (emailRecipient == null)
                {
                    //transaction.Rollback();
                    return(new OperationResult(false,
                                               _localizationService.GetString("EmailRecipientNotFound")));
                }

                emailRecipient.Name            = requestModel.Name;
                emailRecipient.Email           = requestModel.Email.Replace(" ", "");
                emailRecipient.UpdatedAt       = DateTime.UtcNow;
                emailRecipient.UpdatedByUserId = _userService.UserId;

                // Tags
                var tagIds = emailRecipient.TagRecipients
                             .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                             .Select(x => x.EmailTagId)
                             .ToList();

                var tagsForDelete = emailRecipient.TagRecipients
                                    .Where(x => !requestModel.TagsIds.Contains(x.EmailTagId))
                                    .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                                    .ToList();

                var tagsForCreate = requestModel.TagsIds
                                    .Where(x => !tagIds.Contains(x))
                                    .ToList();

                foreach (var tagRecipient in tagsForDelete)
                {
                    _dbContext.EmailTagRecipients.Remove(tagRecipient);
                }

                foreach (var tagId in tagsForCreate)
                {
                    var emailTagRecipient = new EmailTagRecipient
                    {
                        CreatedByUserId  = _userService.UserId,
                        UpdatedByUserId  = _userService.UserId,
                        CreatedAt        = DateTime.UtcNow,
                        UpdatedAt        = DateTime.UtcNow,
                        EmailRecipientId = emailRecipient.Id,
                        EmailTagId       = tagId,
                        Version          = 1,
                    };

                    await _dbContext.EmailTagRecipients.AddAsync(emailTagRecipient);
                }

                _dbContext.EmailRecipients.Update(emailRecipient);
                await _dbContext.SaveChangesAsync();

                //transaction.Commit();
                return(new OperationResult(true,
                                           _localizationService.GetString("EmailRecipientUpdatedSuccessfully")));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                _logger.LogError(e.Message);
                //transaction.Rollback();
                return(new OperationResult(false,
                                           _localizationService.GetString("ErrorWhileUpdatingEmailRecipient")));
            }
            //}
        }
Пример #2
0
 public async Task <OperationResult> UpdateEmailTag([FromBody] EmailRecipientUpdateModel model)
 {
     return(await _emailRecipientsService.UpdateEmailRecipient(model));
 }