--- phase: 23-shipment-presets-backend plan: 01 subsystem: shipments tags: [shipment-presets, crud, api, json] requires: - phase: none provides: n/a provides: - Tabela shipment_presets w DB - ShipmentPresetRepository z pełnym CRUD - JSON API (4 endpointy) do zarządzania presetami affects: [24-shipment-presets-ui, 25-shipment-presets-management] tech-stack: added: [] patterns: - POST-based JSON API (router nie obsługuje PUT/DELETE) key-files: created: - database/migrations/20260322_000059_create_shipment_presets_table.sql - src/Modules/Shipments/ShipmentPresetRepository.php - src/Modules/Shipments/ShipmentPresetController.php modified: - routes/web.php key-decisions: - "POST zamiast PUT/DELETE — Router obsługuje tylko GET/POST" - "Presety globalne — brak kolumny user_id" patterns-established: - "JSON API preset endpoints: /api/shipment-presets, /update, /delete" duration: 8min started: 2026-03-22T00:00:00Z completed: 2026-03-22T00:08:00Z --- # Phase 23 Plan 01: Shipment Presets Backend Summary **Tabela DB `shipment_presets`, repository CRUD i 4 endpointy JSON API do zarządzania presetami przesyłek.** ## Performance | Metric | Value | |--------|-------| | Duration | ~8 min | | Tasks | 3 completed | | Files created | 3 | | Files modified | 1 | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: Tabela shipment_presets | Pass | Migracja gotowa z pełnym zestawem kolumn | | AC-2: GET lista presetów | Pass | GET /api/shipment-presets zwraca JSON | | AC-3: POST tworzy preset | Pass | POST /api/shipment-presets, walidacja name, zwraca 201 | | AC-4: Aktualizacja presetu | Pass | POST /api/shipment-presets/update (zmiana z PUT) | | AC-5: Usuwanie presetu | Pass | POST /api/shipment-presets/delete (zmiana z DELETE) | ## Accomplishments - Migracja SQL tworząca tabelę `shipment_presets` z 16 kolumnami (name, color, carrier, wymiary, waga, itp.) - `ShipmentPresetRepository` z metodami findAll, findById, create, update, delete + mapParams helper - `ShipmentPresetController` z 4 endpointami JSON API (list, store, update, destroy) - Routing zarejestrowany w routes/web.php z auth middleware - SonarQube: 0 issues na nowych plikach ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `database/migrations/20260322_000059_create_shipment_presets_table.sql` | Created | Schemat tabeli presetów | | `src/Modules/Shipments/ShipmentPresetRepository.php` | Created | CRUD na tabeli shipment_presets | | `src/Modules/Shipments/ShipmentPresetController.php` | Created | JSON API controller | | `routes/web.php` | Modified | 4 nowe routy + DI presetów | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | POST zamiast PUT/DELETE | Router (src/Core/Routing/Router.php) obsługuje tylko get() i post() | Endpointy: /update i /delete jako POST | | input() zamiast param() dla id | Update/delete nie mają {id} w URL (POST body) | Controller czyta id z request body | ## Deviations from Plan ### Summary | Type | Count | Impact | |------|-------|--------| | Auto-fixed | 1 | Router limitation — zmiana metod HTTP na POST | **Total impact:** Minimalna zmiana API kontraktu, brak wpływu na funkcjonalność. ### Auto-fixed Issues **1. Router nie obsługuje PUT/DELETE** - **Found during:** Task 3 (routing) - **Issue:** Plan zakładał PUT/DELETE, router ma tylko get()/post() - **Fix:** Zmieniono na POST /api/shipment-presets/update i /delete, id w body - **Verification:** php -l routes/web.php — OK ## Issues Encountered None. ## Next Phase Readiness **Ready:** - Backend API kompletny — faza 24 może budować UI korzystając z tych endpointów - Migracja do uruchomienia na serwerze **Concerns:** - Brak **Blockers:** - None --- *Phase: 23-shipment-presets-backend, Plan: 01* *Completed: 2026-03-22*