Projects API
API pro správu projektů (akcí/eventů).
Přehled
Projekty reprezentují akce nebo produkce, které vyžadují nakládku vybavení. Každý projekt má:
- Název a datumy
- Load sessions
- Project kits
Endpointy
GET /projects
Seznam všech projektů s paginací.
Oprávnění: Bearer token (vyžaduje autentizaci)
Query parametry:
page(volitelné): Číslo stránky (výchozí: 1)pageSize(volitelné): Počet položek na stránku (výchozí: 50)
Response:
{
"success": true,
"data": {
"projects": [
{
"id": 1,
"name": "Summer Festival 2024",
"date_from": 1704067200,
"date_to": 1704153600,
"notes": "Outdoor event",
"created_at": 1703980800
}
],
"pagination": {
"total": 10,
"page": 1,
"pageSize": 50,
"totalPages": 1
}
}
}
GET /projects/:id
Získá detail projektu.
Oprávnění: Bearer token (vyžaduje autentizaci)
Response:
{
"success": true,
"data": {
"id": 1,
"name": "Summer Festival 2024",
"date_from": 1704067200,
"date_to": 1704153600,
"notes": "Outdoor event",
"created_at": 1703980800
}
}
POST /projects
Vytvoří nový projekt.
Oprávnění: Producer, Admin
Request:
{
"name": "Summer Festival 2024",
"date_from": 1704067200,
"date_to": 1704153600,
"notes": "Outdoor event"
}
Response:
{
"success": true,
"data": {
"id": 1,
"name": "Summer Festival 2024",
"date_from": 1704067200,
"date_to": 1704153600,
"notes": "Outdoor event",
"created_at": 1703980800
}
}
PUT /projects/:id
Upraví existující projekt.
Oprávnění: Producer, Admin
Request:
{
"name": "Summer Festival 2024 Updated",
"date_from": 1704067200,
"date_to": 1704153600,
"notes": "Updated notes"
}
Response:
{
"success": true,
"data": {
"id": 1,
"name": "Summer Festival 2024 Updated",
"date_from": 1704067200,
"date_to": 1704153600,
"notes": "Updated notes",
"created_at": 1703980800
}
}
Error Response (project has open sessions):
{
"success": false,
"error": "VALIDATION_ERROR",
"message": "Project has open load sessions. Close them first."
}
DELETE /projects/:id
Smaže projekt.
Oprávnění: Producer, Admin
Response:
{
"success": true,
"data": {
"message": "Project deleted"
}
}
Error Response (project has open sessions):
{
"success": false,
"error": "VALIDATION_ERROR",
"message": "Project has open load sessions. Close them first."
}
Error Response (project not found):
{
"success": false,
"error": "NOT_FOUND",
"message": "Project not found"
}
GET /projects/:id/plan
Získání plánu gearu pro projekt.
Oprávnění: Producer, Admin
Response:
{
"success": true,
"data": {
"lines": [
{
"id": 1,
"line_type": "ITEM_QTY",
"ref_id": 5,
"qty": 10,
"item": {
"id": 5,
"name": "Cable XLR 10m"
}
},
{
"id": 2,
"line_type": "GLOBAL_KIT",
"ref_id": 3,
"qty": 1,
"globalKit": {
"id": 3,
"name": "Sound Kit A"
}
}
]
}
}
POST /projects/:id/plan
Přidání položky do plánu gearu.
Oprávnění: Producer, Admin
Změny v verzi 0.2.0:
- Opravena chyba při použití nesprávného názvu sloupce v SQL dotazu
- Přidán lepší error handling s detailním logováním
- Přidány toast notifikace pro vizuální feedback
Request:
{
"line_type": "ITEM_QTY",
"ref_id": 5,
"qty": 10
}
Typy line_type:
ITEM_QTY- Item s množstvím (ref_id = item_id)GLOBAL_KIT- Globální kit (ref_id = kit_id)PROJECT_KIT- Projektový kit (ref_id = kit_id)
Response:
{
"success": true,
"data": {
"id": 1,
"project_id": 123,
"line_type": "ITEM_QTY",
"ref_id": 5,
"qty": 10,
"created_at": 1704067200
}
}
PUT /projects/:id/plan/:lineId
Aktualizace položky v plánu gearu.
Oprávnění: Producer, Admin
Změny v verzi 0.2.0:
- Přidán sloupec
updated_atdo tabulkyproject_plan_lines(migrace 0029) - Přidán lepší error handling s detailním logováním
Request:
{
"qty": 15
}
DELETE /projects/:id/plan/:lineId
Odebrání položky z plánu gearu.
Oprávnění: Producer, Admin
Response:
{
"success": true,
"data": {
"message": "Plan line deleted"
}
}
GET /projects/:id/loading/status
Získá status nakládky pro projekt (planned, loaded, missing, extra, progress).
Oprávnění: Bearer token (vyžaduje autentizaci)
Response:
{
"success": true,
"data": {
"planned": 50,
"loaded": 35,
"missing": 15,
"extra": 0,
"progress": 70.0
}
}
POST /projects/:id/loading/click
Označí položku v plánu jako naloženou (+1).
Oprávnění: Sailor, Producer, Admin
Request:
{
"plan_line_id": 123
}
Response:
{
"success": true,
"data": {
"planned": 50,
"loaded": 36,
"missing": 14,
"extra": 0,
"progress": 72.0
}
}
POST /projects/:id/loading/unload
Označí položku v plánu jako nenaloženou (-1).
Oprávnění: Sailor, Producer, Admin
Request:
{
"plan_line_id": 123
}
Response:
{
"success": true,
"data": {
"planned": 50,
"loaded": 35,
"missing": 15,
"extra": 0,
"progress": 70.0
}
}
Business pravidla
Mazání projektu
- Projekty s otevřenými load sessions nelze smazat
- Nejdřív musí být všechny load sessions uzavřeny
- Po smazání projektu se smažou i všechny související data (load sessions, project kits, plan lines)
Validace datumů
date_frommusí být předdate_to- Oba datumy jsou povinné
Plánování gearu
- Plán gearu definuje, jaké vybavení má být naloženo na projekt
- Plán může obsahovat items s množstvím, globální kity a projektové kity
- Plán je přímo spojen s projektem (project_plan_lines)
Nakládka
- Nakládka je nyní přímo spojena s projektem (žádné samostatné load sessions)
- Použijte
/projects/:id/loading/statuspro získání statusu - Použijte
/projects/:id/loading/clickpro naložení položky - Použijte
/projects/:id/loading/unloadpro vrácení položky zpět - Status se počítá z scan_events s project_id
Kódy chyb
VALIDATION_ERROR- Neplatné parametry (chybějící name, date_from, date_to)NOT_FOUND- Projekt nenalezenINVALID_ID- Neplatné project IDINTERNAL_ERROR- Vnitřní chyba serveru