Matthieu d6399c20e1 fix : fix MCP create-task tool crashing on task creation
CreateTaskTool called nonexistent findMaxNumberByProject instead of
findMaxNumberByProjectForUpdate. Also removed FOR UPDATE clause from the
query as PostgreSQL does not support it with aggregate functions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 09:26:36 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00
2026-03-08 19:47:19 +01:00

Lesstime

Application de gestion de projet avec suivi du temps et portail client.

Stack

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

# 1. Cloner le repo
git clone <url> && 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

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

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

make migration-migrate  # Lancer les migrations
make fixtures           # Charger les fixtures
make db-reset           # Reset BDD + migrations + fixtures (⚠️ supprime les données)

Tests & Qualité

make test                       # PHPUnit
make php-cs-fixer-allow-risky   # Fix code style PHP (Symfony + PSR-12)

Installation complète

make install            # Composer + migrations + fixtures + build Nuxt
make reset              # Tout supprimer et réinstaller (⚠️ supprime la BDD)

Architecture

src/
├── Entity/             # Entités Doctrine
├── ApiResource/        # Ressources API Platform (découplées)
├── State/              # Providers et Processors API Platform
├── Controller/         # Controllers custom Symfony
├── Service/            # Services métier
├── EventListener/      # Listeners Doctrine
├── Exception/          # Exceptions custom
├── Security/           # Authenticators custom
├── Repository/         # Repositories Doctrine
├── Command/            # Commandes console
├── DataFixtures/       # Fixtures
└── Mcp/Tool/           # MCP tools par domaine
    ├── Project/
    ├── Task/
    ├── TaskMeta/
    ├── TimeEntry/
    └── Reference/

frontend/
├── pages/              # Pages Nuxt (routing auto)
│   ├── portal/         # Pages portail client
│   └── projects/       # Pages projets
├── layouts/            # Layouts (default, portal)
├── components/         # Composants Vue
│   ├── ui/             # Composants génériques
│   ├── task/           # Tâches
│   ├── user/           # Utilisateur (avatar, etc.)
│   ├── project/        # Projets
│   ├── client/         # Clients
│   ├── client-ticket/  # Tickets client
│   ├── admin/          # Administration
│   ├── notification/   # Notifications
│   └── time-tracking/  # Suivi du temps
├── composables/        # Composables (useApi, useNotifications, etc.)
├── stores/             # Stores Pinia (auth, ui, timer)
├── services/           # Services API
│   └── dto/            # Types TypeScript
├── plugins/            # Plugins Nuxt
├── utils/              # Utilitaires
├── 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)

Domaine Tools
Reference list-users, list-clients
Project list-projects, get-project, create-project, update-project
Task list-tasks, get-task, create-task, update-task, delete-task
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

Configuration locale (STDIO)

{
  "mcpServers": {
    "lesstime": {
      "command": "docker",
      "args": ["exec", "-i", "php-lesstime-fpm", "php", "bin/console", "mcp:server"]
    }
  }
}

Configuration réseau (HTTP)

{
  "mcpServers": {
    "lesstime": {
      "type": "url",
      "url": "http://<ip-serveur>:8082/_mcp",
      "headers": {
        "Authorization": "Bearer <api-token>"
      }
    }
  }
}

Gestion des tokens API

docker exec -u www-data php-lesstime-fpm php bin/console app:generate-api-token <username>

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. 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.

Description
No description provided
Readme 1.8 MiB
v0.3.18 Latest
2026-04-02 10:14:43 +00:00
Languages
PHP 48.2%
Vue 43.7%
TypeScript 6.1%
Dockerfile 0.7%
CSS 0.5%
Other 0.8%