Esempio n. 1
0
        public async Task <Query.Contract> Handle(UpdateContractInfoCommand request, CancellationToken cancellationToken)
        {
            var contractDomain = _ContractRepository.GetById(request.Id).Result.ToDomain <Contract>(_Mapper);

            contractDomain.Validate();

            contractDomain.SetInfo(request.Name);

            #region Persistence

            await _ContractRepository.Update(contractDomain.ToModel <Command.Contract>(_Mapper));

            await _UnitOfWork.Commit();

            #endregion

            #region Bus

            var publishMessage = new Message();
            publishMessage.MessageType = "UpdateContract";
            var response = contractDomain.ToQueryModel <Query.Contract>(_Mapper);
            publishMessage.SetData(response);

            await _Bus.SendMessage(publishMessage);

            #endregion

            return(response);
        }
Esempio n. 2
0
        public async Task <AddContractPayload> UpdateContractInfo(
            UpdateContractInfoInput input,
            [Service] IServiceProvider serviceProvider,
            CancellationToken cancellationToken)
        {
            var updateContractInfoCommand = new UpdateContractInfoCommand()
            {
                Id   = input.Id,
                Name = input.Name
            };

            using (var scope = serviceProvider.CreateScope())
            {
                var mediator = scope.ServiceProvider.GetRequiredService <IMediator>();
                try
                {
                    var response = await mediator.Send(updateContractInfoCommand, cancellationToken);

                    return(new AddContractPayload(response));
                }
                catch (ValidationException e)
                {
                    var userErrors = new List <UserError>();
                    e.Message.Split(";").ForAll(item => { userErrors.Add(new UserError(item, item)); });
                    return(new AddContractPayload(userErrors));
                }
                catch (ElementNotFoundException e)
                {
                    return(new AddContractPayload(new List <UserError>
                    {
                        new UserError("Элемент не найден", "PROJ-not_found")
                    }));
                }
                catch (QueryArgumentException e)
                {
                    return(new AddContractPayload(new List <UserError>
                    {
                        new UserError(e.Message, e.Message)
                    }));
                }
            }
        }