veza/docs/ONBOARDING.md

277 lines
7.7 KiB
Markdown

# Developer Onboarding Guide — Veza Monorepo
This guide helps new developers set up the Veza monorepo and understand its architecture, conventions, and workflows.
---
## 1. Prerequisites
| Tool | Version | Purpose |
|------|---------|---------|
| **Node.js** | 18+ | Frontend (React, Vite) |
| **Go** | 1.23+ | Backend API |
| **Rust** | 2021 edition | Chat server, Stream server |
| **Docker** | 24+ | PostgreSQL, Redis, RabbitMQ, ClamAV, Backend, Chat, Stream |
| **PostgreSQL** | 12+ | Primary database |
| **Redis** | 7+ | Cache, sessions, rate limiting |
| **RabbitMQ** | 3+ | Async events |
| **Git** | 2.30+ | Version control |
| **Make** | GNU Make | Build automation |
### Optional (for hot reload)
- **air** — Go hot reload: `go install github.com/air-verse/air@latest`
- **cargo-watch** — Rust hot reload: `cargo install cargo-watch`
---
## 2. Setup in 5 Minutes (target: <30 min clone → first test passing)
### Quick start (minimal: Backend + Web)
```bash
# 1. Clone the repo
git clone https://github.com/veza/veza.git
cd veza
# 2. First-time setup: install deps + start infra + run migrations
make setup-dev
# 3. Start backend + web (frontend)
make dev
```
### Verify your setup (<30 min total)
Run these commands to confirm everything works:
```bash
# Backend tests (from repo root)
make test-backend-api
# Frontend tests
make test-web
```
If both pass, your environment is ready. Troubleshooting: see [§6](#6-troubleshooting).
Or step by step:
```bash
make setup # Install dependencies (Go, Rust, npm)
make infra-up # Start PostgreSQL, Redis, RabbitMQ
make db-migrate # Run migrations
make dev # Start backend + web
```
- **Backend API**: http://veza.fr:18080 (or http://localhost:18080)
- **Web**: http://veza.fr:5173 (or http://localhost:5173)
### Full setup (with Chat + Stream servers)
**Option A — Local Rust servers + Backend in Docker**
```bash
make infra-up
make db-migrate
make dev-full
```
**Option B — Full stack v0.101 (all services in Docker)**
```bash
make infra-up # Starts Postgres, Redis, RabbitMQ, ClamAV, Backend, Chat, Stream
make db-migrate # Run migrations
make dev-web # Start frontend locally (Vite)
```
- **Backend API**: http://localhost:18080
- **Chat Server**: http://localhost:18081 (WebSocket)
- **Stream Server**: http://localhost:18082 (HLS)
- **Web**: http://localhost:5173
### Environment
Create `veza/.env` to override defaults (see `make/config.mk`):
```bash
# Example overrides
APP_DOMAIN=localhost
PORT_backend-api=8080
PORT_web=5173
DB_USER=veza
DB_PASS=your-secure-password
DB_PORT=15432
```
Backend-specific env: copy `veza-backend-api/.env.example` to `veza-backend-api/.env` and set:
- `DATABASE_URL` — PostgreSQL connection string
- `JWT_SECRET` — min 32 characters
- `APP_ENV``development`, `staging`, or `production`
---
## 3. Architecture
### Data flow
```
Browser → HAProxy (port 80/443) [prod] or direct (dev)
├── /api/* → Backend Go (port 8080)
│ ├── PostgreSQL (port 5432) — main data
│ ├── Redis (port 6379) — sessions, cache, rate limiting
│ ├── RabbitMQ (port 5672) — async events
│ └── ClamAV (port 3310) — virus scanning
├── /ws → Chat Server Rust (port 3000)
│ ├── PostgreSQL — messages
│ └── Redis — pub/sub, rate limiting
├── /stream → Stream Server Rust (port 3001)
│ ├── PostgreSQL — metadata
│ └── Redis — cache
└── /* → Frontend SPA (port 5173)
```
### Project structure
```
veza/
├── apps/web/ # React + Vite frontend (single source of truth for UI)
├── veza-backend-api/ # Go API (Gin, GORM)
├── veza-chat-server/ # Rust WebSocket chat
├── veza-stream-server/ # Rust audio streaming (HLS, WebRTC)
├── veza-common/ # Shared Rust library
├── packages/ # NPM shared packages
├── config/ # HAProxy, Prometheus
├── k8s/ # Kubernetes manifests
├── migrations/ # SQL migrations
├── loadtests/ # k6 load tests
├── make/ # Makefile modules
└── docs/ # Documentation
```
---
## 4. Conventions
| Resource | Location |
|----------|----------|
| **UI rules** | [.cursorrules](.cursorrules) — Tailwind, Storybook, layout |
| **Design tokens** | [apps/web/docs/DESIGN_TOKENS.md](apps/web/docs/DESIGN_TOKENS.md) |
| **Backend contributing** | [veza-backend-api/CONTRIBUTING.md](veza-backend-api/CONTRIBUTING.md) |
| **Backend patterns** | [veza-backend-api/README.md](veza-backend-api/README.md) — core vs handlers |
| **Storybook contract** | [apps/web/docs/STORYBOOK_CONTRACT.md](apps/web/docs/STORYBOOK_CONTRACT.md) |
| **Full layout page** | [apps/web/docs/FULL_LAYOUT_PAGE.md](apps/web/docs/FULL_LAYOUT_PAGE.md) |
---
## 5. Useful Commands
### From repo root
| Command | Description |
|---------|-------------|
| `make help` | Show all targets |
| `make infra-up` | Start Docker infra (Postgres, Redis, RabbitMQ) |
| `make infra-down` | Stop infra |
| `make db-migrate` | Run migrations |
| `make dev` | Backend + Web (no Chat/Stream) |
| `make dev-full` | All services |
| `make dev-web` | Web only |
| `make dev-backend-api` | Go backend only |
| `make test` | Run all tests |
| `make test-web` | Test frontend only |
| `make test-backend-api` | Test backend only |
| `make lint` | Lint everything |
| `make load-test-smoke` | k6 smoke test |
### Per service
| Service | Build | Test | Lint |
|---------|-------|------|------|
| Web | `make build-web` | `make test-web` | `make lint-web` |
| Backend API | `make build-backend-api` | `make test-backend-api` | `make lint-backend-api` |
| Chat Server | `make build-chat-server` | `make test-chat-server` | `make lint-chat-server` |
| Stream Server | `make build-stream-server` | `make test-stream-server` | `make lint-stream-server` |
### Frontend (from apps/web)
```bash
cd apps/web
npm run dev # Dev server
npm run build # Production build
npm run test -- --run
npm run lint
npm run storybook # UI docs
npm run visual:capture
npm run visual:compare
```
### Backend (from veza-backend-api)
```bash
cd veza-backend-api
go build ./...
go test ./... -short
make lint
```
---
## 6. Troubleshooting
### Port 8080 already in use
Override ports in `.env`:
```bash
PORT_backend-api=18080
PORT_web=5173
```
### Database connection refused
1. Ensure infra is up: `make infra-up`
2. Check `DATABASE_URL` in `veza-backend-api/.env` and use host `localhost` with port `15432` (or `DB_PORT` from config)
3. Ensure ports match: `make/config.mk` uses `PORT_POSTGRES ?= 15432`
### Redis / RabbitMQ unavailable
`make infra-up` starts Postgres, Redis, RabbitMQ. If one fails, check:
```bash
docker compose -f docker-compose.yml ps
```
### Rust servers fail to compile
```bash
cd veza-chat-server && cargo build --release
cd veza-stream-server && cargo build --release
```
If `veza-common` has issues, ensure it's built first:
```bash
cd veza-common && cargo build
```
### Frontend tests fail
- Ensure MSW is not blocking: `VITE_USE_MSW=0` by default
- Run with `npm run test -- --run` from `apps/web/`
### Migrations fail
- Backend: `cd veza-backend-api && go run cmd/migrate_tool/main.go up`
- Chat: `cd veza-chat-server && sqlx migrate run`
- Stream: `cd veza-stream-server && sqlx migrate run`
---
## See also
- [README](../README.md) — Quick start
- [veza-backend-api/README.md](../veza-backend-api/README.md) — API structure
- [loadtests/README.md](../loadtests/README.md) — Load testing
- [archive/AUDIT_TECHNIQUE_INTEGRAL_2026_02_15.md](archive/AUDIT_TECHNIQUE_INTEGRAL_2026_02_15.md) — Technical audit