# MyClub E‑shop – Timeline > Přehled kroků pro dokončení e‑shopu. Položky označené `✔` jsou hotové, `⬜` čekají na dokončení. ## 1. Infrastruktura a zapínání e‑shopu (✔ 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 + e‑shop. ## 2. E‑shop 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 best‑effort `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. E‑shop 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 e‑shopu“, když je `REACT_APP_ESHOP_URL` nastavené. - `MerchSection` na homepage – vedle „Zobrazit vše“ přidán button „E‑shop“ → plný e‑shop. - ✔ **Admin MyClub** - `AdminMerchPage` ukazuje informační box s odkazem na plný e‑shop, pokud `REACT_APP_ESHOP_URL` existuje. - ✔ **Frontend env** - `frontend/.env(.example)` – přidáno `REACT_APP_ESHOP_URL`. ## 5. E‑shop 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 „E‑shop → 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 e‑mail…“ 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í (e‑mail, 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. E‑shop Setup (druhý krok po MyClub Setup) (✔ hotovo) - ✔ **Backend / nastavení** - Eshop endpointy pro čtení/uložení `EshopSettings` a `club-info`. - ✔ **Frontend** - Nová stránka „E‑shop 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 eshop‑backend (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: end‑to‑end 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í e‑shop 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).