124 lines
3.8 KiB
Markdown
124 lines
3.8 KiB
Markdown
# Sase
|
||
|
||
VIN/şase numarası sorgulama ve otomotiv yedek parça katalog platformu (Türkiye).
|
||
**Site:** https://sase.tr · **Staging:** https://dev.sase.tr
|
||
|
||
---
|
||
|
||
## Stack
|
||
|
||
| Katman | Teknoloji |
|
||
|---|---|
|
||
| Monorepo | pnpm 10 + Turborepo |
|
||
| Backend | NestJS 10, TypeScript 5.7, Node 22 |
|
||
| DB | PostgreSQL 17 + Drizzle ORM |
|
||
| Cache / Queue | Redis 7 + BullMQ |
|
||
| Auth | Better Auth (cookie session) |
|
||
| Frontend | Vite 6, React 19, TanStack Router + Query |
|
||
| UI | Tailwind v4, shadcn/ui (Radix) |
|
||
| Ödeme | Stripe (kart) + EFT |
|
||
| Email | Postal |
|
||
| Storage | MinIO (S3) |
|
||
| Analitik | PostHog |
|
||
| Test | Vitest, Playwright |
|
||
| Deploy | GitHub Actions → SSH → PM2 |
|
||
|
||
---
|
||
|
||
## Yapı
|
||
|
||
```
|
||
ss/
|
||
├── apps/
|
||
│ ├── api/ NestJS (port 4000, /api)
|
||
│ └── web/ Vite + React (port 3000)
|
||
├── packages/
|
||
│ ├── shared/ Tipler, Zod şemaları
|
||
│ ├── config/ Env şeması (Zod)
|
||
│ └── ui/ Paylaşılan shadcn bileşenleri
|
||
├── docker/ docker-compose + nginx
|
||
├── scripts/ Deploy + bakım scriptleri
|
||
└── docs/ Detay dökümantasyon (INDEX.md)
|
||
```
|
||
|
||
---
|
||
|
||
## Komutlar
|
||
|
||
```bash
|
||
pnpm dev # tüm app'ler (Turbo)
|
||
pnpm build
|
||
pnpm test # Vitest
|
||
pnpm lint # Biome
|
||
pnpm typecheck
|
||
|
||
# DB (apps/api/)
|
||
pnpm db:push # şemayı push
|
||
pnpm db:studio # Drizzle Studio
|
||
pnpm db:generate # migration üret
|
||
|
||
# Tek app
|
||
pnpm dev --filter=api
|
||
pnpm dev --filter=web
|
||
```
|
||
|
||
---
|
||
|
||
## VIN Decode Akışı
|
||
|
||
```
|
||
Corgi (offline WMI) → PartsCatalogs API → PL24 API → EMEX scraper → NHTSA
|
||
```
|
||
|
||
Birden fazla araç eşleşmesi gelirse frontend seçim modalı gösterir.
|
||
|
||
---
|
||
|
||
## Katalog Mimarisi
|
||
|
||
- **PL24 P5 Modern** (REST/JSON) — VW Group, BMW, Mercedes, Renault, Toyota...
|
||
- **PL24 P4 Legacy** (HTML scrape) — Ford, PSA, Hyundai/Kia, Nissan, Opel, Volvo
|
||
- **PartsCatalogs** (REST + Playwright JWT) — geniş VIN kapsamı
|
||
- **EMEX** (Playwright scrape, `emexdwc.ae`) — async BullMQ worker
|
||
|
||
---
|
||
|
||
## EMEX & PartsCatalogs Türkçeleştirme
|
||
|
||
EMEX ve PartsCatalogs kaynakları kategori/parça isimlerini İngilizce (zaman zaman Rusça) döner. Çeviri akışı:
|
||
|
||
1. **`TranslationsService`** (`apps/api/src/translations/`) — Redis cache → DB lookup (`emex_category_translations`) → orijinal döndür. Dictionary tabanlı word-by-word replace **devre dışı** (yarı-İngilizce çıktı yaratıyordu).
|
||
2. **Hot path** (`categories.service.ts`) — EMEX/PCAT insert noktalarında `translateMany()` ile bulk lookup yapılır; cache miss varsa orijinal yazılır, sonraki bootstrap pass'inde LLM ile çevrilir.
|
||
3. **Bootstrap script** (`scripts/emex-translate-bootstrap.ts`) — DB'deki tüm unique `name_original` değerlerini OpenRouter üzerinden DeepSeek V3 ile çevirir, `emex_category_translations` tablosuna yazar.
|
||
4. **Backfill script** (`scripts/emex-backfill-tr-names.ts`) — translation tablosuna göre mevcut `categories.name` ve `parts.name` değerlerini günceller, Redis cache flush eder.
|
||
|
||
```bash
|
||
# 1) Tüm yeni terimleri çevir (~$0.50, ~30 dk)
|
||
pnpm exec tsx scripts/emex-translate-bootstrap.ts --dry-run
|
||
pnpm exec tsx scripts/emex-translate-bootstrap.ts
|
||
|
||
# 2) DB kayıtlarını güncelle
|
||
pnpm exec tsx scripts/emex-backfill-tr-names.ts --dry-run
|
||
pnpm exec tsx scripts/emex-backfill-tr-names.ts
|
||
|
||
# 3) API restart (yeni hot-path translateMany için)
|
||
pm2 restart sase-api
|
||
```
|
||
|
||
**Env:** `OPENROUTER_API_KEY` (`apps/api/.env`).
|
||
|
||
---
|
||
|
||
## Test Bilgileri
|
||
|
||
- Admin: `admin@sase.tr` / `Sase2026`
|
||
- Test VIN (VW): `WVWZZZ1JZ3W597935`
|
||
- Login: `POST /api/auth/sign-in/email` → cookie `better-auth.session_token`
|
||
|
||
---
|
||
|
||
## Daha Fazla
|
||
|
||
- `docs/INDEX.md` — kapsamlı proje rehberi (rotalar, API, DB şeması, bileşenler)
|
||
- `CLAUDE.md` — Claude Code için proje rehberi
|