mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
- Implemented read-only locking for customer-requested container sizes and billing currency in the GlCreateBookingForm component. - Added functionality to lock partner quantities based on shipment requests in the ConsolidationPartnerPanel. - Introduced a new Leave action in the LogPassYardWorkModal to unassign bookings from trains. - Enhanced the AuditLogsPage to support filtering by action and added a Go button for direct navigation to entity detail pages. - Updated WagonCancellationsPage to handle odd-20ft credits requiring partner selection during rebooking. - Improved TrainScheduleV2DetailPage to allow manual loading of cargo and display warnings for unassigned bookings. - Added a new reference field to the audit logs for better searchability and tracking of actions. - Created a migration to add the reference column to the audit logs table and established an index for efficient querying. - Defined a registry for audit reference sources to streamline the retrieval of human identifiers for various entities.
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import { Controller, Get, Query } from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
import { PaginatedResponse } from '@edr/types';
|
|
|
|
import { BookingStaff } from '../../common/booking-guards';
|
|
import { FREIGHT_PERMS } from '../../seed/freight-permissions.registry';
|
|
import { AuditService } from './audit.service';
|
|
import { AuditLog } from './entities/audit-log.entity';
|
|
import { AuditLogQueryDto } from './dto/audit-log-query.dto';
|
|
|
|
/**
|
|
* Read-only view over the audit trail.
|
|
*
|
|
* Gated on `edr_freight_app:audit_log:view` — a dedicated view key rather than
|
|
* the broad `admin` key, so reading the trail can be granted without also
|
|
* granting write access to everything else.
|
|
*
|
|
* There is deliberately no write, update or delete endpoint here — rows are
|
|
* created only by `AuditInterceptor`, and an audit trail that can be edited
|
|
* through the API is not an audit trail.
|
|
*/
|
|
@ApiTags('audit')
|
|
@ApiBearerAuth()
|
|
@Controller('audit')
|
|
export class AuditController {
|
|
constructor(private readonly auditService: AuditService) {}
|
|
|
|
@Get('logs')
|
|
@BookingStaff(FREIGHT_PERMS.auditLog.view)
|
|
@ApiOperation({
|
|
summary:
|
|
'List backoffice audit logs — filter by entity type, user, method, outcome and date range',
|
|
})
|
|
list(@Query() query: AuditLogQueryDto): Promise<PaginatedResponse<AuditLog>> {
|
|
return this.auditService.search(query);
|
|
}
|
|
|
|
@Get('types')
|
|
@BookingStaff(FREIGHT_PERMS.auditLog.view)
|
|
@ApiOperation({
|
|
summary: 'Distinct entity types present in the audit log (filter dropdown)',
|
|
})
|
|
types(): Promise<string[]> {
|
|
return this.auditService.listTypes();
|
|
}
|
|
|
|
@Get('actions')
|
|
@BookingStaff(FREIGHT_PERMS.auditLog.view)
|
|
@ApiOperation({
|
|
summary: 'Distinct action titles present in the audit log (filter dropdown)',
|
|
})
|
|
actions(): Promise<string[]> {
|
|
return this.auditService.listActions();
|
|
}
|
|
}
|