コード例 #1
0
        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)}");
        }
コード例 #2
0
 public static Transaction ToPersistence(Domain.Entities.Transaction domain)
 {
     return(MapperInstance.Map <Domain.Entities.Transaction, Transaction>(domain));
 }