Document_Manager #129

Merged
ashutosh.nehete merged 83 commits from Document_Manager into main 2025-09-11 04:12:01 +00:00
Showing only changes of commit 72765fd491 - Show all commits

View File

@ -52,10 +52,6 @@ namespace Marco.Pms.Services.Controllers
tenantId = userHelper.GetTenantId();
}
/// <summary>
/// Fetch documents for a given entity (Project/Employee) with filtering, searching, and pagination.
/// </summary>
[HttpGet("list/{entityTypeId}/entity/{entityId}")]
public async Task<IActionResult> GetDocumentListAsync(Guid entityTypeId, Guid entityId, [FromQuery] string? filter, [FromQuery] string? searchString,
[FromQuery] bool isActive = true, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20)
@ -225,16 +221,108 @@ namespace Marco.Pms.Services.Controllers
}
}
// GET api/<DocumentController>/5
[HttpGet("{id}")]
public async Task Get(int id)
{
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
using var scope = _serviceScope.CreateScope();
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
//string preSignedUrl = _s3Service.GeneratePreSignedUrl(objectKey);
}
[HttpGet("get/filter{entityTypeId}")]
public async Task<IActionResult> GetFilterObjectAsync(Guid entityTypeId)
{
// Log: Starting filter fetch process
_logger.LogInfo("Initiating GetFilterObjectAsync to retrieve document filter data.");
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
using var scope = _serviceScope.CreateScope();
// Get current logged-in employee
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
_logger.LogDebug("Fetched current employee: {EmployeeId}", loggedInEmployee.Id);
// Fetch all relevant document attachments for the tenant with related data
var documentList = await dbContext.DocumentAttachments
.Include(da => da.UploadedBy)
.Include(da => da.DocumentType)
.ThenInclude(dt => dt!.DocumentCategory)
.Where(da => da.DocumentType != null &&
da.DocumentType.DocumentCategory != null &&
da.DocumentType.DocumentCategory.EntityTypeId == entityTypeId &&
da.TenantId == tenantId)
.ToListAsync();
_logger.LogInfo("Fetched {Count} document attachments for tenant {TenantId}", documentList.Count, tenantId);
// Select IDs for attachments present in documentList
var documentIds = documentList.Select(da => da.Id).ToList();
// Preload tags for given ids
var documentTags = await dbContext.AttachmentTagMappings
.Where(at => documentIds.Contains(at.AttachmentId) && at.DocumentTag != null)
.Select(at => new
{
Id = at.DocumentTag!.Id,
Name = at.DocumentTag.Name
})
.Distinct()
.ToListAsync();
_logger.LogInfo("Loaded {Count} document tags", documentTags.Count);
// Gather unique UploadedBy users
var uploadedBy = documentList
.Where(da => da.UploadedBy != null)
.Select(da => new
{
Id = da.UploadedBy!.Id,
Name = $"{da.UploadedBy.FirstName} {da.UploadedBy.LastName}"
})
.Distinct()
.ToList();
_logger.LogInfo("Collected {Count} unique uploaders", uploadedBy.Count);
// Gather unique DocumentCategories
var documentCategories = documentList
.Where(da => da.DocumentType?.DocumentCategory != null)
.Select(da => new
{
Id = da.DocumentType!.DocumentCategory!.Id,
Name = da.DocumentType.DocumentCategory.Name
})
.Distinct()
.ToList();
_logger.LogInfo("Collected {Count} unique document categories", documentCategories.Count);
// Gather unique DocumentTypes
var documentTypes = documentList
.Where(da => da.DocumentType != null)
.Select(da => new
{
Id = da.DocumentType!.Id,
Name = da.DocumentType.Name
})
.Distinct()
.ToList();
_logger.LogInfo("Collected {Count} unique document types", documentTypes.Count);
// Compose response
var response = new
{
UploadedBy = uploadedBy,
DocumentCategory = documentCategories,
DocumentType = documentTypes,
DocumentTag = documentTags
};
_logger.LogInfo("Returning filter response successfully.");
return Ok(ApiResponse<object>.SuccessResponse(response, "Filters for documents fetched successfully", 200));
}
/// <summary>
/// Uploads a document attachment for an Employee or Project.
/// Validates permissions, document type, entity existence, tags, and uploads to S3.
@ -739,7 +827,7 @@ namespace Marco.Pms.Services.Controllers
response.Version = newVersionMapping.Version;
_logger.LogInfo("API completed successfully for AttachmentId: {AttachmentId}", newAttachment.Id);
return Ok(ApiResponse<object>.SuccessResponse(response, "Document added successfully", 200));
return Ok(ApiResponse<object>.SuccessResponse(response, "Document Updated successfully", 200));
}
catch (Exception ex)
{