public TransactionViewModel(PWTransaction transaction) { if (transaction.Сounteragent == null) { throw new NullReferenceException("TransactionViewModel - PWTransaction has invalid property value of Сounteragent"); } Id = transaction.Id; AgentId = transaction.AgentId; СounteragentId = transaction.СounteragentId; СounteragentFullName = transaction.Сounteragent.FullName; СounteragentUserName = transaction.Сounteragent.UserName; TransactionAmount = transaction.TransactionAmount; AgentBalance = transaction.AgentBalance; OperationDateTime = transaction.OperationDateTime; Description = transaction.Description; }
private void AddTransactions(PWTranscationContext context) { var users = context.Users.Where(c => c.UserName.Contains("demo") || c.UserName.Contains("system")).ToList(); var demoUser = users.FirstOrDefault(user => user.UserName.Contains("*****@*****.**")); var systemUser = users.FirstOrDefault(user => user.UserName.Contains("*****@*****.**")); var demotransaction = new PWTransaction() { Id = Guid.NewGuid(), AgentId = demoUser.Id, СounteragentId = systemUser.Id, OperationDateTime = DateTime.UtcNow.AddDays(-30), AgentBalance = 100000, TransactionAmount = 100000, Description = "Bonus" }; context.PWTransactions.Add(demotransaction); for (int i = 0; i < users.Count; i++) { if (users[i] != systemUser && users[i] != demoUser) { PWTransaction transaction = new PWTransaction() { Id = Guid.NewGuid(), AgentId = users[i].Id, СounteragentId = systemUser.Id, OperationDateTime = DateTime.UtcNow.AddDays(-30).AddTicks(i), AgentBalance = 500, TransactionAmount = 500, Description = "Bonus" }; context.PWTransactions.Add(transaction); } } for (int i = 0; i < users.Count; i++) { if (users[i] != systemUser) { DateTime dateOper = DateTime.UtcNow.AddDays(-25).AddTicks(i); PWTransaction transactionOne = new PWTransaction() { Id = Guid.NewGuid(), AgentId = demoUser.Id, СounteragentId = users[i].Id, OperationDateTime = dateOper, AgentBalance = 100000 - i * 50 - 50, TransactionAmount = -50, Description = "" }; context.PWTransactions.Add(transactionOne); PWTransaction transactionTwo = new PWTransaction() { Id = Guid.NewGuid(), AgentId = users[i].Id, СounteragentId = demoUser.Id, OperationDateTime = dateOper, AgentBalance = 550, TransactionAmount = 50, Description = "" }; context.PWTransactions.Add(transactionTwo); PWOperationPair operationPair = new PWOperationPair() { TransactionOneId = transactionOne.Id, TransactionTwoId = transactionTwo.Id }; context.PWOperationPairs.Add(operationPair); } } }
public async Task <ActionResult <TransactionViewModel> > Transfer(TransactionModel model) { string agentId = _identityService.GetUserIdentity(); if (model.TransactionAmount < 0 || String.IsNullOrWhiteSpace(model.CounteragentId) || Guid.TryParse(model.CounteragentId, out var s) == false || agentId == model.CounteragentId) { return(BadRequest()); } var agentOneLastTr = await _unitOfWork.TransactionRepository.GetLastTransaction(agentId); var agentTwoLastTr = await _unitOfWork.TransactionRepository.GetLastTransaction(model.CounteragentId); var operationTime = DateTime.UtcNow; model.TransactionAmount = Decimal.Round(model.TransactionAmount, 2); if (agentOneLastTr.AgentBalance < model.TransactionAmount) { ModelState.AddModelError("transactionAmount", "Agent balance less than transaction amount"); return(BadRequest(ModelState)); } PWTransaction transactionOne = new PWTransaction() { Id = Guid.NewGuid(), AgentId = agentId, СounteragentId = model.CounteragentId, TransactionAmount = -model.TransactionAmount, Description = model.Description ?? "", OperationDateTime = operationTime <= agentOneLastTr.OperationDateTime ? agentOneLastTr.OperationDateTime.AddTicks(1) : operationTime, AgentBalance = agentOneLastTr.AgentBalance - model.TransactionAmount }; PWTransaction transactionTwo = new PWTransaction() { Id = Guid.NewGuid(), AgentId = model.CounteragentId, СounteragentId = agentId, TransactionAmount = model.TransactionAmount, Description = model.Description ?? "", OperationDateTime = operationTime <= agentTwoLastTr.OperationDateTime ? agentTwoLastTr.OperationDateTime.AddTicks(1) : operationTime, AgentBalance = agentTwoLastTr.AgentBalance + model.TransactionAmount }; PWOperationPair operationPair = new PWOperationPair() { TransactionOneId = transactionOne.Id, TransactionTwoId = transactionTwo.Id }; _unitOfWork.TransactionRepository.Create(transactionOne); _unitOfWork.TransactionRepository.Create(transactionTwo); _unitOfWork.OperationPairsRepository.Create(operationPair); try { await _unitOfWork.SaveChangesAsync(); transactionOne = await _unitOfWork.TransactionRepository.GetTransactionWithInclude(agentId, transactionOne.Id); } catch (DbException exc) { _logger.LogWarning($"PostTransaction agentId: {agentId}; counteragentId: {model.CounteragentId}; transactionAmount: {model.TransactionAmount}; Error: {exc.ToString()}."); throw; } return(CreatedAtAction("GetTransaction", new { id = transactionOne.Id }, new TransactionViewModel(transactionOne))); }