public async Task <IActionResult> UpdateAsync(int transactionId, TransactionInputDto inputModel) { _logger.LogInformation($"{nameof(TransactionsController)}: {nameof(UpdateAsync)} was called for {transactionId}."); var accessKey = _currentUserService.AccessKey; var transaction = await _transactionsService.GetTransaction(transactionId, accessKey); if (transaction == null) { return(NotFound(transactionId)); } var transactionDomainModel = _mapper.Map <TransactionDomainModel>(inputModel); var modelState = _transactionsService.ValidateTransaction(transactionDomainModel); if (!modelState.IsValid) { return(UnprocessableEntity(modelState)); } transactionDomainModel.AccessKey = accessKey; _mapper.Map(transactionDomainModel, transaction, typeof(TransactionDomainModel), typeof(TransactionDomainModel)); await _transactionsService.UpdateTransaction(transaction); return(NoContent()); }
/// <summary> /// Создание нового перевода /// </summary> /// <param name="transactionInputDto"></param> /// <returns></returns> public TransactionInfoDto Create(TransactionInputDto transactionInputDto) { var recipientUserId = transactionInputDto.RecipientUserId; var amount = transactionInputDto.Amount; var currentBalance = GetBalance(); if (amount > currentBalance) { throw new UserFriendlyException("Суммы на счёте недостаточно для перевода"); } var recipientUser = _userRepository.Get(recipientUserId); if (AbpSession.UserId == null) { throw new UserFriendlyException("Текущий пользователь не найден"); } var creator = _userRepository.Get(AbpSession.UserId.Value); if (creator.Id == recipientUser.Id) { throw new UserFriendlyException("Невозможно выполнить перевод этому же пользователю"); } var transaction = new Transaction() { Amount = amount, CreatorUser = creator, RecipientUser = recipientUser, Type = -1 }; var id = _transactionRepository.InsertAndGetId(transaction); transaction = _transactionRepository.Get(id); _notificationPublisher.Publish("BalanceChanged", new BalanceChangedNotificationData(_transactionRepository.GetCurrentBalance(creator.Id)), userIds: new[] { new UserIdentifier(creator.TenantId, creator.Id) }); _notificationPublisher.Publish("BalanceChanged", new BalanceChangedNotificationData(_transactionRepository.GetCurrentBalance(recipientUser.Id)), userIds: new[] { new UserIdentifier(creator.TenantId, recipientUser.Id) }); return(Mapper.Map <TransactionInfoDto>(transaction)); }
public async Task <IActionResult> CreateAsync(TransactionInputDto inputModel) { _logger.LogInformation($"{nameof(TransactionsController)}: {nameof(CreateAsync)} was called."); var transactionDomainModel = _mapper.Map <TransactionDomainModel>(inputModel); var modelState = _transactionsService.ValidateTransaction(transactionDomainModel); if (!modelState.IsValid) { return(UnprocessableEntity(modelState)); } transactionDomainModel.AccessKey = _currentUserService.AccessKey; transactionDomainModel = await _transactionsService.CreateTransaction(transactionDomainModel); var transactionDto = _mapper.Map <TransactionDto>(transactionDomainModel); if (_mediaTypeService.IsLinkedRepresentation(_mediaType)) { var linkedTransactionDto = new LinkedTransactionDto { Transaction = transactionDto, Links = CreateLinksForTransaction(transactionDto.TransactionId) }; return(CreatedAtAction( nameof(GetAsync), new { transactionId = transactionDto.TransactionId }, transactionDto)); } else { return(CreatedAtAction( nameof(GetAsync), new { transactionId = transactionDto.TransactionId }, transactionDto)); } }