Files
Funnel_Wiki/Kosiky.md
2026-04-22 13:01:47 +02:00

77 lines
2.5 KiB
Markdown
Raw Permalink 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.

# Košíky (FunnelCart)
## Model
`App\Models\FunnelCart` tabulka `funnel_carts`
| Sloupec | Typ | Popis |
|---------|-----|-------|
| `id` | bigint | PK |
| `team_id` | bigint | Příslušnost k týmu |
| `tracking_site_id` | bigint | Příslušný web/eshop |
| `visitor_id` | string | ID anonymního návštěvníka |
| `contact_id` | bigint | Propojený kontakt (nullable) |
| `status` | string | `open` / `empty` / `converted` / `expired` |
| `items` | json | Pole položek košíku |
| `currency` | string | ISO kód měny |
| `total_no_tax` | decimal | Celková suma bez DPH |
| `shipping_fee_no_tax` | decimal | Cena dopravy bez DPH |
| `cod_fee_no_tax` | decimal | Poplatek za dobírku bez DPH |
| `shipping_label` | string | Název dopravce |
| `first_seen_at` | timestamp | Kdy košík vznikl |
| `last_seen_at` | timestamp | Poslední aktivita |
| `completed_at` | timestamp | Kdy byl dokončen |
| `is_completed` | boolean | Flag dokončení |
| `is_expired` | boolean | Flag expirování |
## Formát položky košíku (`items[]`)
```json
{
"code": "PROD-001",
"name": "Název produktu",
"qty": 2,
"unit_no_tax": 99.00,
"total_no_tax": 198.00,
"url": "https://eshop.cz/produkt",
"package": {}
}
```
## Stavy košíku
```
open košík má položky, zákazník nakupuje
empty košík byl vyprázdněn
converted objednávka dokončena
expired košík expiroval (job ExpireFunnelCarts)
```
## Browser tracking (collect.js)
Košíky z prohlížeče jdou přes dva endpointy:
- **`POST /api/cart`** `CartController` upsert košíku (event `cart_upsert`)
- **`POST /api/cart/complete`** `CartCompleteController` dokončení (event `cart_completed`)
Deduplikace přes `external_event_id` ve formátu `cart:{id}:cart_upsert:{hash}` kde hash je SHA1 z obsahu (kódy produktů, množství, ceny, měna).
## Server-to-server (eshop API)
Viz samostatná stránka [Integrace Eshop API](Integrace-Eshop-API).
- **`POST /api/eshop/cart`** `EshopCartController` párování podle emailu
- **`POST /api/eshop/order`** `EshopOrderController` dokončení podle emailu
## Expirování košíků
Job `ExpireFunnelCartsJob` (command `ExpireFunnelCarts`) pravidelně označuje staré otevřené košíky jako `expired`.
## Statistiky
Denní statistiky košíků se agregují do:
- `campaign_cart_daily_stats` košíky per kampaň
- `product_group_cart_daily_stats` košíky per produktová skupina
Rebuild přes command `RebuildCampaignCartDailyStats` / `RebuildProductGroupCartDailyStats`.