mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 10:42:57 +00:00
169 lines
9.6 KiB
Markdown
169 lines
9.6 KiB
Markdown
# 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).
|