Categories
Categories classify what kind of event is being offered. The application ships with six seeded defaults defined inCategoryTableSeeder:
These categories are inserted when the seeder is run:
category model exposes a hasMany relationship back to events, and the Event model resolves the inverse with belongsTo(Category::class).
Admin Management
Categories are managed exclusively by admins through the dashboard. The full CRUD interface is available under/dashboard/admin/categories:
The controller logic is intentionally simple — the only editable field is
name:
Statuses
Statuses communicate an event’s current availability to attendees. Three statuses are seeded byStatusTableSeeder:
The seeder populates these in order, which is why their IDs are predictable and referenced directly in the application code:
Admin Management
Statuses are managed exclusively by admins through the dashboard under/dashboard/admin/status:
The controller follows the same pattern as categories, with
name as the only mutable field:
The
statuses table uses onDelete('set null') for events. Deleting a status record will set status_id to null on all associated events. The three default statuses should not be deleted, as their IDs (1, 2, 3) are hardcoded into the event creation and ticket purchase logic.How Status Affects Events
Status transitions happen through a combination of automatic system logic and manual admin overrides. The full lifecycle of an event’s status looks like this:1
Event created with available capacity → Disponible
When An event created with any positive capacity starts as Disponible. An event created with a capacity of
EventController::store() saves a new event, it checks the initial capacity value and assigns the status accordingly:0 starts immediately as Agotado.2
All tickets sold → Agotado
Each time a ticket purchase is processed by This ensures the event detail page and explore listing always reflect real-time availability without any manual intervention.
TicketController::store(), the remaining capacity is decremented. Once it reaches zero, the status transitions automatically:3
Event concludes → Finalizado (manual)
The Finalizado status is not set automatically by the system. An admin must navigate to the event edit form (
GET /dashboard/events/edit/{event}) and manually select Finalizado from the status dropdown. This is the appropriate action after an event’s end_date has passed and the organizer wants to communicate that no further activity is expected.