⚠️ This is a backend issue — work is done inside the backend/ folder
Description
backend/src/modules/audit/audit.service.ts only has a log() method — there is no way to query, filter, or export audit logs via the API. Admins and compliance officers have no interface to review who accessed or modified records, which is a compliance gap.
Current State
AuditService.log() — writes audit entries
AuditLog entity has: userId, entityType, entityId, action, ipAddress, userAgent, createdAt
- No
findAll, findByUser, or export methods exist
AuditController exists in backend/src/audit/ but is separate from the module — needs consolidation
What Needs to Be Built
1. Query DTO
export class AuditQueryDto {
@IsOptional() @IsUUID() userId?: string;
@IsOptional() @IsString() entityType?: string;
@IsOptional() @IsEnum(AuditAction) action?: AuditAction;
@IsOptional() @IsDateString() dateFrom?: string;
@IsOptional() @IsDateString() dateTo?: string;
@IsOptional() @IsIn(['ASC','DESC']) order?: string;
@IsOptional() @Min(1) page?: number;
@IsOptional() @Min(1) @Max(100) limit?: number;
}
2. Service Methods
async findAll(query: AuditQueryDto): Promise<PaginatedResult<AuditLog>>
async findByEntity(entityType: string, entityId: string): Promise<AuditLog[]>
async exportCsv(query: AuditQueryDto): Promise<Buffer>
3. Controller Endpoints (Admin only)
GET /audit?userId=&entityType=&action=&dateFrom=&dateTo=&page=&limit=
GET /audit/entity/:entityType/:entityId
GET /audit/export?format=csv (streams CSV download)
4. Access Control
- All audit endpoints require
ADMIN role
- Users can query their own audit trail via
GET /audit/me
Acceptance Criteria
Files to Modify / Create
backend/src/modules/audit/audit.service.ts
backend/src/modules/audit/audit.controller.ts
backend/src/modules/audit/dto/audit-query.dto.ts (new)
backend/src/modules/audit/audit.service.spec.ts (new)
Priority
High — compliance requirement for medical data access tracking
Estimated Effort
2 days
backend/folderDescription
backend/src/modules/audit/audit.service.tsonly has alog()method — there is no way to query, filter, or export audit logs via the API. Admins and compliance officers have no interface to review who accessed or modified records, which is a compliance gap.Current State
AuditService.log()— writes audit entriesAuditLogentity has:userId,entityType,entityId,action,ipAddress,userAgent,createdAtfindAll,findByUser, orexportmethods existAuditControllerexists inbackend/src/audit/but is separate from the module — needs consolidationWhat Needs to Be Built
1. Query DTO
2. Service Methods
3. Controller Endpoints (Admin only)
4. Access Control
ADMINroleGET /audit/meAcceptance Criteria
GET /audit/exportstreams a valid CSV file/audit/meFiles to Modify / Create
backend/src/modules/audit/audit.service.tsbackend/src/modules/audit/audit.controller.tsbackend/src/modules/audit/dto/audit-query.dto.ts(new)backend/src/modules/audit/audit.service.spec.ts(new)Priority
High — compliance requirement for medical data access tracking
Estimated Effort
2 days