public async Task <Unit> Handle(UpdateHoldingRequest request, CancellationToken cancellationToken) { var entity = await _context.Holdings.FindAsync(request.Id); var account = await _context.Accounts .AsNoTracking() .FirstAsync(x => x.Id == request.AccountId, cancellationToken: cancellationToken); if (entity == null) { throw new NotFoundException(nameof(Holding), request.Id); } entity.Ticker = request.Ticker; entity.PurchasePrice = request.PurchasePrice; entity.Shares = request.Shares; entity.Account = account ?? throw new NotFoundException(nameof(Account), request.AccountId); entity.SetCurrency(AbstractEnumeration.FromName <Currency>(request.Currency)); if (request.PurchaseDate != null) { entity.Created = (DateTime)request.PurchaseDate; } await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); }
public async Task <Guid> Handle(CreateHoldingRequest request, CancellationToken cancellationToken) { var account = await _context.Accounts .FirstOrDefaultAsync(x => x.Id == request.AccountId, cancellationToken : cancellationToken); if (account == null) { throw new Exception(); } var entity = new Holding(request.Ticker, request.PurchasePrice, request.Shares, account, request.PurchaseDate, AbstractEnumeration.FromName <Currency>(request.Currency)); entity.DomainEvents.Add(new HoldingPurchasedEvent(entity)); _context.Holdings.Add(entity); await _context.SaveChangesAsync(cancellationToken); return(entity.Id); }