Files
MyClub/eshop/timeline.md
T
Tomas Dvorak dfc079288f hot fix #1
2026-01-26 08:13:18 +01:00

169 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MyClub Eshop Timeline
> Přehled kroků pro dokončení eshopu. Položky označené `✔` jsou hotové, `⬜` čekají na dokončení.
## 1. Infrastruktura a zapínání eshopu (✔ hotovo)
-**Env & config**
- `ESHOP_ENABLED`, `ESHOP_FRONTEND_URL`, `ESHOP_API_URL`, `ESHOP_FRONTEND_PORT`, `ESHOP_BACKEND_PORT` v `.env`.
- Backend `Config` načítá Stripe a Packeta údaje.
-**Docker Compose & Makefile**
- `docker-compose.eshop.yml` přidává `eshop-backend` a `eshop-frontend`.
- `make docker-up` / `make dev` podle `ESHOP_ENABLED` spouští buď jen MyClub, nebo MyClub + eshop.
## 2. Eshop backend jádro (✔ hotovo první verze)
-**Samostatný backend**
- Služba `eshop-backend` (Go/Gin) se sdílenou DB a auth (`JWTOptional`).
- Healthcheck: `GET /api/v1/eshop/health`.
-**Databázové modely** (`internal/models/eshop.go`)
- `eshop_product_categories`, `eshop_products`, `eshop_product_variants`.
- `eshop_carts`, `eshop_cart_items`.
- `eshop_orders`, `eshop_order_items`, `eshop_payments`, `eshop_shipping_labels`.
- `eshop_settings`.
-**Migrace**
- Modely přidány do `pkg/database.MigrateDB` a besteffort `AutoMigrate` v `main.go`.
-**Veřejné API (MVP)**
- `GET /api/v1/eshop/products` seznam aktivních produktů.
- `GET /api/v1/eshop/products/:slug` detail produktu.
- `GET /api/v1/eshop/cart` košík pro uživatele / session.
- `POST /api/v1/eshop/cart/items` přidání/úprava položky.
- `PATCH /api/v1/eshop/cart/items/:id` změna množství.
- `DELETE /api/v1/eshop/cart/items/:id` odebrání položky.
## 3. Eshop frontend veřejná část (✔ hotovo MVP)
-**Nová SPA aplikace** (`eshop/frontend`)
- CRA + TypeScript + Chakra UI + React Query.
- Základní theme (`theme.ts`) později napojíme na klubové barvy.
-**Routing** (`App.tsx`)
- `/` přehled produktů (`ShopHomePage`).
- `/produkt/:slug` detail produktu (`ProductDetailPage`).
- `/cart` košík (`CartPage`).
- `/admin` základ admin dashboard (`AdminDashboardPage`).
-**API klient** (`services/eshopApi.ts`)
- Napojení na `REACT_APP_API_URL` (v Dockeru `/api/v1/eshop`).
- Funkce `getProducts`, `getProduct`, `getCart`, `addToCart`, `updateCartItem`, `removeCartItem`.
-**Docker + Nginx**
- `eshop/frontend/Dockerfile` buildí appku.
- `eshop/frontend/nginx.conf`:
- `/` → SPA (`index.html`).
- `/api/` → proxy na `eshop-backend:8080`.
## 4. Propojení s MyClub (clothing / merch) (✔ hotovo první krok)
-**Veřejný web**
- `/obleceni` (`ClothingPage`) zobrazuje CTA „Přejít do plného eshopu“, když je `REACT_APP_ESHOP_URL` nastavené.
- `MerchSection` na homepage vedle „Zobrazit vše“ přidán button „Eshop“ → plný eshop.
-**Admin MyClub**
- `AdminMerchPage` ukazuje informační box s odkazem na plný eshop, pokud `REACT_APP_ESHOP_URL` existuje.
-**Frontend env**
- `frontend/.env(.example)` přidáno `REACT_APP_ESHOP_URL`.
## 5. Eshop produktová administrace v MyClub adminu (✔ hotovo)
Cíl: pohodlně spravovat produkty/varianty přímo z hlavní administrace.
-**Backend (MyClub)**
- Admin endpointy `/api/v1/admin/eshop/products` + `/variants` pro CRUD nad `eshop_products` a `eshop_product_variants` jsou implementované v `EshopAdminController` a zaregistrované v `routes.go`.
- Ochrana přes JWT + `RoleAuth("admin")` přes skupinu `/api/v1/admin`.
-**Frontend (MyClub admin)**
- Stránka „Eshop → Produkty“ (`AdminEshopProductsPage`) v admin SPA umožňuje CRUD nad produkty (název, slug, cena v haléřích, měna, aktivita, krátký + HTML popis, hlavní obrázek s náhledem, režim skladu).
- Pod každým produktem je sekce Varianty s plným CRUD (přidání / úprava / smazání) napojeným na admin API (`eshop_product_variants`).
## 6. Checkout & objednávky (GoCardless / GoPay MVP plateb) (✔ hotovo MVP)
-**Backend (eshop-backend)**
- `POST /api/v1/eshop/checkout`:
- zvaliduje košík, vytvoří draft `EshopOrder` se stavem `awaiting_payment`.
- podle konfigurace zvolí poskytovatele plateb:
- pokud `GOCARDLESS_ENABLED=true` → použije GoCardless,
- jinak pokud `GOPAY_ENABLED=true` → použije GoPay,
- jinak vytvoří záznam `EshopPayment` typu `manual_email`.
- pro GoPay/GoCardless vrátí `payment_redirect_url` pro frontend.
- pro fallback vrátí `manual_payment=true` + `contact_email` (kam objednávku poslat ručně).
-**Frontend (eshop-frontend)**
- `/cart` má krok „Pokračovat k platbě“ → jednoduchý checkout wizard.
- Po úspěšném `checkout`:
- pokud je `payment_redirect_url`, přesměruje uživatele na platební bránu (GoPay / GoCardless),
- pokud je `manual_payment=true`, zobrazí hlášku „Online platba není aktuálně dostupná, objednávku prosím pošlete na tento email…“ a zároveň přesměruje na stránku shrnutí objednávky `/objednavka/dekujeme`.
- Checkout stránka má vylepšené UX:
- inline validace povinných polí (email, jméno, příjmení, telefon),
- lepší stavy pro Packeta widget (načítání, chyba konfigurace),
- v rekapitulaci zobrazuje cenu dopravy a celkovou částku k úhradě podle nastavení backendu.
## 7. Doprava Packeta (Zásilkovna) (✔ hotovo)
-**Frontend (checkout)**
- Na stránce checkoutu načítat Packeta widget (`widget.packeta.com`).
- Uložení vybraného výdejního místa / adresy a předání na backend.
-**Backend (eshop-backend)**
- Po `paid` objednávce vytvořit Packeta zásilku (`createPacket`) a uložit `packet_id` do `EshopShippingLabel`.
- Endpoint pro stažení PDF štítku.
- Cron/background job pro pravidelné dotahování stavů (`packetStatus`) a update `EshopShippingLabel.Status`.
## 8. DeepSeek AI zákaznická podpora (✔ hotovo MVP)
-**Backend (eshop-backend)**
- `POST /api/v1/eshop/support/chat/stream` proxy na DeepSeek (`deepseek-chat`), `stream=true`.
- Použití systémového promptu z `eshop/DeepSeekSupportPrompt.md`.
- Doplnění kontextu (store info, poslední objednávky uživatele).
-**Frontend (eshop-frontend)**
- Malý chat widget v rohu (plovoucí okno) napojený na stream endpoint.
- Odpovědi primárně česky, podle promptu.
## 9. Eshop Setup (druhý krok po MyClub Setup) (✔ hotovo)
-**Backend / nastavení**
- Eshop endpointy pro čtení/uložení `EshopSettings` a `club-info`.
-**Frontend**
- Nová stránka „Eshop Setup“ (`/setup`) s kroky:
- Výchozí měna, země.
- Kontaktní email/telefon pro podporu.
- Základní nastavení dopravy (Packeta on/off).
- Automatické předvyplnění názvu klubu, loga a barev z MyClub `Settings`.
## 10. Hardening, monitoring a testy (⬜ TODO průběžně)
-**Bezpečnost & performance**
- Rate limiting pro checkout, platby, support chat.
- Logging a error reporting pro eshopbackend (využít stávající `ErrorReporter`).
- Stabilní anonymní session token pro košík a AI chat (`X-Session-Token` + cookie `eshop_session_token`).
-**Stripe integrace**
- Complete Stripe Payment Element integration with proper Elements wrapper
- Enhanced Stripe webhook handler with order status updates
- Improved error handling for payment failures
-**Uživatelské rozhraní**
- Enhanced order confirmation page with detailed order information
- Better status display and next steps information
- Improved responsive design and user experience
-**Doprava a logistika**
- Enhanced Packeta background job with order status synchronization
- Better error handling for shipping status updates
- Automatic order status updates based on shipping changes
-**Validace a error handling**
- Comprehensive input validation for checkout (email, phone, shipping)
- Cart validation with inventory checks and product availability
- Better error messages and user feedback
- Stock validation for product variants
-**Testy**
- ✔ Základní unit test pro `PacketaService.GetPacketStatus` (mockovaná API odpověď).
- ✔ Integrační test: aktualizace stavů Packeta zásilek (`ShippingController.UpdatePacketStatuses`) s mockovaným Packeta API.
- ✔ Integrační test: vytvoření objednávky bez online plateb (fallback `manual_email` v `CheckoutController.Checkout`).
- ✔ Integrační test: GoPay webhook (`CheckoutController.GoPayWebhook`) pro stav `PAID` → payment `succeeded`, order `paid`, košík `completed`.
- ✔ Integrační test: endtoend flow checkout → objednávka (včetně označení košíku jako completed po úspěšné platbě).
- ⬜ Zátěžové testy základních endpointů (produkty, košík, checkout).
- ✔ Frontend: stránka úspěšné objednávky `/objednavka/dekujeme` se shrnutím objednávky (načtení přes `/api/v1/eshop/orders/:id`).
- ✔ Frontend: build (`npm run build` v `eshop/frontend`) prochází včetně checkoutu, Packeta widgetu a AI support chatu.
---
## Jak tento soubor používat
- Pro každý blok výše můžeš:
- doplnit konkrétní TODO podkroky,
- značit hotové věci jako `✔` (nebo `[x]`) podle stavu projektu,
- přidat odkazy na další dokumentaci (např. `ESHOP_IMPLEMENTATION_PLAN.md`, `packeta.md`).
Aktuálně je hotová infrastruktura, jádro backendu, základní eshop frontend, propojení s MyClub clothing, administrace produktů, checkout se Stripe platbami, Packeta integrace a AI podpora. Projekt je ve fázi MVP funkčního celku. Další kroky jsou hardening, monitoring a testování (blok 10).