示例#1
0
        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);
        }
示例#2
0
        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);
        }