Przejdź do treści

Etap 19 — 1 skrytka = 1 funkcja + NONE domyślnie

Najważniejsza zmiana semantyki skrytek

Każda skrytka ma dokładnie jedną funkcję. NONE = skonfigurowana, ale nieprzypisana (nie bierze udziału w żadnej operacji). Naprawia bug „paczka wpadła do skrytki wydawania".

Co weszło

Backend

  • Enum LockerFunction += NONE. Funkcje: PARCEL, DISPENSE, KEY_RENTAL, DOCUMENT, NONE.
  • 2 migracje: (A) ADD VALUE 'NONE' osobno (Postgres nie pozwala użyć nowej wartości enuma w tej samej tx); (B) dane {}{NONE} (×340) + CHECK cardinality=1 (NIE array_length{} daje NULL → bug; cardinality odporne).
  • lockerFn() — defensywny odczyt jedynej funkcji.
  • Egzekwowanie wszędzie: deposit/assign tylko allowedFunctions equals [PARCEL]; inventory tylko [DISPENSE]; NONE nigdzie. machines.meSelf.availableFunctions z realnych funkcji (NONE odfiltrowane — naprawia ukryty bug pomijający DISPENSE). DTO: @ArrayMinSize(1) @ArrayMaxSize(1). Sync tworzy nowe skrytki jako [NONE].
  • Wspólny lockerOpenPreCheck (SmartConf = NO-OP) — audyt 5 operacji czysty.

Web

  • FunctionPicker single-select + opcja „Brak"; statystyki z licznikiem NONE; assign-dropdown filtruje do [PARCEL].

Kiosk (1.5.48–1.5.50)

  • availableFunctions z realnych funkcji; brak fallbacku na ['PARCEL'] — maszyna bez funkcji nie pokazuje kafli flow.

Status

Wdrożone (backend 2 migracje, web/kiosk 1.5.48–1.5.50).

Akcja operatora

Po migracji 340 skrytek = NONE → trzeba je przetagować w panelu (bulk-picker) na realne funkcje, inaczej maszyna nie przyjmie paczek. Patrz roadmapa → do zrobienia.

Powiązane