public async Task <AN.Core.Domain.Attachment> UploadInsuranceServiceAttachmentAsync(int insuranceServiceId, IFormFile photo) { var insuranceService = await _dbContext.InsuranceServices.FindAsync(insuranceServiceId); if (insuranceService == null) { throw new AwroNoreException("Shift Center Not Found"); } AN.Core.Domain.Attachment attachment = null; var strategy = _dbContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { using (var transaction = _dbContext.Database.BeginTransaction()) { var originFileName = photo.FileName; var ext = Path.GetExtension(originFileName); var time = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss-fffff"); var newFileName = $"attach_{time}{ext}"; var thumbFileName = $"attach_{time}.thumb{ext}"; var physicalDirPath = $"uploaded\\attachments\\insuranceservices\\{insuranceServiceId}"; var baseUrl = $"/{physicalDirPath.Replace("\\", "/")}"; attachment = new AN.Core.Domain.Attachment { Owner = AN.Core.Enums.FileOwner.INSURANCE_DOCUMENT, OwnerTableId = insuranceServiceId, CreatedAt = DateTime.Now, FileType = AN.Core.Enums.FileType.Image, IsDeleted = false, Url = $"{baseUrl}/{newFileName}", ThumbnailUrl = $"{baseUrl}/{thumbFileName}", DeleteUrl = $"{baseUrl}/{newFileName}", Name = newFileName, Size = photo.Length, Description = "Gallery Image", Order = 0 }; await _dbContext.Attachments.AddAsync(attachment); if (!insuranceService.HasAttachments) { insuranceService.HasAttachments = true; _dbContext.InsuranceServices.Attach(insuranceService); _dbContext.Entry(insuranceService).State = EntityState.Modified; } await _dbContext.SaveChangesAsync(); var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", physicalDirPath); if (!Directory.Exists(fullDirectoryPath)) { Directory.CreateDirectory(fullDirectoryPath); } var path = Path.Combine(fullDirectoryPath, newFileName); using (var stream = new FileStream(path, FileMode.Create)) { await photo.CopyToAsync(stream); } var thumbPath = Path.Combine(fullDirectoryPath, thumbFileName); using (var image = Image.FromFile(path)) { Image thumb = image.GetThumbnailImage(120, 120, () => false, IntPtr.Zero); thumb.Save(thumbPath); } transaction.Commit(); } }); return(attachment); }
public async Task <AN.Core.Domain.Attachment> UploadPatientAttachmentAsync(int patientId, IFormFile file) { var patient = await _dbContext.Patients.FindAsync(patientId); if (patient == null) { throw new AwroNoreException("Patient Not Found"); } AN.Core.Domain.Attachment attachment = null; var strategy = _dbContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { using (var transaction = _dbContext.Database.BeginTransaction()) { var(newName, thumbName, dirPath, baseUrl) = GeneratePatientAttachFileName(patientId, file); attachment = new AN.Core.Domain.Attachment { Owner = AN.Core.Enums.FileOwner.PATIENT, OwnerTableId = patientId, CreatedAt = DateTime.Now, FileType = AN.Core.Enums.FileType.Image, IsDeleted = false, Url = $"{baseUrl}/{newName}", ThumbnailUrl = $"{baseUrl}/{thumbName}", DeleteUrl = $"{baseUrl}/{newName}", Name = newName, Size = file.Length, Description = "Patient Attachment", Order = 0 }; await _dbContext.Attachments.AddAsync(attachment); await _dbContext.SaveChangesAsync(); var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", dirPath); if (!Directory.Exists(fullDirectoryPath)) { Directory.CreateDirectory(fullDirectoryPath); } var path = Path.Combine(fullDirectoryPath, newName); using (var stream = new FileStream(path, FileMode.Create)) { await file.CopyToAsync(stream); } var thumbPath = Path.Combine(fullDirectoryPath, thumbName); using (var image = Image.FromFile(path)) { Image thumb = image.GetThumbnailImage(120, 120, () => false, IntPtr.Zero); thumb.Save(thumbPath); } transaction.Commit(); } }); return(attachment); }