Changes between Version 1 and Version 2 of AdvancedApplicationDevelopment


Ignore:
Timestamp:
02/24/26 06:01:54 (4 hours ago)
Author:
221181
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedApplicationDevelopment

    v1 v2  
    3535'''Connection Idle Lifetime=300'''
    3636Го одредува времето (во секунди) колку една неактивна конекција останува во pool пред автоматски да биде затворена и отстранета ако не се користи.
     37
     38== Трансакции ==
     39
     40=== 1. Креирање на продажба (!SaleService.cs) ===
     41
     42Зошто Transaction?
     43
     44Кога се креира продажен запис, количината мора да се намали од залихата. Ако настане грешка при намалувањето на залихата, тогаш и продажниот запис не треба да се зачува, за да се обезбеди податоците да останат конзистентни.
     45
     46{{{
     47public async Task<bool> CreateSaleAsync(Sale sale)
     48{
     49    using var transaction = await _context.Database.BeginTransactionAsync();
     50    try
     51    {
     52        _context.Sales.Add(sale);
     53        await _context.SaveChangesAsync();
     54
     55        foreach (var item in sale.SaleItems)
     56        {
     57            var stock = await _context.WarehouseStocks
     58                .FirstOrDefaultAsync(ws => ws.WarehouseId == sale.WarehouseId
     59                                           && ws.ProductId == item.ProductId);
     60
     61            if (stock == null || stock.QuantityOnHand < item.Quantity)
     62            {
     63                throw new Exception("Insufficient Stock");
     64            }
     65
     66            stock.QuantityOnHand -= item.Quantity;
     67            stock.LastUpdated = DateTime.Now;
     68        }
     69
     70        await _context.SaveChangesAsync();
     71        await transaction.CommitAsync();
     72
     73        return true;
     74    }
     75    catch
     76    {
     77        await transaction.RollbackAsync();
     78        return false;
     79    }
     80}
     81}}}