forked from MDCPS/DamageAssessment_Backend
		
	changed download url format and added new endpoint for doculink isactive update
This commit is contained in:
		| @ -15,11 +15,11 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         private readonly IDoculinkProvider documentsProvider; | ||||
|         private readonly IUploadService uploadService; | ||||
|  | ||||
|         public DoculinkController(IDoculinkProvider documentsProvider,IUploadService uploadService) | ||||
|         public DoculinkController(IDoculinkProvider documentsProvider, IUploadService uploadService) | ||||
|         { | ||||
|  | ||||
|             this.documentsProvider = documentsProvider; | ||||
|             this.uploadService = uploadService;  | ||||
|             this.uploadService = uploadService; | ||||
|  | ||||
|         } | ||||
|         /// <summary> | ||||
| @ -41,11 +41,11 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         /// <summary> | ||||
|         /// Get a Doculink type by id. | ||||
|         /// </summary> | ||||
|         [HttpGet] | ||||
|         [Authorize(Roles = "admin")] | ||||
|         [Route("doculinks/types/{id}")] | ||||
|         [Route("doculinks/types/{id}/{language:alpha}")] | ||||
|         [HttpGet] | ||||
|         public async Task<IActionResult> GetLinkTypeAsync(int id,string? language) | ||||
|         public async Task<IActionResult> GetLinkTypeAsync(int id, string? language) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetLinkTypeAsync(id, language); | ||||
|             if (result.IsSuccess) | ||||
| @ -60,11 +60,11 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         [Authorize(Roles = "admin")] | ||||
|         [HttpPut] | ||||
|         [Route("doculinks/types/{id}")] | ||||
|         public async Task<IActionResult> UpdateLinkType(int id,Models.LinkType linkType) | ||||
|         public async Task<IActionResult> UpdateLinkType(int id, Models.LinkType linkType) | ||||
|         { | ||||
|             if (linkType != null) | ||||
|             { | ||||
|                 var result = await this.documentsProvider.UpdateLinkTypeAsync(id,linkType); | ||||
|                 var result = await this.documentsProvider.UpdateLinkTypeAsync(id, linkType); | ||||
|                 if (result.IsSuccess) | ||||
|                 { | ||||
|                     return Ok(result.LinkType); | ||||
| @ -115,24 +115,75 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         /// </summary> | ||||
|         [Authorize(Roles = "admin")] | ||||
|         [HttpGet("doculinks/download/{id}")] | ||||
|         public async Task<IActionResult> downloadfile1(int id) | ||||
|         public async Task<IActionResult> downloadfile(int id) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 var result = await this.documentsProvider.GetDownloadAttachmentAsync(id); | ||||
|                 if (!result.IsSuccess) | ||||
|                     return NotFound(); | ||||
|                 byte[] fileContent = await uploadService.DownloadFile(result.DoculinkAttachments.Path); | ||||
|                 if (fileContent == null || fileContent.Length == 0) | ||||
|                 string path = await uploadService.GetFile(result.DoculinkAttachments.Path); | ||||
|                 if (path == null) | ||||
|                     return NotFound(); | ||||
|                 var contentType = "application/octet-stream"; | ||||
|                 return File(fileContent, contentType, result.DoculinkAttachments.docName); | ||||
|                 var contentType = GetContentType(result.DoculinkAttachments.docName); | ||||
|                 if (contentType == "application/octet-stream") | ||||
|                     return PhysicalFile(path, contentType, result.DoculinkAttachments.docName); | ||||
|                 return PhysicalFile(path, contentType, enableRangeProcessing: true); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 // Handle the exception here or log it | ||||
|                 return StatusCode(500, "An error occurred: " + ex.Message); | ||||
|             } | ||||
|             //try | ||||
|             //{ | ||||
|             //    var result = await this.documentsProvider.GetDownloadAttachmentAsync(id); | ||||
|             //    if (!result.IsSuccess) | ||||
|             //        return NotFound(); | ||||
|             //    byte[] fileContent = await uploadService.DownloadFile(result.DoculinkAttachments.Path); | ||||
|             //    if (fileContent == null || fileContent.Length == 0) | ||||
|             //        return NotFound(); | ||||
|             //    var contentType = "application/octet-stream"; | ||||
|             //    return File(fileContent, contentType, result.DoculinkAttachments.docName); | ||||
|             //} | ||||
|             //catch (Exception ex) | ||||
|             //{ | ||||
|             //    // Handle the exception here or log it | ||||
|             //    return StatusCode(500, "An error occurred: " + ex.Message); | ||||
|             //} | ||||
|         } | ||||
|         private string GetContentType(string fileName) | ||||
|         { | ||||
|             // You can add more content types based on the file extensions | ||||
|             switch (Path.GetExtension(fileName).ToLower()) | ||||
|             { | ||||
|                 //case ".txt": | ||||
|                 //    return "text/plain"; | ||||
|                 case ".jpg": | ||||
|                 case ".jpeg": | ||||
|                     return "image/jpeg"; | ||||
|                 case ".png": | ||||
|                     return "image/png"; | ||||
|                 case ".gif": | ||||
|                     return "image/gif"; | ||||
|                 case ".bmp": | ||||
|                     return "image/bmp"; | ||||
|                 case ".webp": | ||||
|                     return "image/webp"; | ||||
|                 case ".csv": | ||||
|                     return "text/csv"; | ||||
|                 case ".pdf": | ||||
|                     return "application/pdf"; | ||||
|                 case ".docx": | ||||
|                 case ".doc": | ||||
|                     return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; | ||||
|                 case ".xlsx": | ||||
|                 case ".xls": | ||||
|                     return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; | ||||
|                 // Add more cases as needed | ||||
|                 default: | ||||
|                     return "application/octet-stream"; | ||||
|             } | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Get all Doculink. | ||||
| @ -143,7 +194,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         [Route("doculinks/{linktype:alpha}")] | ||||
|         [Route("doculinks/{linktype:alpha}/{language:alpha}")] | ||||
|         [HttpGet] | ||||
|         public async Task<IActionResult> GetDocumentsAsync(string? linktype, string? language,bool? isactive) | ||||
|         public async Task<IActionResult> GetDocumentsAsync(string? linktype, string? language, bool? isactive) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language, isactive); | ||||
|             if (result.IsSuccess) | ||||
| @ -162,7 +213,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         [HttpGet] | ||||
|         public async Task<IActionResult> GetDocumentsByActiveAsync(string? linktype, string? language) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language,true); | ||||
|             var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language, true); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.documents); | ||||
| @ -193,7 +244,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         [Route("doculinks/{id}")] | ||||
|         [Route("doculinks/{id}/{linktype:alpha}")] | ||||
|         [Route("doculinks/{id}/{linktype:alpha}/{language:alpha}")] | ||||
|         public async Task<IActionResult> GetDocumentAsync(int id,string? linktype, string? language) | ||||
|         public async Task<IActionResult> GetDocumentAsync(int id, string? linktype, string? language) | ||||
|         { | ||||
|             var result = await this.documentsProvider.GetDocumentAsync(id, linktype, language); | ||||
|             if (result.IsSuccess) | ||||
| @ -208,7 +259,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|         [Authorize(Roles = "admin")] | ||||
|         [HttpPut] | ||||
|         [Route("doculinks/{id}")] | ||||
|         public async Task<IActionResult> UpdateDocument(int id,ReqDoculink documentInfo) | ||||
|         public async Task<IActionResult> UpdateDocument(int id, ReqDoculink documentInfo) | ||||
|         { | ||||
|             if (documentInfo != null) | ||||
|             { | ||||
| @ -216,7 +267,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|                 if (dbdoc.IsSuccess) | ||||
|                 { | ||||
|                     var documents = await this.documentsProvider.GetDocumentCounter(); | ||||
|                     Models.Doculink DocuLink= uploadService.UpdateDocuments(documents.counter,dbdoc.Document, documentInfo); | ||||
|                     Models.Doculink DocuLink = uploadService.UpdateDocuments(documents.counter, dbdoc.Document, documentInfo); | ||||
|                     var result = await this.documentsProvider.UpdateDocumentAsync(id, DocuLink); | ||||
|                     if (result.IsSuccess) | ||||
|                     { | ||||
| @ -229,6 +280,20 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|             return BadRequest(documentInfo); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// update existing doclink isactive field. | ||||
|         /// </summary> | ||||
|         [HttpPut] | ||||
|         [Route("doculinks/{id}/{isactive}")] | ||||
|         public async Task<IActionResult> UpdateIsActiveDocument(int id, bool isactive) | ||||
|         { | ||||
|             var result = await this.documentsProvider.UpdateDocumentAsync(id, isactive); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.Document); | ||||
|             } | ||||
|             return NotFound(); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Create new doclink. | ||||
|         /// </summary> | ||||
|         [Authorize(Roles = "admin")] | ||||
| @ -241,7 +306,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|                 if (documentInfo != null) | ||||
|                 { | ||||
|                     var documents = await this.documentsProvider.GetDocumentCounter(); | ||||
|                     Models.Doculink DocuLink= uploadService.UploadDocument(documents.counter, documentInfo); | ||||
|                     Models.Doculink DocuLink = uploadService.UploadDocument(documents.counter, documentInfo); | ||||
|                     var result = await this.documentsProvider.PostDocumentAsync(DocuLink); | ||||
|                     if (result.IsSuccess) | ||||
|                     { | ||||
| @ -277,6 +342,6 @@ namespace DamageAssesment.Api.DocuLinks.Controllers | ||||
|             } | ||||
|             return NotFound(); | ||||
|         } | ||||
|          | ||||
|  | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -11,6 +11,7 @@ namespace DamageAssesment.Api.DocuLinks.Interfaces | ||||
|         Task<(bool IsSuccess, IEnumerable<Models.ResDoculink> documents, string ErrorMessage)> GetdocumentsByLinkTypeIdAsync(int? linkTypeId, string? language, bool? isactive); | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> PostDocumentAsync(Models.Doculink Document); | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id, Models.Doculink Document); | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id, bool isactive); | ||||
|         Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id); | ||||
|         Task<(bool IsSuccess, Models.DoculinkAttachments DoculinkAttachments, string Path)> GetDownloadAttachmentAsync(int id); | ||||
|         Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter(); | ||||
|  | ||||
| @ -8,6 +8,7 @@ namespace DamageAssesment.Api.DocuLinks.Interfaces | ||||
|         public Models.Doculink UpdateDocuments(int counter, Models.Doculink document, ReqDoculink documentInfo); | ||||
|         void Deletefile(string path); | ||||
|         Task<byte[]> DownloadFile(string path); | ||||
|         Task<string> GetFile(string path); | ||||
|         void Movefile(string path); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -453,6 +453,35 @@ namespace DamageAssesment.Api.DocuLinks.Providers | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id,bool isactive) | ||||
|         { | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 Db.Doculink Document = DocumentDbContext.Documents.AsNoTracking().Where(a => a.Id == id).FirstOrDefault(); | ||||
|                 if (Document == null) | ||||
|                 { | ||||
|                     return (false, null, "Not Found"); | ||||
|                 } | ||||
|                 Document.IsActive = isactive; | ||||
|                 DocumentDbContext.Documents.Update(Document); | ||||
|                 DocumentDbContext.SaveChanges(); | ||||
|                 var result = mapper.Map<Db.Doculink, Models.ResDoculink>(Document); | ||||
|                 var multilan = CreateMultiLanguageObject(GetDocumentTranslations(Document.Id, "")); | ||||
|                 result.titles = multilan.titles; | ||||
|                 result.description = multilan.description; | ||||
|                 result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.linkTypeId, "")); | ||||
|                 result.doclinksAttachments = mapper.Map<List<Db.DoculinkAttachments>, List<Models.DoculinkAttachments>>( | ||||
|                     DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList()); | ||||
|                 return (true, result, $"DocumentId {id} deleted Successfuly"); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|  | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id) | ||||
|         { | ||||
|  | ||||
|  | ||||
| @ -25,6 +25,24 @@ namespace DamageAssesment.Api.DocuLinks.Providers | ||||
|             uploadpath = configuration.GetValue<string>("Fileupload:folderpath"); | ||||
|             Deletepath = configuration.GetValue<string>("Fileupload:Deletepath"); | ||||
|         } | ||||
|         public async Task<string> GetFile(string path) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (System.IO.File.Exists(path)) | ||||
|                 { | ||||
|                     return path; | ||||
|                 } | ||||
|  | ||||
|                 return null; // File not found | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 // Handle or log the exception as needed | ||||
|                 throw; | ||||
|             } | ||||
|  | ||||
|         } | ||||
|         public async Task<byte[]> DownloadFile(string path) | ||||
|         { | ||||
|             try | ||||
|  | ||||
		Reference in New Issue
	
	Block a user