215 lines
5.1 KiB
Markdown
215 lines
5.1 KiB
Markdown
|
|
# quiXzoom Token System — Testrapport
|
||
|
|
|
||
|
|
## Flöde som testas
|
||
|
|
|
||
|
|
```
|
||
|
|
Zoomer registrering → ID-verifiering → Wallet → Mission → Genomför → AI-analys → Godkänn → Token reward → Payout
|
||
|
|
```
|
||
|
|
|
||
|
|
## Komponenter
|
||
|
|
|
||
|
|
### 1. Databas (PostgreSQL + PostGIS)
|
||
|
|
- **Schema:** `schema.sql`
|
||
|
|
- **Tabeller:**
|
||
|
|
- `zoomers` — Zoomer-profiler
|
||
|
|
- `zoomer_wallets` — Konton och Stripe Connect
|
||
|
|
- `token_transactions` — Oföränderlig ledger
|
||
|
|
- `mission_pricing` — Prissättning per mission-typ
|
||
|
|
- `payout_schedules` — Veckovis utbetalningsschema
|
||
|
|
- `payout_executions` — Utförda utbetalningar
|
||
|
|
- `customer_topups` — Kundköp av tokens
|
||
|
|
|
||
|
|
### 2. API Server (Node.js + Express)
|
||
|
|
- **Fil:** `api/server.js`
|
||
|
|
- **Endpoints:**
|
||
|
|
- `POST /api/v1/wallets` — Skapa wallet
|
||
|
|
- `GET /api/v1/wallets/:zoomer_id` — Hämta saldo
|
||
|
|
- `POST /api/v1/transactions/mission-reward` — Token reward
|
||
|
|
- `GET /api/v1/transactions/:zoomer_id` — Transaktionshistorik
|
||
|
|
- `GET /api/v1/pricing/:mission_type` — Hämta pris
|
||
|
|
- `POST /api/v1/payouts/execute` — Utför payout
|
||
|
|
- `POST /api/v1/topups` — Kund top-up
|
||
|
|
- `POST /api/v1/webhooks/stripe` — Stripe webhooks
|
||
|
|
|
||
|
|
### 3. Payout Cron
|
||
|
|
- **Fil:** `cron/payout-cron.js`
|
||
|
|
- **Kör:** Varje måndag 09:00 UTC
|
||
|
|
- **Funktion:** Hämtar alla zoomers med saldo ≥ minimum och utför Stripe Transfer
|
||
|
|
|
||
|
|
## Test-flöde
|
||
|
|
|
||
|
|
### Steg 1: Zoomer registrering
|
||
|
|
```bash
|
||
|
|
curl -X POST http://localhost:8080/api/v1/wallets \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{
|
||
|
|
"zoomer_id": "550e8400-e29b-41d4-a716-446655440000",
|
||
|
|
"stripe_connect_account_id": "acct_test_xxx"
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
### Steg 2: ID-verifiering
|
||
|
|
- Zoomer laddar upp ID-dokument
|
||
|
|
- System verifierar identitet
|
||
|
|
- Status ändras till `active`
|
||
|
|
|
||
|
|
### Steg 3: Skapa mission
|
||
|
|
```bash
|
||
|
|
curl -X POST http://localhost:8080/api/v1/pricing \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{
|
||
|
|
"mission_type": "verify",
|
||
|
|
"base_price_usd": 2.50,
|
||
|
|
"country_code": "SE",
|
||
|
|
"city": "Stockholm"
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
### Steg 4: Ta uppdrag
|
||
|
|
- Zoomer öppnar app
|
||
|
|
- Väljer tillgängligt uppdrag
|
||
|
|
- System tilldelar mission
|
||
|
|
|
||
|
|
### Steg 5: Genomför uppdrag
|
||
|
|
- Zoomer fotograferar objekt
|
||
|
|
- GPS, sensorer, video sparas
|
||
|
|
- Submission skickas till server
|
||
|
|
|
||
|
|
### Steg 6: AI-analys
|
||
|
|
```
|
||
|
|
AI analyserar:
|
||
|
|
- Objektdetektion
|
||
|
|
- Kvalitetsbedömning
|
||
|
|
- GPS-validering
|
||
|
|
- Liveness-check
|
||
|
|
```
|
||
|
|
|
||
|
|
### Steg 7: Godkännande
|
||
|
|
- AI godkänner (confidence ≥ 85%)
|
||
|
|
- Status: `validated`
|
||
|
|
|
||
|
|
### Steg 8: Token reward
|
||
|
|
```bash
|
||
|
|
curl -X POST http://localhost:8080/api/v1/transactions/mission-reward \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{
|
||
|
|
"zoomer_id": "550e8400-e29b-41d4-a716-446655440000",
|
||
|
|
"mission_id": "550e8400-e29b-41d4-a716-446655440002",
|
||
|
|
"observation_id": "550e8400-e29b-41d4-a716-446655440003",
|
||
|
|
"amount_qz_token": 2.5,
|
||
|
|
"description": "Mission reward for verify street_lamp_001"
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
**Resultat:**
|
||
|
|
- Transaktion skapas i ledger
|
||
|
|
- Wallet-balans uppdateras
|
||
|
|
- Zoomer ser tokens på konto
|
||
|
|
|
||
|
|
### Steg 9: Kontrollera saldo
|
||
|
|
```bash
|
||
|
|
curl http://localhost:8080/api/v1/wallets/550e8400-e29b-41d4-a716-446655440000
|
||
|
|
```
|
||
|
|
|
||
|
|
**Förväntat svar:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"success": true,
|
||
|
|
"wallet": {
|
||
|
|
"zoomer_id": "550e8400-e29b-41d4-a716-446655440000",
|
||
|
|
"balance_qz_token": 2.5,
|
||
|
|
"balance_pending_qz_token": 0,
|
||
|
|
"total_balance": 2.5,
|
||
|
|
"stripe_connect_status": "active",
|
||
|
|
"payout_schedule": "weekly_monday"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Steg 10: Payout (måndag)
|
||
|
|
```bash
|
||
|
|
curl -X POST http://localhost:8080/api/v1/payouts/execute \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{
|
||
|
|
"zoomer_id": "550e8400-e29b-41d4-a716-446655440000"
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
**Resultat:**
|
||
|
|
- Stripe Transfer skapas
|
||
|
|
- Tokens "bränns" från wallet
|
||
|
|
- USD överförs till Zoomers bankkonto
|
||
|
|
|
||
|
|
## Kör testet
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Starta systemet
|
||
|
|
cd quixzoom-token-system
|
||
|
|
docker-compose up -d
|
||
|
|
|
||
|
|
# 2. Vänta på att databasen startar
|
||
|
|
sleep 10
|
||
|
|
|
||
|
|
# 3. Kör flödestest
|
||
|
|
node test/flow-test.js
|
||
|
|
|
||
|
|
# 4. Kontrollera resultat
|
||
|
|
curl http://localhost:8080/api/v1/wallets/550e8400-e29b-41d4-a716-446655440000
|
||
|
|
```
|
||
|
|
|
||
|
|
## Förväntat resultat
|
||
|
|
|
||
|
|
```
|
||
|
|
🚀 Startar quiXzoom Token-flödestest
|
||
|
|
|
||
|
|
📱 STEG 1: Skapa Zoomer-konto
|
||
|
|
✅ Zoomer skapad: 550e8400-e29b-41d4-a716-446655440000
|
||
|
|
|
||
|
|
🆔 STEG 2: ID-verifiering
|
||
|
|
✅ ID verifierad
|
||
|
|
|
||
|
|
💰 STEG 3: Skapa wallet
|
||
|
|
✅ Wallet skapad: [wallet-id]
|
||
|
|
|
||
|
|
📋 STEG 4: Skapa mission
|
||
|
|
✅ Mission skapad: 550e8400-e29b-41d4-a716-446655440002
|
||
|
|
|
||
|
|
🎯 STEG 5: Ta uppdrag
|
||
|
|
✅ Uppdrag tilldelat
|
||
|
|
|
||
|
|
📸 STEG 6: Genomför uppdrag
|
||
|
|
✅ Uppdrag genomfört: [observation-id]
|
||
|
|
|
||
|
|
🤖 STEG 7: AI-analys
|
||
|
|
✅ AI-analys klar: 95% confidence
|
||
|
|
|
||
|
|
✅ STEG 8: Godkänn uppdrag
|
||
|
|
✅ Uppdrag godkänt: approved
|
||
|
|
|
||
|
|
💎 STEG 9: Token reward
|
||
|
|
✅ Reward skapad: 2.5 QZ TOKEN
|
||
|
|
|
||
|
|
💳 STEG 10: Kontrollera saldo
|
||
|
|
✅ Saldo: 2.5 QZ TOKEN ($2.50)
|
||
|
|
|
||
|
|
💸 STEG 11: Simulera payout
|
||
|
|
✅ Payout: 2.5 QZ TOKEN ($2.50)
|
||
|
|
|
||
|
|
🎉 ALLA STEG KLARA!
|
||
|
|
```
|
||
|
|
|
||
|
|
## Säkerhet
|
||
|
|
|
||
|
|
- **Oföränderlig ledger:** Transaktioner kan inte ändras eller tas bort
|
||
|
|
- **Ed25519-signering:** Varje transaktion signeras digitalt
|
||
|
|
- **Stripe Connect:** Säkra utbetalningar via Stripe
|
||
|
|
- **Audit trail:** Full spårbarhet för alla transaktioner
|
||
|
|
|
||
|
|
## Nästa steg
|
||
|
|
|
||
|
|
1. [ ] Integrera med quiXzoom-app
|
||
|
|
2. [ ] Implementera riktig AI-analys
|
||
|
|
3. [ ] Stripe Connect onboarding
|
||
|
|
4. [ ] Produktionsdeployment
|
||
|
|
5. [ ] Övervakning och alerting
|