FutsalLeague Manager maintains an append-only audit log of every administrative action taken across the platform. Every time an admin or referee creates, updates, or deletes data, a record is written to theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Danielsl4/TFG_DAM_2526/llms.txt
Use this file to discover all available pages before exploring further.
audit_logs table with full context — who did what, to which entity, and when. This log is the primary accountability mechanism for the platform and cannot be modified or deleted through the UI.
What gets logged
The following actions produce an audit log entry automatically:- Matches — creation, status updates, event additions, finalization, soft deletion, restoration, permanent deletion, team assignment updates
- Seasons — creation (with or without import), update, deletion, structure import
- Groups — creation, update, deletion, team assignment and removal
- Teams — creation, update, soft deletion, restoration, season registration, removal from a season or group
- Players — creation, update, soft deletion, restoration, squad registration, transfer, season removal
- Users — role change, account deactivation (soft delete with anonymization)
- Images — upload via
POST /admin/upload(not individually logged, but the encompassing team or player update is)
Log entry structure
Each row inaudit_logs contains:
| Field | Type | Description |
|---|---|---|
id | integer | Auto-incremented primary key |
user_id | integer | ID of the admin or referee who performed the action |
username | string | Resolved from the users table via JOIN (shown in API responses) |
action | string | Human-readable description of the action |
entity_type | string | Type of entity affected: match, team, player, season, group, or user |
entity_id | integer | ID of the affected entity |
details | JSONB | Contextual data specific to the action (name, old values, season ID, etc.) |
created_at | timestamp | UTC timestamp of when the action occurred |
Example log entry
details field varies by action type. Common fields you will find inside it include name (for team/player/season/group actions), season_id (to correlate entries with a season), and entity-specific data like homeTeamId, role, or imported_from.
Accessing the log
Full log with filters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default: 1) |
limit | integer | Entries per page (default: 20) |
season_id | integer | Filter to entries whose details->>'season_id' matches |
username | string | Partial, accent-insensitive match on the acting user’s username |
date | date | Exact date filter in YYYY-MM-DD format |
Dashboard preview
The last 5 log entries are always visible on the admin dashboard without navigating to the full log view. They are returned as therecentActivity array in GET /admin/summary. If a season_id is passed to the summary endpoint, the preview is filtered to entries that reference that season (entries without a season_id in their details are always included).
Background cron jobs
FutsalLeague Manager runs scheduled background tasks vianode-cron to automate maintenance operations. These tasks run server-side and do not appear in the audit log, as they are automated system processes rather than user-initiated actions.
Unverified account cleanup (runs daily at midnight)
Unverified account cleanup (runs daily at midnight)
Every day at This keeps the users table clean of abandoned registrations. Verified accounts are never affected.
00:00 server time, the cron job permanently deletes user accounts that have been registered for more than 24 hours without completing email verification:Audit log entries are retained indefinitely in the database. There is no automated expiry or rotation for log records. If your deployment has storage constraints, manage retention directly in the database — for example, by archiving rows older than a given threshold to cold storage.
The audit log is append-only by design. There is no endpoint to delete, edit, or suppress individual log entries through the admin UI. If an action was taken in error, the corrective action (for example, restoring a deleted match) will itself produce a new log entry — maintaining a complete chain of events for accountability.