public static ExpenseBillFileModel ToModel(this ExpenseBillFile entity) =>
 new ExpenseBillFileModel
 {
     Id          = entity.Id,
     AggregateId = entity.AggregateId,
     FileName    = entity.FileName,
     FileUri     = entity.FileUri,
 };
Esempio n. 2
0
        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());
        }