Nouveaux services:
- sogoms-logs : logging centralisé avec rotation
- sogoms-smtp : envoi emails avec templates YAML
Nouvelles fonctionnalités:
- Queries YAML externalisées (config/queries/{app}/)
- CRUD générique paramétrable
- Filtres par rôle (default, admin)
- Templates email (config/emails/{app}/)
Documentation:
- DOCTECH.md : documentation technique complète
- README.md : vision et roadmap
- TODO.md : phases 11-15 planifiées
Roadmap:
- Phase 11: sogoms-crypt (chiffrement)
- Phase 12: sogoms-imap/mailproc (emails)
- Phase 13: sogoms-cron (tâches planifiées)
- Phase 14: sogoms-push (MQTT temps réel)
- Phase 15: sogoms-schema (API auto-générée)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9.6 KiB
Executable File
9.6 KiB
Executable File
TODO - SOGOMS V1 Minimale
Objectif : valider l'architecture avec 2-3 microservices basiques.
Phase 0 : Infrastructure
- Container gw3 : Alpine sur IN3 (13.23.33.5)
- Config Prokov : routes + scénarios YAML (auth, projects, tasks, tags, statuses)
- Nginx host IN3 : routing /api/ → gw3:8080, / → dva-front
Phase 1 : Protocole IPC
internal/protocol/message.go: structs Request/Response JSONinternal/protocol/server.go: listener Unix socketinternal/protocol/client.go: client pour appeler les services
Phase 2 : Microservice DB
cmd/sogoms/db/main.go: point d'entrée- Connexion MariaDB (pool par application)
- Action
query: SELECT multi-résultats - Action
query_one: SELECT un résultat - Action
insert: INSERT retourne insert_id - Action
update: UPDATE retourne affected_rows - Action
delete: DELETE retourne affected_rows - Écoute sur
/run/sogoms-db.1.sock - Test standalone sogoms-db
Phase 3 : Config
internal/config/config.go: lecture YAML + registry par hostinternal/config/routes.go: parser routes (intégré dans config.go)
Phase 4 : Gateway HTTP
cmd/sogoway/main.go: serveur HTTP :8080- Routing par host → charge le bon fichier routes (prokov.yaml)
internal/auth/jwt.go: génération + validation JWT (HS256)internal/auth/password.go: hash + verify password (bcrypt)- Endpoint
POST /api/auth/login: vérifie credentials, retourne JWT - Endpoint
GET /api/auth/me: valide JWT, retourne user - Endpoint
POST /api/auth/register: crée user, retourne JWT - Communication avec sogoms-db via Unix socket
- Test standalone sogoway
Phase 5 : Superviseur
cmd/sogoctl/main.go: point d'entrée- Config
config/sogoctl.yaml: services à lancer - Lancement sogoms-db + sogoway (avec dépendances)
- Health check (socket + HTTP)
- Redémarrage automatique si crash
Phase 6 : Test de validation
# 1. Lancer sogoctl (démarre les services)
./sogoctl
# 2. Login
curl -X POST https://prokov.unikoffice.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"secret"}'
# → {"success":true,"data":{"token":"eyJ...","user":{...}}}
# 3. Vérifier le token
curl https://prokov.unikoffice.com/api/auth/me \
-H "Authorization: Bearer eyJ..."
# → {"success":true,"data":{"user":{...}}}
- Test login OK
- Test /me avec token valide OK
- Test /me sans token → 401
Phase 7 : Microservice Logs
cmd/sogoms/logs/main.go: point d'entrée- Écoute sur Unix socket
/run/sogoms-logs.1.sock - Actions
log_error,log_event: écriture dans fichiers - Format fichiers :
/var/log/sogoms/{app}-{YYYYMMDD}-{type}.log - Rotation automatique : suppression des fichiers > 30 jours
- Paramètre
retention_daysdans config (config/routes/prokov.yaml) - Intégration avec sogoway et sogoms-db
Phase 8 : Système de Queries YAML
- Structure
config/queries/{app}/*.yaml - Requêtes SQL externalisées (pas de recompilation)
internal/config/config.go: QueryConfig, GetQuery(), Build()- Placeholders
:user_id,:id, etc. - Filtres par rôle (default, admin)
- Login enrichi : charge projects, tasks, tags, statuses
Phase 9 : CRUD Générique
- Routing
/api/{resource}dans sogoway - GET list/show avec filtres YAML
- POST create avec fields YAML
- PUT update avec fields + filtres YAML
- DELETE avec filtres YAML
- Config YAML pour projects, tasks, tags, statuses
- Sécurité : filtre user_id automatique
Phase 10 : Améliorations Deploy
deploy.sh: build sogoms-logsdeploy.sh: backup archives dans/home/pierre/samba/back/sogoms/deploy.sh: redémarrage auto sogoctldeploy.sh: kill propre des processus zombies- Documentation
DOCTECH.md - Version 1.0.1
Phase 11 : Microservice Crypt
cmd/sogoms/crypt/main.go: point d'entrée- Écoute sur Unix socket
/run/sogoms-crypt.1.sock - Action
encrypt: chiffre une donnée (AES-256-GCM) - Action
decrypt: déchiffre une donnée - Action
hash: hash irréversible (SHA-256) - Clé de chiffrement par application (
/secrets/{app}_crypt_key) - Intégration avec sogoway pour champs sensibles
- Config YAML : liste des champs à chiffrer par table
- Application Prokov : chiffrement
users.email
Phase 12 : Microservices Email
12a. sogoms-smtp (Envoi)
cmd/sogoms/smtp/main.go: point d'entrée- Écoute sur Unix socket
/run/sogoms-smtp.1.sock - Action
send: envoi email simple (to, subject, body, html) - Action
send_template: envoi avec template YAML - Action
send_bulk: envoi en masse (liste de destinataires) - Config SMTP par application (
config/routes/{app}.yaml) - Support TLS/STARTTLS
- Templates YAML (
config/emails/{app}/*.yaml) - Queue d'envoi avec retry en cas d'échec
12b. sogoms-imap (Lecture)
cmd/sogoms/imap/main.go: point d'entrée- Écoute sur Unix socket
/run/sogoms-imap.1.sock - Action
list: liste les emails (folder, limit, offset) - Action
fetch: récupère un email complet (uid) - Action
delete: supprime un email - Action
mark_read: marque comme lu - Action
move: déplace vers un autre dossier - Config IMAP par application (
config/routes/{app}.yaml) - Support IMAP IDLE pour notifications temps réel
12c. sogoms-mailproc (Traitement)
cmd/sogoms/mailproc/main.go: point d'entrée- Écoute sur Unix socket
/run/sogoms-mailproc.1.sock - Action
parse: parse un email (headers, body, attachments) - Action
apply_rules: applique des règles configurées - Config YAML : règles par application (
config/mailrules/{app}.yaml) - Webhooks : notification vers URL externe
- Intégration Prokov : email entrant → création de tâche
Phase 13 : Microservice Cron
cmd/sogoms/cron/main.go: point d'entrée- Écoute sur Unix socket
/run/sogoms-cron.1.sock - Config YAML par application (
config/cron/{app}.yaml) - Parser cron schedule (format standard
* * * * *) - Action
list: liste les jobs configurés - Action
trigger: déclenche un job manuellement - Action
status: statut des dernières exécutions - Type
service: appel service interne (sogoms-smtp, sogoms-db, etc.) - Type
http: appel HTTP (GET/POST) vers endpoint interne ou externe - Type
query_email: requête DB + envoi email avec résultat - Logging des exécutions dans sogoms-logs
- Application Prokov : email quotidien
tasks_today
Phase 14 : Push Temps Réel (MQTT)
14a. Infrastructure Mosquitto
- Installation Mosquitto sur gw3 (Alpine:
apk add mosquitto) - Config
/etc/mosquitto/mosquitto.conf - Auth par user/password ou plugin JWT
- Port 1883 (MQTT) + 9001 (WebSocket)
- TLS optionnel pour production
14b. sogoms-push
cmd/sogoms/push/main.go: point d'entrée- Écoute sur Unix socket
/run/sogoms-push.1.sock - Connexion au broker MQTT
- Config YAML par application (
config/push/{app}.yaml) - Action
publish: publie un message sur un topic - Action
notify_user: publie vers{app}/user/{user_id}/{channel} - Action
broadcast: publie vers tous les users d'une app - Topics : notifications, tasks, projects, comments
- Intégration sogoway : publish auto sur événements CRUD
14c. Intégration Flutter
- Package
mqtt_clientdans Prokov Flutter - Service MqttService : connexion, reconnexion auto
- Subscription aux topics user
- Mise à jour state en temps réel
- Notifications in-app
Phase 15 : Schema-Driven API (Socle SOGOMS)
Cette phase transforme SOGOMS en générateur d'API automatique.
15a. Définition du Schema
- Format
config/schema/{app}.yaml: tables, fields, relations - Types supportés : int, string, text, bool, date, datetime, json
- Contraintes : primary, auto, unique, required, default
- Relations : foreign key avec
foreign: table.field - Sécurité :
filter: ownerpour filtrage auto par user_id - Auth :
auth: login,auth: passwordpour détection auto - CRUD : liste des opérations autorisées par table
- Filtres custom : définition de filtres nommés
15b. sogoms-schema (Générateur)
cmd/sogoms/schema/main.go: outil CLI- Commande
generate {app}: génère queries YAML depuis schema - Commande
validate {app}: valide le schema - Commande
diff {app}: compare schema vs DB réelle - Commande
migrate {app}: génère SQL de migration - Commande
init {app}: crée schema depuis DB existante (reverse)
15c. Runtime Dynamique (sogoway)
- Chargement schema au démarrage
- Routes CRUD auto-générées depuis schema
- Validation des inputs selon types/contraintes
- Filtrage user_id automatique (filter: owner)
- Gestion relations (include, nested)
- Pas de fichiers queries YAML requis (optionnels pour override)
15d. Dictionnaire de Données
- Endpoint
/api/_schema: expose le schema (pour admin/debug) - Endpoint
/api/_schema/{table}: détail d'une table - Documentation auto-générée
- Utilisable par Flutter pour génération de formulaires
Hors scope V1
- sogorch (orchestrateur scénarios)
- sogoms-pdf, sogoms-storage
- Multi-tenant avancé (workspaces, partage)
- Rate limiting
- Rôles utilisateurs (admin, manager, user)