This commit is contained in:
Tomas Dvorak
2026-01-26 08:13:18 +01:00
parent aa036b6550
commit dfc079288f
505 changed files with 95755 additions and 5712 deletions
+168
View File
@@ -0,0 +1,168 @@
# 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).