Merge pull request 'Added the API to get Pre-Signed Url by attachment ID' (#124) from Ashutosh_Task#1027 into Document_Manager

Reviewed-on: #124
This commit is contained in:
ashutosh.nehete 2025-08-29 10:42:43 +00:00
commit 03959f9b38

View File

@ -327,7 +327,7 @@ namespace Marco.Pms.Services.Controllers
}
[HttpGet("list/versions/{parentAttachmentId}")]
public async Task<IActionResult> GetAllVersionsAsync(Guid parentAttachmentId)
public async Task<IActionResult> GetListAllVersionsAsync(Guid parentAttachmentId)
{
_logger.LogInfo("Start fetching document versions for ParentAttachmentId: {ParentAttachmentId}", parentAttachmentId);
@ -379,6 +379,41 @@ namespace Marco.Pms.Services.Controllers
}
}
[HttpGet("get/version/{id}")]
public async Task<IActionResult> GetAllVersionsAsync(Guid id)
{
// API endpoint to get all versions of an attachment by its ID
_logger.LogInfo($"Fetching versions for attachment with ID: {id}");
await using var _context = await _dbContextFactory.CreateDbContextAsync();
// Create a new DbContext from the factory asynchronously
using var scope = _serviceScope.CreateScope();
// Create a new service scope for scoped services
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
// Get the currently logged in employee asynchronously
var versionMapping = await _context.AttachmentVersionMappings
// Retrieve version mapping including the child attachment and its document
.Include(av => av.ChildAttachment)
.ThenInclude(da => da!.Document)
.FirstOrDefaultAsync(av => av.ChildAttachmentId == id);
if (versionMapping == null || versionMapping.ChildAttachment == null || versionMapping.ChildAttachment.Document == null)
// Return 404 if no version mapping or related entities found
{
_logger.LogWarning($"Version mapping not found for attachment ID: {id}");
return NotFound(ApiResponse<object>.ErrorResponse("Version not found", "Version not found in database", 404));
}
var s3Service = scope.ServiceProvider.GetRequiredService<S3UploadService>();
// Resolve S3UploadService from the scope to generate pre-signed URL
var preSignedUrl = s3Service.GeneratePreSignedUrl(versionMapping.ChildAttachment.Document.S3Key);
// Generate pre-signed URL for the document stored in S3
_logger.LogInfo($"Generated pre-signed URL for attachment ID: {id}");
return Ok(ApiResponse<object>.SuccessResponse(preSignedUrl, "Pre-Signed Url for old version fetched successfully", 200));
// Return the pre-signed URL with a success response
}
/// <summary>