[PK-36] BE-7 Admin API: products/categories/promotions, stock, orders, inbox #15
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/PK-36-admin-api"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes PK-36.
Admin API pre MASOX:
Auth: každý handler chránený admin guard-om (
adminGuardcez session → role=admin). Autorizácia + validácia vstupov na hranici (UUID parse, rozsahy, slug regex), explicitný error handling, audit log v inbox-e.Pridava /api/admin/* endpointy chranene `requireAdmin` z BE-2: - Products: GET/POST/list, GET/PUT/DELETE/:id (DELETE = soft, active=false) - Categories: GET/POST/list, PUT/DELETE/:id (hard delete blokovany ak ma produkty/sub-kategorie) - Promotions: GET/POST/list, PUT/DELETE/:id + linkovanie POST/DELETE /products/:id/promotions[/:promo_id] (link idempotentny — 200 pri opakovani) - Stock: GET zoznam, PUT /:product_id absolutne nastavenie + audit cez InboxNotification typu `stock_adjusted` - Orders: GET list (status filter comma-separated, limit/offset paging), GET detail, mark-paid (idempotent — 409 already_paid), mark-shipped (len `paid` -> `shipped`), cancel (povolene z `pending|paid`, restock cez `lib/stock.restoreStock`, 409 zo `shipped`) - Inbox: GET ?unread=true, POST /:id/read (idempotent), POST /read-all - Vsetky write akcie atomicky cez `prisma.$transaction`, audit pole (paid_by_id, cancelled_by_id, admin_id v stock payload-e) - Konzistentny error shape `{error, message, fields?}` na vsetkych endpointoch - Validacia hand-rolled v `lib/adminValidation.ts` (rovnaky styl ako lib/auth.ts / lib/checkoutValidation.ts) - Vytahnute `lib/stock.ts` (decrementStock + restoreStock primitives), `lib/orderService.ts` to teraz reusi-uje Testy (37 noviadanych, vsetky 164 v repe prejdu): - adminGuard: 401/403/200 triplet pre vsetky resource list endpointy - adminCrud: CRUD happy path pre products, categories, promotions + idempotentny link/unlink + 409 na duplicit slug a kategoriu s produktami - adminOrders: mark-paid idempotent (2. volanie 409 + ziadna druha notifikacia), mark-shipped state machine, cancel restocknuti overene DB read-om, cancel `shipped` -> 409, stock PUT audit log - adminInbox: unread->read flow + read-all bulk + idempotencia /:id/read Co-authored-by: multica-agent <github@multica.ai>