public void Post([FromBody] DTO.Transaction transaction) { Console.WriteLine($"DEBUG: Entering {nameof(Post)}"); Console.WriteLine($"DEBUG: Request body contained: {JsonConvert.SerializeObject(transaction, Formatting.Indented)}"); // TODO: updatedBy var updatedBy = "SYSTEM"; using (var db = new TransactionServiceDbContext()) { // TODO: Only change Updated* values if the other values are actually different. Override SaveChanges method? var dbTransaction = db.Transactions.FindAsync(transaction.TransactionId).Result; if (dbTransaction == null && transaction.TransactionId == -1) { Console.WriteLine($"DEBUG: Creating new transaction"); // PK is serial, so should be automatically generated dbTransaction = new Domain.Entities.Transaction { CreatedOn = DateTime.UtcNow, CreatedBy = updatedBy }; db.Add(dbTransaction); } if (dbTransaction != null) { Console.WriteLine("DEBUG: Updating transaction properties"); dbTransaction.Status = transaction.Status; dbTransaction.TransactionType = transaction.TransactionType.ToString(); dbTransaction.UpdatedOn = DateTime.UtcNow; dbTransaction.UpdatedBy = updatedBy; dbTransaction.DeliverAfter = transaction.DeliverAfter?.ToUniversalTime(); dbTransaction.DeliverBefore = transaction.DeliverBefore?.ToUniversalTime(); dbTransaction.Priority = (int)transaction.Priority; dbTransaction.SiteName = transaction.SiteName; dbTransaction.SiteLatitude = transaction.SiteLatitude; dbTransaction.SiteLongitude = transaction.SiteLongitude; // Unsure why LineItems is null instead of empty list if (transaction.LineItems != null) { Console.WriteLine($"DEBUG: Updating {transaction.LineItems.Count} line items"); foreach (var lineItem in transaction.LineItems) { var dbLineItem = db.LineItems.FindAsync(lineItem.LineItemId).Result; if (dbLineItem == null) { // Transaction IDs start empty for new incoming line items dbLineItem = new Domain.Entities.LineItem { LineItemId = lineItem.LineItemId, TransactionId = dbTransaction.TransactionId, CreatedOn = DateTime.UtcNow, CreatedBy = updatedBy }; db.Add(dbLineItem); } dbLineItem.ProductId = lineItem.ProductId; dbLineItem.Quantity = lineItem.Quantity; dbLineItem.Price = lineItem.Price; dbLineItem.UpdatedOn = DateTime.UtcNow; dbLineItem.UpdatedBy = updatedBy; } } Console.WriteLine($"DEBUG: Updating client ID"); dbTransaction.ClientId = transaction.AssociatedClient?.ClientId; Console.WriteLine($"DEBUG: Saving changes"); db.SaveChangesAsync(); } } Console.WriteLine($"DEBUG: Exiting {nameof(Post)}"); }
public static Transaction ToPersistence(Domain.Entities.Transaction domain) { return(MapperInstance.Map <Domain.Entities.Transaction, Transaction>(domain)); }