Added the total page and count in list APis for documnets

This commit is contained in:
ashutosh.nehete 2025-09-02 15:29:48 +05:30
parent 067da422c2
commit 830a9526dd
4 changed files with 101 additions and 5 deletions

View File

@ -0,0 +1,11 @@
using Marco.Pms.Model.Dtos.Roles;
namespace Marco.Pms.Model.Dtos.Util
{
public class ProjctLevelPermissionDto
{
public Guid EmployeeId { get; set; }
public Guid ProjectId { get; set; }
public FeaturesPermissionDto? Permission { get; set; }
}
}

View File

@ -0,0 +1,28 @@
using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Utilities;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using System.ComponentModel.DataAnnotations.Schema;
namespace Marco.Pms.Model.Entitlements
{
public class ProjectLevelPermissionMapping : TenantRelation
{
public Guid Id { get; set; }
public Guid EmployeeId { get; set; }
[ValidateNever]
[ForeignKey("EmployeeId")]
public Employee? Employee { get; set; }
public Guid ProjectId { get; set; }
[ValidateNever]
[ForeignKey("ProjectId")]
public Project? Project { get; set; }
public Guid PermissionId { get; set; }
[ValidateNever]
[ForeignKey("PermissionId")]
public FeaturePermission? Permission { get; set; }
}
}

View File

@ -186,6 +186,9 @@ namespace Marco.Pms.Services.Controllers
); );
} }
var totalCount = await documentQuery.CountAsync();
var totalPages = totalCount / pageSize;
// Apply pagination & ordering // Apply pagination & ordering
var documents = await documentQuery var documents = await documentQuery
.OrderByDescending(t => t.UploadedAt) .OrderByDescending(t => t.UploadedAt)
@ -202,7 +205,7 @@ namespace Marco.Pms.Services.Controllers
.ToListAsync(); .ToListAsync();
// Map to ViewModel // Map to ViewModel
var response = documents.Select(doc => var documentListVMs = documents.Select(doc =>
{ {
var version = versions.FirstOrDefault(v => v.ChildAttachmentId == doc.Id); var version = versions.FirstOrDefault(v => v.ChildAttachmentId == doc.Id);
var vm = _mapper.Map<DocumentListVM>(doc); var vm = _mapper.Map<DocumentListVM>(doc);
@ -211,7 +214,16 @@ namespace Marco.Pms.Services.Controllers
return vm; return vm;
}).ToList(); }).ToList();
_logger.LogInfo("Fetched {Count} documents for EntityId {EntityId}", response.Count, entityId); _logger.LogInfo("Fetched {Count} documents for EntityId {EntityId}", documentListVMs.Count, entityId);
var response = new
{
CurrentFilter = documentFilter,
CurrentPage = pageNumber,
TotalPages = totalPages,
TotalEntites = totalCount,
Data = documentListVMs,
};
return Ok(ApiResponse<object>.SuccessResponse(response, "Document list fetched successfully", 200)); return Ok(ApiResponse<object>.SuccessResponse(response, "Document list fetched successfully", 200));
} }
@ -404,12 +416,17 @@ namespace Marco.Pms.Services.Controllers
} }
// Retrieve all version mappings linked to the parent attachment and tenant // Retrieve all version mappings linked to the parent attachment and tenant
var versionMappings = await _context.AttachmentVersionMappings var versionMappingsQuery = _context.AttachmentVersionMappings
.Include(av => av.ChildAttachment) .Include(av => av.ChildAttachment)
.ThenInclude(da => da!.UploadedBy) .ThenInclude(da => da!.UploadedBy)
.Include(av => av.ChildAttachment) .Include(av => av.ChildAttachment)
.ThenInclude(da => da!.UpdatedBy) .ThenInclude(da => da!.UpdatedBy)
.Where(av => av.ParentAttachmentId == parentAttachmentId && av.TenantId == tenantId) .Where(av => av.ParentAttachmentId == parentAttachmentId && av.TenantId == tenantId);
var totalPages = await versionMappingsQuery.CountAsync();
var totalCount = totalPages / pageSize;
var versionMappings = await versionMappingsQuery
.OrderByDescending(da => da.ChildAttachment!.UploadedAt) .OrderByDescending(da => da.ChildAttachment!.UploadedAt)
.Skip((pageNumber - 1) * pageSize) .Skip((pageNumber - 1) * pageSize)
.Take(pageSize) .Take(pageSize)
@ -428,13 +445,21 @@ namespace Marco.Pms.Services.Controllers
_logger.LogInfo("Found {Count} versions for ParentAttachmentId: {ParentAttachmentId}", versionMappings.Count, parentAttachmentId); _logger.LogInfo("Found {Count} versions for ParentAttachmentId: {ParentAttachmentId}", versionMappings.Count, parentAttachmentId);
// Map the retrieved child attachments to view models with version info // Map the retrieved child attachments to view models with version info
var response = versionMappings.Select(versionMapping => var attachmentVersionVMs = versionMappings.Select(versionMapping =>
{ {
var documentVM = _mapper.Map<AttachmentVersionVM>(versionMapping.ChildAttachment); var documentVM = _mapper.Map<AttachmentVersionVM>(versionMapping.ChildAttachment);
documentVM.Version = versionMapping.Version; documentVM.Version = versionMapping.Version;
return documentVM; return documentVM;
}).ToList(); }).ToList();
var response = new
{
CurrentPage = pageNumber,
TotalPages = totalPages,
TotalEntites = totalCount,
Data = attachmentVersionVMs,
};
_logger.LogInfo("Successfully mapped version data for ParentAttachmentId: {ParentAttachmentId}", parentAttachmentId); _logger.LogInfo("Successfully mapped version data for ParentAttachmentId: {ParentAttachmentId}", parentAttachmentId);
return Ok(ApiResponse<object>.SuccessResponse(response, "Document versions fetched successfully", 200)); return Ok(ApiResponse<object>.SuccessResponse(response, "Document versions fetched successfully", 200));

View File

@ -3,6 +3,7 @@ using AutoMapper.QueryableExtensions;
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Activities; using Marco.Pms.Model.Activities;
using Marco.Pms.Model.Dtos.Project; using Marco.Pms.Model.Dtos.Project;
using Marco.Pms.Model.Dtos.Util;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.MongoDBModels.Project; using Marco.Pms.Model.MongoDBModels.Project;
@ -46,6 +47,7 @@ namespace Marco.Pms.Services.Service
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper)); _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
_generalHelper = generalHelper ?? throw new ArgumentNullException(nameof(generalHelper)); _generalHelper = generalHelper ?? throw new ArgumentNullException(nameof(generalHelper));
} }
#region =================================================================== Project Get APIs =================================================================== #region =================================================================== Project Get APIs ===================================================================
public async Task<ApiResponse<object>> GetAllProjectsBasicAsync(Guid tenantId, Employee loggedInEmployee) public async Task<ApiResponse<object>> GetAllProjectsBasicAsync(Guid tenantId, Employee loggedInEmployee)
@ -1462,6 +1464,36 @@ namespace Marco.Pms.Services.Service
Response = ApiResponse<object>.SuccessResponse(new { id = task.Id }, "Task deleted successfully.", 200) Response = ApiResponse<object>.SuccessResponse(new { id = task.Id }, "Task deleted successfully.", 200)
}; };
} }
#endregion
#region =================================================================== Project-Level Permission APIs ===================================================================
public async Task<ApiResponse<object>> ManageProjectLevelPermissionAsync(ProjctLevelPermissionDto model, Guid tenantId, Employee loggedInEmployee)
{
var employeeTask = Task.Run(async () =>
{
await using var context = await _dbContextFactory.CreateDbContextAsync();
return await context.ProjectAllocations.FirstOrDefaultAsync(e => e.Id == model.EmployeeId && e.TenantId == tenantId && e.IsActive);
});
var projectTask = Task.Run(async () =>
{
await using var context = await _dbContextFactory.CreateDbContextAsync();
return await context.Projects.FirstOrDefaultAsync(p => p.Id == model.ProjectId && p.TenantId == tenantId);
});
var featurePermissionsTask = Task.Run(async () =>
{
await using var context = await _dbContextFactory.CreateDbContextAsync();
});
return ApiResponse<object>.SuccessResponse("");
}
public async Task<ApiResponse<object>> GetAssignedProjectLevelPermissionAsync(Guid employeeId, Guid projectId, Guid tenantId, Employee loggedInEmployee)
{
return ApiResponse<object>.SuccessResponse("");
}
public async Task<ApiResponse<object>> AssignProjectLevelModulesAsync(Guid tenantId, Employee loggedInEmployee)
{
return ApiResponse<object>.SuccessResponse("");
}
#endregion #endregion
#region =================================================================== Helper Functions =================================================================== #region =================================================================== Helper Functions ===================================================================