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

9.6 KiB
Raw Blame History

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).