58ca4e68db
- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics) - Rust analytics service with parallel report generation - C runtime with POSIX shared memory IPC - PostgreSQL schema with 30+ tables, full migrations - Redis cache, sessions, pub/sub - Kafka event streaming with Zookeeper - WebSocket hub for real-time updates - Automation engine with cron jobs, workflows, event triggers - JWT authentication, multi-tenant from start - Docker Compose with all services - Nginx reverse proxy with rate limiting - Integration tests passing - Feature gap analysis against Fortnox/Odoo/Visma Refs: BOC-001
190 lines
6.3 KiB
Markdown
190 lines
6.3 KiB
Markdown
# quiXzoom Shop — Status
|
||
|
||
## quiXzoom Field Program
|
||
|
||
| Nivå | Uppdrag | Krav | Förmåner |
|
||
|------|---------|------|----------|
|
||
| **Contributor** | 0–9 | Registrerad användare | Digital profil, digital verifiering |
|
||
| **Field Contributor** | 10+ | 10 godkända uppdrag | 🔓 Field Gear Store (västar, jackor, utrustning) |
|
||
| **Verified Field Contributor** | 100+ | 100 godkända uppdrag + 95% godkännandegrad + verifierad identitet + inga allvarliga policyöverträdelser | 🔓 Field ID Kit (personligt ID-kort, hållare, lanyard) + publik verifieringssida |
|
||
|
||
## ✅ Byggt och klart
|
||
|
||
### Backend (`quixzoom-shop/`)
|
||
- **FastAPI** service på port 8087
|
||
- **PostgreSQL** databas `quixzoom_shop`
|
||
- **19 produkter** (18 Field Gear + 1 Field ID Kit)
|
||
- **JWT-auth** för att verifiera Zoomers
|
||
- **Tier-system** med mission-gating och kvalitetskrav
|
||
- **Stripe-betalning** integrerad
|
||
- **Publik verifieringssida** för ID-kort
|
||
|
||
### API Endpoints
|
||
| Endpoint | Auth | Status |
|
||
|----------|------|--------|
|
||
| `GET /health` | Nej | ✅ |
|
||
| `GET /api/products` | Nej (tier-filter) | ✅ |
|
||
| `GET /api/products/{id}` | Nej | ✅ |
|
||
| `GET /api/eligibility` | Ja | ✅ (legacy) |
|
||
| `GET /api/tier` | Ja | ✅ |
|
||
| `POST /api/orders` | Ja | ✅ |
|
||
| `GET /api/orders` | Ja | ✅ |
|
||
| `GET /api/orders/{id}` | Ja | ✅ |
|
||
| `POST /api/payment/create-intent` | Ja | ✅ |
|
||
| `POST /api/payment/webhook` | Stripe | ✅ |
|
||
|
||
### Webbsidor
|
||
| Sida | Status |
|
||
|------|--------|
|
||
| `/` — Produktlista med kundvagn + tier-badge | ✅ |
|
||
| `/product/{id}` — Produktdetalj | ✅ |
|
||
| `/checkout` — Stripe-betalning | ✅ |
|
||
| `/verify/{id}` — **Publik verifieringssida för ID-kort** | ✅ |
|
||
|
||
### Verifieringssida (`/verify/{contributor_id}`)
|
||
- ✅ Sök på Contributor ID
|
||
- ✅ Visar status (giltigt/ogiltigt)
|
||
- ✅ Visar contributor-info (namn, initialer, stats)
|
||
- ✅ Förklarar vad Verified Field Contributor innebär
|
||
- ✅ Info för fastighetsägare och kommuner
|
||
- ✅ QR-kod leder till denna sida
|
||
|
||
### App-integration
|
||
- Ny **Shop-tab** (🛒) i bottom navigation
|
||
- **ShopScreen.tsx** med tre tillstånd:
|
||
- Contributor (0-9): Låsskärm med progress
|
||
- Field Contributor (10+): WebView med shoppen + tier-banner
|
||
- Verified Field Contributor (100+): WebView med shoppen + verified-banner
|
||
- **Eligibility-check** via `/api/tier`
|
||
- Token injectas via `localStorage`
|
||
|
||
### Betalningsflöde (Stripe)
|
||
1. ✅ Kundvagn i localStorage
|
||
2. ✅ Order skapas i backend
|
||
3. ✅ Stripe PaymentIntent skapas
|
||
4. ✅ Stripe Elements för kortinmatning
|
||
5. ✅ Webhook för betalningsbekräftelse
|
||
6. ✅ Order uppdateras till `paid`
|
||
|
||
## 🔄 Kvar att göra
|
||
|
||
### Produktion
|
||
- [ ] Sätta upp nginx + SSL för `shop.quixzoom.com`
|
||
- [ ] Konfigurera riktiga Stripe-nycklar
|
||
- [ ] Sätta upp Stripe webhook endpoint
|
||
- [ ] systemd service aktivera
|
||
|
||
### Produktbilder
|
||
- [ ] Ladda upp riktiga bilder för alla 19 produkter
|
||
- [ ] CDN eller S3 för bildhosting
|
||
|
||
### Orderhantering
|
||
- [ ] Admin-panel för ordrar
|
||
- [ ] Orderstatus-flöde (pending → paid → shipped → delivered)
|
||
- [ ] Fraktintegration
|
||
- [ ] E-postbekräftelser
|
||
|
||
### Field ID Kit
|
||
- [ ] ID-kort design (namn, Contributor ID, QR-kod, giltighetsdatum)
|
||
- [ ] QR-kod generering i appen/webben
|
||
- [ ] Beställningsflöde för ID Kit (gratis för Verified)
|
||
|
||
## 🚀 Snabbstart produktion
|
||
|
||
```bash
|
||
# 1. Kopiera service-filen
|
||
sudo cp quixzoom-shop.service /etc/systemd/system/
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable quixzoom-shop
|
||
|
||
# 2. Uppdatera Stripe-nycklar
|
||
sudo systemctl edit --full quixzoom-shop
|
||
# Ändra STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET
|
||
|
||
# 3. Starta
|
||
sudo systemctl start quixzoom-shop
|
||
|
||
# 4. Nginx-konfiguration
|
||
sudo cp nginx-shop.conf /etc/nginx/conf.d/
|
||
sudo nginx -s reload
|
||
|
||
# 5. SSL (Let's Encrypt)
|
||
sudo certbot --nginx -d shop.quixzoom.com
|
||
```
|
||
|
||
## 📊 Produkter
|
||
|
||
### Field Gear Store (10+ uppdrag)
|
||
|
||
| SKU | Namn | Pris (kr) | Kategori |
|
||
|-----|------|-----------|----------|
|
||
| VEST-001 | Field Vest | 1 299 | kläder |
|
||
| JACKET-001 | Mission Shell | 2 499 | kläder |
|
||
| PANTS-001 | Field Pants | 1 799 | kläder |
|
||
| BASE-001 | Base Layer | 899 | kläder |
|
||
| BEANIE-001 | Field Beanie | 499 | accessoarer |
|
||
| GLOVES-001 | Field Gloves | 799 | accessoarer |
|
||
| STRAP-001 | Capture Strap | 599 | utrustning |
|
||
| POUCH-001 | Utility Pouch | 699 | utrustning |
|
||
| COIN-001 | Ref. Coin | 199 | accessoarer |
|
||
| LIGHT-001 | Pocket Light | 399 | utrustning |
|
||
| POWER-001 | Power Module | 1 499 | utrustning |
|
||
| CABLE-001 | Cable Kit | 599 | utrustning |
|
||
| RAIN-001 | Rain Cover | 799 | utrustning |
|
||
| BAG-001 | Field Bag | 1 999 | utrustning |
|
||
| BELT-001 | Tactical Belt | 899 | accessoarer |
|
||
| SOCKS-001 | Field Socks | 399 | kläder |
|
||
| PATCH-001 | quiXzoom Patch | 299 | accessoarer |
|
||
| BOTTLE-001 | Field Bottle | 699 | utrustning |
|
||
|
||
### Verified Field ID Kit (100+ uppdrag, 95% approval)
|
||
|
||
| SKU | Namn | Pris | Kategori |
|
||
|-----|------|------|----------|
|
||
| ID-KIT-001 | Field ID Kit | Gratis | verified |
|
||
|
||
Innehåll:
|
||
- Personligt verifierat ID-kort
|
||
- ID-hållare
|
||
- Lanyard
|
||
- Digital verifieringsmärke
|
||
- Publik verifieringssida via QR-kod
|
||
|
||
## 🔒 Säkerhet
|
||
|
||
- JWT-token valideras på varje order-request
|
||
- Mission-count + approval rate + identity + violations hämtas från databas
|
||
- SQL-injection skyddad via asyncpg parameteriserade queries
|
||
- Stock-koll innan order skapas (transaction)
|
||
- Stripe webhook signerad och verifierad
|
||
- Verifieringssida visar endast publik info (ingen känslig data)
|
||
|
||
## 📁 Filer
|
||
|
||
```
|
||
quixzoom-shop/
|
||
├── main.py # FastAPI backend
|
||
├── requirements.txt # Python dependencies
|
||
├── Dockerfile # Docker image
|
||
├── docker-compose.yml # Docker Compose
|
||
├── nginx-shop.conf # Nginx reverse proxy
|
||
├── quixzoom-shop.service # systemd service
|
||
├── README.md # Översikt
|
||
├── STRIPE_SETUP.md # Stripe konfiguration
|
||
├── SHOP_STATUS.md # Denna fil
|
||
├── templates/
|
||
│ ├── shop.html # Produktlista med tier-badge
|
||
│ ├── product.html # Produktdetalj
|
||
│ ├── checkout.html # Stripe-betalning
|
||
│ └── verify.html # Publik verifieringssida
|
||
└── static/ # Bilder, CSS, JS
|
||
```
|
||
|
||
## 🔗 URL:er
|
||
|
||
| Miljö | URL |
|
||
|-------|-----|
|
||
| Lokal dev | `http://localhost:8087` |
|
||
| Produktion | `https://shop.quixzoom.com` |
|
||
| Verifiering | `https://shop.quixzoom.com/verify/{contributor_id}` |
|