Exemple #1
0
        public async Task <Guid> Handle(CreateMailingEmailCommand request, CancellationToken cancellationToken)
        {
            var mailingEmailId = await _mailingEmailService.GetOrCreateMailingEmail(request.Email);

            var mailingGroup = await _mailingGroupRepository.GetById(request.MailingGroupId);

            if (mailingGroup == null)
            {
                throw new LogicException(LogicErrorCode.CouldNotFindMailingGroup, $"Could not found mailing group with id '{request.MailingGroupId}'");
            }

            if (mailingGroup.UserId != request.UserId)
            {
                throw new LogicException(LogicErrorCode.DisallowToMakeChangesInOtherUserMailingGroup, "Could not update mailing group which is not belong to user");
            }

            var mailingEmailGroup = _mailingEmailGroupRepository.GetAll()
                                    .FirstOrDefault(meg => meg.MailingGroupId == request.MailingGroupId && meg.MailingEmailId == mailingEmailId);

            if (mailingEmailGroup != null)
            {
                throw new LogicException(LogicErrorCode.MailingEmailGrourExist, "Actually there is exist mailing email which is subscribed to mailing group");
            }

            var newMailingGroup = new MailingEmailGroup()
            {
                MailingEmailId = mailingEmailId,
                MailingGroupId = mailingGroup.Id
            };

            await _mailingEmailGroupRepository.Add(newMailingGroup);

            return(newMailingGroup.Id);
        }
        public async Task <Unit> Handle(UpdateMailingGroupCommand request, CancellationToken cancellationToken)
        {
            var mailingGroup = await _mailingGroupRepository.GetById(request.MailingGroupId);

            if (mailingGroup.UserId != request.UserId)
            {
                throw new LogicException(LogicErrorCode.DisallowToMakeChangesInOtherUserMailingGroup, "Could not update mailing group which is not belong to user");
            }

            if (mailingGroup == null)
            {
                throw new LogicException(LogicErrorCode.CouldNotFindMailingGroup, $"Could not found mailing group with id '{request.MailingGroupId}'");
            }

            if (mailingGroup.Name == request.NewName)
            {
                throw new LogicException(LogicErrorCode.NewNameAndOldNameShouldBeDifferent, "Could not update group name to exactly same group name");
            }

            _mailingGroupService.CheckMailingGroupIsUnique(request.NewName);

            mailingGroup.Name = request.NewName;

            await _mailingGroupRepository.Update(mailingGroup);

            return(await Task.FromResult(Unit.Value));
        }
        public async Task <Unit> Handle(DeleteMailingGroupCommand request, CancellationToken cancellationToken)
        {
            var mailingGroup = await _mailingGroupRepository.GetById(request.MailingGroupId);

            if (mailingGroup.UserId != request.UserId)
            {
                throw new LogicException(LogicErrorCode.DisallowToMakeChangesInOtherUserMailingGroup, "Could not delete mailing group which is not belong to user");
            }

            await _mailingGroupEmailService.DeleteMailingEmailRelatedToMailingGroup(mailingGroup.Id);

            await _mailingGroupRepository.Remove(mailingGroup);

            return(await Task.FromResult(Unit.Value));
        }