Skip to content

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)

TechnologieUsage
BunRuntime JavaScript
ElysiaFramework web
Drizzle ORMORM type-safe
PostgreSQLBase de données
RedisCache / rate-limit distribué (optionnel)

Admin (apps/admin)

TechnologieUsage
Vue 3Framework UI
ViteBuild tool
Tailwind CSS 4Styling
EdenClient API type-safe

Store (apps/store)

Exemple de boutique — non distribué en image ; sert de base au scaffolding create-echoppe.

TechnologieUsage
AstroFramework SSR (adapter Node)
@echoppe/clientSDK API typé
Tailwind CSS 4Styling

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.

Publié sous licence CeCILL v2.1.