docs: add root README with stack overview + EMEX/PCAT translation pipeline
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
123
README.md
Normal file
123
README.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Sase
|
||||
|
||||
VIN/şase numarası sorgulama ve otomotiv yedek parça katalog platformu (Türkiye).
|
||||
**Site:** https://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 | Iyzico (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
|
||||
Reference in New Issue
Block a user