public async Task <ResultOrError <ExpenseBillFileModel> > Handle(AddBillFileParameters parameters) { if (parameters.File == null || parameters.File.Length == 0) { return(BillFileIsEmpty); } if (parameters.File.Length > MaximumBillFileSizeInMB * 1000000) { return(BillFileIsTooBig); } var aggregate = await _context.ExpensesAggregates .Include(x => x.ExpenseBillFiles) .SingleOrDefaultAsync(x => x.Id == parameters.AggregateId && x.UserId == parameters.UserId); if (aggregate == null) { return(CommonErrors.ExpenseAggregateNotFound); } var fileName = $"{aggregate.ExpenseBillFiles.Count()}-{parameters.FileName}"; var fileUri = await _billFileStorage.Upload( new UploadBillBlob( file : parameters.File, userId : parameters.UserId, aggregateId : parameters.AggregateId, fileName : fileName)); var entity = ExpenseBillFile.Create(parameters.AggregateId, fileName, fileUri); await _context.ExpenseBills.AddAsync(entity); await _context.SaveChangesAsync(); return(entity.ToModel()); }