Přeskočit na hlavní obsah

Kits API

API pro správu globálních a akcových kitů.

Přehled

Systém podporuje dva typy kitů:

  1. Global Kits - Firemní kity, které mohou být použity na více akcích

    • Může obsahovat kombinaci konkrétních assetů a nekonkrétních itemů
    • Může být naložen hromadně (pokud je kompletní)
    • Pouze Admin může spravovat
  2. Project Kits - Akcové kity, které jsou specifické pro konkrétní projekt

    • Může obsahovat kombinaci assetů a itemů
    • Může obsahovat informaci odkud to přišlo (source_type, source_id)
    • NIKDY nelze naložit hromadně - vždy položkové potvrzení
    • Producer a Admin mohou spravovat

Globální kity

GET /kits/global

Získá seznam všech globálních kitů.

Oprávnění: Bearer token (vyžaduje autentizaci)

Response:

{
"success": true,
"data": [
{
"id": 1,
"name": "ADJ spoty #1",
"scan_id": 12345,
"notes": "Kompletní sada ADJ spotů",
"created_at": 1704067200
}
]
}

GET /kits/global/:id

Získá detail globálního kitu včetně členů.

Oprávnění: Bearer token (vyžaduje autentizaci)

Response:

{
"success": true,
"data": {
"id": 1,
"name": "ADJ spoty #1",
"scan_id": 12345,
"notes": "Kompletní sada ADJ spotů",
"created_at": 1704067200,
"assets": [
{
"id": 1,
"scan_id": 11111,
"item_id": 5,
"functional_status": "OK_100",
"availability_status": "AVAILABLE"
}
],
"items": [
{
"id": 10,
"name": "XLR kabel",
"qty": 5
}
]
}
}

POST /kits/global

Vytvoří nový globální kit.

Oprávnění: Admin

Request:

{
"name": "ADJ spoty #1",
"scan_id": 12345,
"notes": "Kompletní sada ADJ spotů"
}

Response:

{
"success": true,
"data": {
"id": 1,
"name": "ADJ spoty #1",
"scan_id": 12345,
"notes": "Kompletní sada ADJ spotů",
"created_at": 1704067200
}
}

PUT /kits/global/:id

Upraví globální kit.

Oprávnění: Admin

Request:

{
"name": "ADJ spoty #1 (aktualizováno)",
"scan_id": 12345,
"notes": "Aktualizované poznámky"
}

Response:

{
"success": true,
"data": {
"id": 1,
"name": "ADJ spoty #1 (aktualizováno)",
"scan_id": 12345,
"notes": "Aktualizované poznámky",
"updated_at": 1704067200
}
}

DELETE /kits/global/:id

Smaže globální kit.

Oprávnění: Admin

Response:

{
"success": true,
"data": {
"message": "Kit smazán"
}
}

POST /kits/global/:id/members/assets

Přidá nebo odebere asset z globálního kitu.

Oprávnění: Admin

Request - Přidat:

{
"action": "add",
"asset_id": 1
}

Request - Odebrat:

{
"action": "remove",
"asset_id": 1
}

Response:

{
"success": true,
"data": {
"message": "Asset přidán do kitu"
}
}

POST /kits/global/:id/members/items

Nastaví množství nekonkrétní položky v globálním kitu.

Oprávnění: Admin

Request:

{
"item_id": 10,
"qty": 5
}

Poznámka: qty = 0 odebere item z kitu.

Response:

{
"success": true,
"data": {
"message": "Množství itemu nastaveno"
}
}

Projektové kity

GET /projects/:id/kits

Získá seznam akcových kitů pro projekt.

Oprávnění: Bearer token (vyžaduje autentizaci)

Response:

{
"success": true,
"data": [
{
"id": 1,
"project_id": 5,
"name": "Kabelovka pro akci",
"scan_id": 67890,
"notes": "Kabelovka pro tuto konkrétní akci",
"created_at": 1704067200
}
]
}

GET /projects/:id/kits/:kitId

Získá detail akcového kitu včetně řádků.

Oprávnění: Bearer token (vyžaduje autentizaci)

Response:

{
"success": true,
"data": {
"id": 1,
"project_id": 5,
"name": "Kabelovka pro akci",
"scan_id": 67890,
"notes": "Kabelovka pro tuto konkrétní akci",
"created_at": 1704067200,
"lines": [
{
"id": 1,
"kit_id": 1,
"asset_id": 5,
"asset_scan_id": 12345,
"asset_name": "XLR kabel 1",
"item_id": null,
"item_name": null,
"qty": null,
"source_type": "warehouse",
"source_id": null,
"created_at": 1704067200
},
{
"id": 2,
"kit_id": 1,
"asset_id": null,
"asset_scan_id": null,
"asset_name": null,
"item_id": 10,
"item_name": "XLR kabel",
"qty": 5,
"source_type": "global_kit",
"source_id": 1,
"created_at": 1704067200
}
]
}
}

POST /projects/:id/kits

Vytvoří nový akcový kit pro projekt.

Oprávnění: Producer, Admin

Request:

{
"name": "Kabelovka pro akci",
"scan_id": 67890,
"notes": "Kabelovka pro tuto konkrétní akci"
}

Response:

{
"success": true,
"data": {
"id": 1,
"project_id": 5,
"name": "Kabelovka pro akci",
"scan_id": 67890,
"notes": "Kabelovka pro tuto konkrétní akci",
"created_at": 1704067200
}
}

PUT /projects/:id/kits/:kitId

Upraví akcový kit.

Oprávnění: Producer, Admin

Request:

{
"name": "Kabelovka pro akci (aktualizováno)",
"scan_id": 67890,
"notes": "Aktualizované poznámky"
}

Response:

{
"success": true,
"data": {
"id": 1,
"project_id": 5,
"name": "Kabelovka pro akci (aktualizováno)",
"scan_id": 67890,
"notes": "Aktualizované poznámky",
"updated_at": 1704067200
}
}

DELETE /projects/:id/kits/:kitId

Smaže akcový kit.

Oprávnění: Producer, Admin

Response:

{
"success": true,
"data": {
"message": "Kit smazán"
}
}

POST /projects/:id/kits/:kitId/lines

Přidá, odebere nebo upraví řádek v akcovém kitu.

Oprávnění: Producer, Admin

Request - Přidat asset:

{
"action": "add",
"asset_id": 1,
"source_type": "warehouse",
"source_id": null
}

Request - Přidat item:

{
"action": "add",
"item_id": 10,
"qty": 5,
"source_type": "global_kit",
"source_id": 1
}

Request - Odebrat řádek:

{
"action": "remove",
"line_id": 1
}

Request - Nastavit qty:

{
"action": "set_qty",
"line_id": 2,
"qty": 10
}

Response:

{
"success": true,
"data": {
"message": "Řádek přidán do kitu"
}
}

Business pravidla

Globální kity

  • Může obsahovat kombinaci konkrétních assetů a nekonkrétních itemů
  • Může být naložen hromadně (pokud je kompletní)
  • Pouze Admin může spravovat

Projektové kity

  • Může obsahovat kombinaci assetů a itemů
  • Může obsahovat informaci odkud to přišlo (source_type, source_id)
  • NIKDY nelze naložit hromadně - vždy položkové potvrzení
  • Producer a Admin mohou spravovat

Kompletnost kitu

Global kit je kompletní pokud:

  • Všechny member assety mají availability_status = 'AVAILABLE' a functional_status = 'OK_100'
  • Všechny member items mají dostatečné stock_qty

Kódy chyb

  • VALIDATION_ERROR - Neplatné parametry
  • NOT_FOUND - Kit nebo položka nenalezena
  • DUPLICATE_SCAN_ID - Scan ID už je použit
  • ALREADY_MEMBER - Asset/item už je členem kitu
  • INTERNAL_ERROR - Vnitřní chyba serveru