From 4e91507158a316180c0cb24ac26b8b0a3de6eb6d Mon Sep 17 00:00:00 2001 From: matthieu Date: Sun, 15 Mar 2026 22:25:42 +0100 Subject: [PATCH] docs : rewrite README with full project documentation Co-Authored-By: Claude Opus 4.6 (1M context) --- README.md | 168 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 152 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 6cddce7..4e704fc 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,151 @@ # Lesstime -Application de gestion de projet. Symfony 8 + API Platform 4 + Nuxt 4. +Application de gestion de projet avec suivi du temps et portail client. -## MCP Server +## Stack -Lesstime expose un serveur MCP (Model Context Protocol) permettant aux assistants IA (Claude Code, ChatGPT, Codex) d'interagir avec les projets, tâches et le suivi du temps. +| Couche | Technologies | +|--------|-------------| +| **Backend** | PHP 8.4, Symfony 8, API Platform 4, Doctrine ORM | +| **Frontend** | Nuxt 4 (SPA), Vue 3, Pinia, Tailwind CSS | +| **Base de données** | PostgreSQL 16 | +| **Auth** | JWT HTTP-only cookie (lexik/jwt-authentication-bundle) | +| **Infrastructure** | Docker (PHP-FPM, Nginx, PostgreSQL) | + +## Fonctionnalités + +- Gestion de projets et tâches (kanban, groupes, priorités, tags, efforts) +- Suivi du temps (timer, calendrier, vue liste) +- Portail client avec tickets (bug, amélioration, autre) +- Gestion de documents (upload, prévisualisation, téléchargement) +- Profil utilisateur avec avatar (crop circulaire) +- Notifications temps réel +- Intégration Gitea (issues, repos) +- Serveur MCP pour assistants IA +- Multi-langue (i18n) + +## Prérequis + +- Docker & Docker Compose +- Git + +## Installation + +```bash +# 1. Cloner le repo +git clone && cd lesstime + +# 2. Démarrer les containers +make start + +# 3. Installation complète (composer, migrations, fixtures, build Nuxt) +make install +``` + +L'application est accessible sur **http://localhost:8082**. + +### Comptes de test (fixtures) + +| Utilisateur | Mot de passe | Rôle | Détails | +|-------------|-------------|------|---------| +| `admin` | `admin` | ROLE_ADMIN | Administrateur | +| `alice` | `alice` | ROLE_USER | Utilisateur interne | +| `bob` | `bob` | ROLE_USER | Utilisateur interne | +| `charlie` | `charlie` | ROLE_USER | Utilisateur interne | +| `client-liot` | `client` | ROLE_CLIENT | Client LIOT (projet SIRH) | +| `client-acme` | `client` | ROLE_CLIENT | Client ACME (projet CRM) | + +## Commandes + +### Docker + +```bash +make start # Démarrer les containers +make stop # Arrêter les containers +make restart # Redémarrer les containers +make shell # Shell dans le container PHP +make shell-root # Shell root dans le container PHP +``` + +### Développement + +```bash +make dev-nuxt # Dev server Nuxt (hot reload, port 3002) +make cache-clear # Vider le cache Symfony +make logs-dev # Tail logs Symfony +``` + +### Base de données + +```bash +make migration-migrate # Lancer les migrations +make fixtures # Charger les fixtures +make db-reset # Reset BDD + migrations + fixtures (⚠️ supprime les données) +``` + +### Tests & Qualité + +```bash +make test # PHPUnit +make php-cs-fixer-allow-risky # Fix code style PHP (Symfony + PSR-12) +``` + +### Installation complète + +```bash +make install # Composer + migrations + fixtures + build Nuxt +make reset # Tout supprimer et réinstaller (⚠️ supprime la BDD) +``` + +## Architecture + +``` +src/ +├── Entity/ # Entités Doctrine +├── Controller/ # Controllers custom Symfony +├── State/ # Providers et Processors API Platform +├── Service/ # Services métier +├── Security/ # Authenticators custom +├── Mcp/Tool/ # MCP tools par domaine +├── Command/ # Commandes console +├── Repository/ # Repositories Doctrine +└── DataFixtures/ # Fixtures + +frontend/ +├── pages/ # Pages Nuxt (routing auto) +├── layouts/ # Layouts (default, portal) +├── components/ # Composants Vue (ui/, task/, user/, etc.) +├── composables/ # Composables (useApi, useNotifications, etc.) +├── stores/ # Stores Pinia (auth, ui, timer) +├── services/ # Services API et DTOs +├── i18n/locales/ # Traductions +└── middleware/ # Middleware auth + +config/ # Config Symfony +migrations/ # Migrations Doctrine +docker/ # Dockerfiles et config Nginx +``` + +## Docker + +| Container | Port | Description | +|-----------|------|-------------| +| `php-lesstime-fpm` | 3002 (dev Nuxt) | PHP-FPM + Node 24 | +| `nginx-lesstime` | 8082 | Nginx reverse proxy | +| PostgreSQL | 5435 | Base de données | + +Configuration : `docker/.env.docker` (override local : `docker/.env.docker.local`) + +## API + +Toutes les routes API sont préfixées `/api` (API Platform). + +- Documentation auto-générée : **http://localhost:8082/api** +- Auth : `POST /login_check` avec `{ username, password }` → cookie JWT `BEARER` + +## Serveur MCP + +Lesstime expose un serveur MCP (Model Context Protocol) permettant aux assistants IA d'interagir avec les données. ### Tools disponibles (22) @@ -16,13 +157,6 @@ Lesstime expose un serveur MCP (Model Context Protocol) permettant aux assistant | TaskMeta | `list-statuses`, `list-priorities`, `list-efforts`, `list-tags`, `list-groups`, `create-group`, `update-group` | | TimeEntry | `list-time-entries`, `create-time-entry`, `update-time-entry`, `delete-time-entry` | -### Transports - -| Transport | Usage | Auth | -|-----------|-------|------| -| **STDIO** | Claude Code sur la machine locale | Aucune | -| **HTTP** (`/_mcp`) | Clients MCP sur le réseau local | API token (`Authorization: Bearer `) | - ### Configuration locale (STDIO) ```json @@ -55,17 +189,19 @@ Lesstime expose un serveur MCP (Model Context Protocol) permettant aux assistant ### Gestion des tokens API ```bash -# Générer un token pour un utilisateur docker exec -u www-data php-lesstime-fpm php bin/console app:generate-api-token ``` -### Mise en production (réseau local) +## Déploiement 1. Déployer le code sur le serveur 2. `composer install --no-dev --optimize-autoloader` 3. `php bin/console doctrine:migrations:migrate --no-interaction` 4. `php bin/console cache:clear --env=prod` -5. `docker restart nginx-lesstime` -6. `php bin/console app:generate-api-token admin` — noter le token -7. Ouvrir le port 8082 sur le firewall du serveur (LAN uniquement) -8. Configurer les clients MCP avec l'URL `http://:8082/_mcp` + le token +5. `cd frontend && npm install && npm run build:dist` +6. `docker restart nginx-lesstime` +7. Ouvrir le port 8082 sur le firewall (LAN uniquement) + +## Licence + +Propriétaire — Tous droits réservés.