Document_Manager #129
@ -52,10 +52,6 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
tenantId = userHelper.GetTenantId();
|
tenantId = userHelper.GetTenantId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Fetch documents for a given entity (Project/Employee) with filtering, searching, and pagination.
|
|
||||||
/// </summary>
|
|
||||||
[HttpGet("list/{entityTypeId}/entity/{entityId}")]
|
[HttpGet("list/{entityTypeId}/entity/{entityId}")]
|
||||||
public async Task<IActionResult> GetDocumentListAsync(Guid entityTypeId, Guid entityId, [FromQuery] string? filter, [FromQuery] string? searchString,
|
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)
|
[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
|
// GET api/<DocumentController>/5
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public async Task Get(int id)
|
public async Task Get(int id)
|
||||||
{
|
{
|
||||||
|
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
using var scope = _serviceScope.CreateScope();
|
||||||
|
|
||||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
|
||||||
//string preSignedUrl = _s3Service.GeneratePreSignedUrl(objectKey);
|
//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>
|
/// <summary>
|
||||||
/// Uploads a document attachment for an Employee or Project.
|
/// Uploads a document attachment for an Employee or Project.
|
||||||
/// Validates permissions, document type, entity existence, tags, and uploads to S3.
|
/// Validates permissions, document type, entity existence, tags, and uploads to S3.
|
||||||
@ -739,7 +827,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
response.Version = newVersionMapping.Version;
|
response.Version = newVersionMapping.Version;
|
||||||
_logger.LogInfo("API completed successfully for AttachmentId: {AttachmentId}", newAttachment.Id);
|
_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)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user