Auditing & Errors
Auditing
Most write operations accept an optional auditContext (and userContext) and use AuditService to create audit logs:
await auditService.createAuditLog({
tenantId,
action: AuditAction.FEATURE_UPDATED,
entity: 'Feature',
entityId: id,
dataBefore,
dataAfter,
performedBy,
ipAddress,
});
Audit actions are drawn from @prisma/access-control enums.
Error Handling
Services map data-layer errors to HTTP exceptions with friendly messages:
| Exception | Use Case |
|---|---|
BadRequestException | Invalid input, state preconditions |
ConflictException | Duplicate records |
NotFoundException | Resource not found |
HttpException with INTERNAL_SERVER_ERROR | Unknown errors |
Feature uniqueness is validated before writes to avoid ambiguous conflicts.