Architecture
Vue d'ensemble de l'architecture technique d'Échoppe.
Monorepo
Le projet utilise un monorepo Bun avec la structure suivante :
echoppe/
├── apps/
│ ├── api/ # API REST (Elysia)
│ ├── admin/ # Dashboard (Vue 3)
│ └── store/ # Exemple de boutique (Astro)
├── packages/
│ ├── core/ # Base de données, schemas, migrations, utils
│ ├── shared/ # Types partagés
│ ├── client/ # SDK @echoppe/client (npm)
│ └── create-echoppe/ # CLI de scaffolding (npm)
└── docs/ # Documentation (VitePress)Stack technique
API (apps/api)
| Technologie | Usage |
|---|---|
| Bun | Runtime JavaScript |
| Elysia | Framework web |
| Drizzle ORM | ORM type-safe |
| PostgreSQL | Base de données |
| Redis | Cache / rate-limit distribué (optionnel) |
Admin (apps/admin)
| Technologie | Usage |
|---|---|
| Vue 3 | Framework UI |
| Vite | Build tool |
| Tailwind CSS 4 | Styling |
| Eden | Client API type-safe |
Store (apps/store)
Exemple de boutique — non distribué en image ; sert de base au scaffolding create-echoppe.
| Technologie | Usage |
|---|---|
| Astro | Framework SSR (adapter Node) |
| @echoppe/client | SDK API typé |
| Tailwind CSS 4 | Styling |
Flux de données
┌─────────┐ ┌─────────┐ ┌──────────────┐
│ Admin │────▶│ API │◀────│ Store │
│ (Vue 3) │ │(Elysia) │ │ (Astro) │
└─────────┘ └────┬────┘ └──────────────┘
│
┌──────┴───────┐
│ │
┌────▼─────┐ ┌─────▼──────────┐
│PostgreSQL│ │ Redis (option) │
└──────────┘ └────────────────┘Packages partagés
@echoppe/core
- Schemas Drizzle (tables, relations)
- Connexion base de données
- Utilitaires (slugify, formatters)
- Constantes (permissions, statuts)
@echoppe/shared
- Types TypeScript partagés
- Interfaces API
Authentification
Deux systèmes d'authentification distincts :
Admin
- Sessions stockées en base (table
user_session) - Cookie
echoppe_admin_session(HTTP-only, Secure, SameSite=Strict) - Durée : 7 jours avec refresh
Store (Clients)
- Sessions stockées en base (table
customer_session) - Cookie
echoppe_customer_session - Durée : 7 jours avec refresh
Permissions (RBAC)
Le système de permissions utilise :
- Rôles : groupes de permissions
- Permissions : actions sur ressources (ex:
products.create) - Middleware : vérifie les permissions à chaque requête
Voir Authentification pour plus de détails.