summaryrefslogtreecommitdiff
path: root/docs/ARCHITECTURE.md
blob: 935f59670067198a93344353b73291c0ab832abd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Architecture Sovrabase API

Ce document décrit l'architecture des dossiers et fichiers pour l'API Sovrabase.

## Structure générale

```
sovrabase/
├── cmd/                    # Points d'entrée de l'application
│   └── server/            # Serveur principal
├── internal/              # Code interne (non exporté)
│   ├── api/              # Gestion des API
│   │   ├── handlers/     # Handlers HTTP
│   │   └── routes/       # Définition des routes
│   ├── config/           # Configuration de l'application
│   ├── database/         # Connexion et gestion base de données (PostgreSQL, Redis...)
│   ├── middleware/       # Middlewares personnalisés
│   ├── models/           # Structures de données
│   │   ├── organization/ # Modèles liés aux organisations
│   │   ├── project/      # Modèles liés aux projets
│   │   └── user/         # Modèles liés aux utilisateurs
│   └── services/         # Logique métier
│       ├── auth/         # Service d'authentification
│       ├── project/      # Service de gestion des projets
│       └── user/         # Service de gestion des utilisateurs
├── pkg/                  # Code réutilisable (exporté)
├── migrations/           # Scripts de migration base de données
├── scripts/              # Scripts utilitaires
├── docs/                 # Documentation
└── tests/                # Tests unitaires et d'intégration
```

## Conventions

### Organisation du code

- **`cmd/`** : Contient les points d'entrée principaux (ex: `cmd/server/main.go`)
- **`internal/`** : Code privé au projet, non importable depuis l'extérieur
- **`pkg/`** : Code réutilisable et exportable

### Séparation des responsabilités

- **Handlers** (`internal/api/handlers/`) : Gestion des requêtes HTTP
- **Routes** (`internal/api/routes/`) : Définition et organisation des routes
- **Services** (`internal/services/`) : Logique métier
- **Models** (`internal/models/`) : Structures de données et validation
- **Middleware** (`internal/middleware/`) : Fonctionnalités transversales (auth, logging, etc.)

### Nommage

- Fichiers : `snake_case.go` (ex: `user_handler.go`)
- Packages : `lowercase` (ex: `user`, `auth`)
- Structs : `PascalCase` (ex: `User`, `Project`)
- Fonctions exportées : `PascalCase`
- Fonctions privées : `camelCase`

## Points d'entrée

- **`cmd/server/main.go`** : Point d'entrée principal du serveur API

## Dépendances externes

Les dépendances Go seront gérées via `go.mod` et incluront :
- Framework HTTP (Gin, Echo, ou net/http standard)
- ORM/Database driver (GORM, sqlx, etc.)
- JWT, Redis, etc.

## Tests

- Tests unitaires dans le même package que le code testé
- Tests d'intégration dans `tests/`
- Convention de nommage : `*_test.go`