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(NIEarray_length—{}daje NULL → bug;cardinalityodporne). lockerFn()— defensywny odczyt jedynej funkcji.- Egzekwowanie wszędzie: deposit/assign tylko
allowedFunctions equals [PARCEL]; inventory tylko[DISPENSE]; NONE nigdzie.machines.meSelf.availableFunctionsz 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¶
FunctionPickersingle-select + opcja „Brak"; statystyki z licznikiem NONE; assign-dropdown filtruje do[PARCEL].
Kiosk (1.5.48–1.5.50)¶
availableFunctionsz 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.