etouch docs
Guides

Guide de developpement

Setup local, commandes, workflows de developpement et structure du projet etouch

Prerequisites

RequirementVersion
Node.js>= 20
pnpm10.4.1
PostgreSQL14+
Redis6+

Installation

1. Cloner et installer

git clone <repo-url>
cd etouch
pnpm install

2. Configuration de l'environnement

cp .env.example .env

Variables requises :

# Base de donnees
DATABASE_URL="postgresql://user:password@localhost:5432/etouch"

# Redis
REDIS_URL="redis://localhost:6379"

# Authentification
AUTH_JWT_SECRET="your-jwt-secret"
BETTER_AUTH_SECRET="your-auth-secret"

# URLs
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
NEXT_PUBLIC_API_URL="http://localhost:4000"
AUTH_BASE_URL="http://localhost:4000/api/auth"

3. Setup de la base de donnees

# Generer le client Prisma
pnpm prisma:generate

# Appliquer les migrations
pnpm prisma:migrate

# (Optionnel) Ouvrir Prisma Studio
pnpm prisma:studio

4. Lancer le developpement

# Demarrer toutes les apps
pnpm dev

# Ou des apps specifiques
pnpm --filter @etouch/web dev    # Frontend uniquement
pnpm --filter @etouch/api dev    # Backend uniquement

Ports par defaut :

Commandes disponibles

Racine du monorepo

CommandeDescription
pnpm devDemarrer toutes les apps en dev
pnpm buildBuilder tous les packages et apps
pnpm lintLinter tous les packages
pnpm testLancer tous les tests
pnpm typecheckVerification TypeScript
pnpm formatFormater avec Prettier

Base de donnees

CommandeDescription
pnpm prisma:generateGenerer le client Prisma
pnpm prisma:migrateDeployer les migrations
pnpm prisma:studioOuvrir Prisma Studio
pnpm prisma:seedPeupler la base
pnpm prisma:statusVerifier les migrations

Scripts de production

CommandeDescription
pnpm db:backupCreer un backup
pnpm db:backup:pre-deployBackup avant deploiement
pnpm db:restoreRestaurer depuis un backup
pnpm db:restore:latestRestaurer le dernier backup
pnpm db:migrate:safeMigration securisee avec backup
pnpm db:statusStatut de la base

Workers

pnpm workers:dev     # Mode developpement
pnpm workers:start   # Production

Structure du projet

etouch/
├── apps/
│   ├── api/           # Backend API
│   │   ├── src/
│   │   │   ├── graphql/   # Schema et resolvers GraphQL
│   │   │   ├── routes/    # Endpoints REST
│   │   │   ├── services/  # Logique metier
│   │   │   └── index.ts   # Point d'entree
│   │   └── package.json
│   ├── web/           # Frontend
│   │   ├── app/           # Next.js App Router
│   │   ├── components/    # Composants React
│   │   ├── hooks/         # Hooks personnalises
│   │   ├── lib/           # Utilitaires
│   │   └── package.json
│   └── docs/          # Documentation
├── packages/
│   ├── db/            # Schema Prisma
│   ├── sdk/           # SDK GraphQL
│   └── ...            # Autres packages
└── scripts/           # Scripts de build

Workflows de developpement

Ajouter une nouvelle feature

  1. Changements base de donnees (si necessaire) :

    # Editer packages/db/prisma/schema.prisma
    pnpm --filter @etouch/db db:migrate:dev --name feature_name
  2. Changements API :

    • Ajouter les types dans apps/api/src/graphql/schema.graphql
    • Ajouter les resolvers dans apps/api/src/graphql/resolvers.ts
    • Regenerer le SDK : pnpm graphql:codegen
  3. Changements frontend :

    • Utiliser les types generes depuis @etouch/sdk
    • Ajouter les composants dans apps/web/components/
    • Ajouter les pages dans apps/web/app/[locale]/

Developpement GraphQL

Apres modification de schema.graphql :

pnpm graphql:codegen

Cela regenere packages/sdk/src/graphql.generated.ts.

Tests

# Tous les tests
pnpm test

# Avec couverture
pnpm test:coverage

# Tests E2E (web app)
pnpm --filter @etouch/web test:e2e

Style de code

  • Formatage : Prettier (pnpm format)
  • Linting : ESLint avec config partagee
  • Commits : Conventional commits (via commitlint)
  • TypeScript : Mode strict active

Troubleshooting

Problemes avec Prisma Client

pnpm prisma:generate
pnpm --filter @etouch/db build

Problemes de dependances

pnpm clean
pnpm install
pnpm build

Port deja utilise

lsof -i :3000  # Web
lsof -i :4000  # API
lsof -i :3002  # Docs