# Coffra Application web **mobile-first** de gestion opérationnelle de chantier. | Couche | Technologie | |--------|-------------| | API | Laravel 13 (REST, JSON) | | Client | React 19, TypeScript, Tailwind CSS 4, Vite | ## Structure du dépôt - `backend/` — API Laravel (logique métier, permissions, **isolation par organisation**). - `frontend/` — SPA React (UI, navigation, formulaires). ## Architecture produit (résumé) - **Multi-organisation ready** : les utilisateurs et les fiches ouvriers sont rattachés à une `organization_id` ; le MVP n’utilise qu’une organisation en pratique. - **User** = compte connecté ; **Worker** = ouvrier métier sans login dans le MVP — voir `DATA_MODEL.md`. - **Rôles connectés MVP** : `entrepreneur_admin`, `chef_chantier`, `contremaitre_technicien`, `financier_tresorier` — voir `ROLE_PERMISSIONS.md`. - **Pas d’inscription publique** : comptes créés par seed, admin ou invitation (à venir). ## Prérequis - PHP 8.3+, [Composer](https://getcomposer.org/) - Node.js 20+ et npm ## Démarrage rapide ### Backend ```powershell cd backend composer install copy .env.example .env php artisan key:generate php artisan migrate php artisan db:seed php artisan serve ``` En cas de schéma déjà partiellement migré en local, vous pouvez repartir de zéro avec : `php artisan migrate:fresh --seed` L’API écoute par défaut sur `http://127.0.0.1:8000`. Préfixe des routes : **`/api/v1`**. Comptes de démonstration (après `db:seed`), mot de passe **`password`** pour tous : | E-mail | Rôle | |--------|------| | `entrepreneur@coffra.local` | entrepreneur_admin | | `chef@coffra.local` | chef_chantier | | `contremaitre@coffra.local` | contremaitre_technicien | | `financier@coffra.local` | financier_tresorier | Un enregistrement **Worker** d’exemple (sans compte) est également créé pour illustrer la séparation User / Worker. ### Frontend ```powershell cd frontend npm install npm run dev ``` L’interface est servie sur `http://127.0.0.1:5173`. Le proxy Vite redirige `/api` et `/sanctum` vers le backend : en développement, laissez `VITE_API_BASE_URL` vide (voir `frontend/.env.example`). ### Authentification (MVP) L’API utilise **Laravel Sanctum** avec jetons **Bearer** (`Authorization: Bearer `). Endpoints auth : **`login`**, **`logout`**, **`me`** uniquement. Le frontend stocke le jeton dans `localStorage` (socle uniquement ; durcissement possible plus tard : cookies httpOnly, refresh tokens, etc.). ## Documentation projet | Fichier | Contenu | |---------|---------| | [ARCHITECTURE.md](./ARCHITECTURE.md) | Découpage technique, multi-org, scope d’accès | | [DATA_MODEL.md](./DATA_MODEL.md) | Modèle de données (User, Worker, Organization, cible métier) | | [ROLE_PERMISSIONS.md](./ROLE_PERMISSIONS.md) | Rôles MVP et habilitations | | [API_SPEC.md](./API_SPEC.md) | Contrat API REST | | [SCREEN_SPEC.md](./SCREEN_SPEC.md) | Écrans, navigation, chantier actif | | [TASKS_BACKLOG.md](./TASKS_BACKLOG.md) | Backlog de mise en œuvre | **Première vague MVP (implémentée)** : organisation courante, projets (chantiers), utilisateurs staff, ouvriers, équipes par projet, affectations ouvrier↔projet, accès projet (`UserProjectAccess`). Les habilitations exposées au client suivent la nomenclature `organizations.*`, `projects.*`, `users.*`, `workers.*`, `teams.*`, `worker_assignments.*`, `reports.view` (plus de préfixes historiques type `chantiers.*` / `presences.*`). Les modules **Attendance**, **Need**, **WorkItem**, **WorkProgress** et **Payroll** ne sont **pas** encore implémentés côté API ni écrans dédiés. ## Licence Projet Coffra — usage interne / à définir.