# MesRelevés Application web de saisie et de recherche de relevés généalogiques pour associations. Permet la saisie collaborative de relevés d'actes (naissance, mariage, décès, etc.), la recherche plein texte et l'export au format GEDCOM 5.5.1. ## Fonctionnalités - **Saisie collaborative** — formulaires dynamiques pilotés par des types de sources configurables ; champs libres stockés en JSONB PostgreSQL - **Calendriers** — saisie en calendrier grégorien, julien ou républicain avec conversion automatique - **Recherche plein texte** — recherche PostgreSQL native sur les relevés, filtrable par type de source, lieu (avec subdivisions récursives) et plage d'années - **Gestion des lieux** — arbre hiérarchique (pays → région → département → commune…), types de lieux configurables, recherche par picker contextuel - **Workflow de validation** — statuts `à faire → en cours → à valider → terminé`, notifications mail + in-app - **Export GEDCOM 5.5.1** — par source ou par sélection de recherche, conversion des dates vers le grégorien - **Gestion des rôles** — administrateur, responsable de section, membre ; autorisations granulaires par source - **Interface admin** — tableau de bord statistiques, gestion des utilisateurs, sections, dépôts, types de sources et de lieux - **Mises à jour automatiques** — vérification quotidienne via l'API Gitea, application sans rebuild Docker ## Stack technique | Composant | Technologie | |---|---| | Backend | PHP 8.5 · Laravel 12 | | Base de données | PostgreSQL 18 (JSONB, full-text search, CTE récursives) | | Cache / Sessions | Redis 7 | | Frontend | Blade · Alpine.js · Tailwind CSS | | Auth | Laravel Breeze (sessions) | | Conteneurs | Docker + Docker Compose | --- ## Installation ### Prérequis - Docker Engine ≥ 24 - Docker Compose v2 (`docker compose version`) ### Première installation **1. Télécharger la dernière release** Récupérez l'archive `mesreleves-X.Y.Z.tar.gz` depuis la page des [releases](https://git.barbel.synology.me/CGL/mesreleves-php/releases) et extrayez-la : ```bash tar -xzf mesreleves-X.Y.Z.tar.gz cd mesreleves-X.Y.Z ``` **2. Lancer le script d'installation** ```bash ./install.sh ``` Le script crée un `.env` depuis `.env.example` puis s'arrête pour vous laisser le configurer. Éditez `.env` avec vos paramètres : ```env APP_URL=https://votre-domaine.fr APP_KEY= # généré automatiquement au démarrage DB_PASSWORD=mot_de_passe_fort MAIL_MAILER=smtp MAIL_HOST=smtp.example.com MAIL_PORT=587 MAIL_USERNAME=... MAIL_PASSWORD=... MAIL_FROM_ADDRESS=mesreleves@example.com ``` **3. Relancer le script** ```bash ./install.sh ``` L'application est accessible sur le port 80 (ou la valeur de `APP_URL`). **4. Activer les tâches planifiées** (optionnel — nécessaire pour la vérification automatique des mises à jour) Ajoutez à votre crontab (`crontab -e`) la ligne affichée à la fin du script d'installation : ``` * * * * * cd /chemin/vers/mesreleves && docker compose -f docker-compose.prod.yml exec -T app php artisan schedule:run >> /dev/null 2>&1 ``` --- ## Mises à jour ### Vérifier la version installée et les mises à jour disponibles ```bash docker compose -f docker-compose.prod.yml exec app php artisan app:check-update ``` ### Appliquer une mise à jour ```bash docker compose -f docker-compose.prod.yml exec app php artisan app:update ``` Le processus : 1. Sauvegarde PostgreSQL dans `storage/app/backups/` 2. Téléchargement de la nouvelle archive 3. Synchronisation des fichiers (`.env` et `storage/` préservés) 4. `composer install --no-dev` 5. Migrations 6. Rechargement gracieux de php-fpm 7. L'application est disponible pendant toute l'opération (sauf la fenêtre de migration) ### Mise à jour automatique Pour activer la mise à jour automatique lors de la vérification planifiée, ajoutez dans `.env` : ```env AUTO_UPDATE=true ``` > Par défaut `AUTO_UPDATE=false` : la vérification quotidienne notifie uniquement dans le tableau de bord admin. ### Rollback En cas de problème, lister les sauvegardes disponibles : ```bash docker compose -f docker-compose.prod.yml exec app php artisan app:rollback --list ``` Restaurer la base de données : ```bash docker compose -f docker-compose.prod.yml exec app php artisan app:rollback ``` --- ## Développement ### Prérequis - PHP 8.2+, Composer, Node.js 20+, npm - PostgreSQL 16+ ou Docker ### Démarrage rapide ```bash # Cloner et installer les dépendances composer install npm install && npm run build # Configuration cp .env.example .env php artisan key:generate # Démarrer PostgreSQL et Redis (Docker) docker compose up -d # Base de données php artisan migrate php artisan migrate:fresh --seed # reset + données de test # Serveur de développement php artisan serve # http://localhost:8000 npm run dev # Vite en watch (CSS/JS) ``` Compte administrateur créé par le seeder : | Champ | Valeur | |---|---| | E-mail | `admin@example.com` | | Mot de passe | `password` | ### Commandes utiles ```bash php artisan test # tous les tests php artisan test --filter=NomTest # un test précis ./vendor/bin/pint # formatage PHP (Laravel Pint) ./vendor/bin/phpstan analyse # analyse statique php artisan app:check-update # vérifier les mises à jour php artisan app:update # appliquer une mise à jour php artisan app:rollback --list # lister les sauvegardes ``` ### Créer une release ```bash # Modifier VERSION (ex : 1.1.0) echo "1.1.0" > VERSION git add VERSION && git commit -m "bump version 1.1.0" # Construire l'archive bin/build-release.sh # → mesreleves-1.1.0.tar.gz + mesreleves-1.1.0.tar.gz.sha256 # Publier git tag v1.1.0 && git push origin v1.1.0 # Créer une release sur Gitea et joindre les deux fichiers ``` --- ## Architecture ``` app/ Models/ Eloquent : User, Source, Releve, Lieu, Section, Depot… Http/ Controllers/ Un controller par entité (+ Admin/ pour la gestion) Middleware/ RoleMiddleware (admin, section_manager, member) Requests/ Form requests avec validation dynamique Policies/ Autorisation par modèle (Gates/Policies) Services/ GedcomExportService, DateConversionService, UpdateService Enums/ SourceStatus, UserRole, CalendarType, FieldType database/ migrations/ 10 migrations (lieux, sections, sources, relevés…) seeders/ Données de démonstration resources/views/ layouts/ Navigation, app layout components/ lieu-picker (Alpine.js + AJAX) sources/ CRUD + workflow de statut releves/ Formulaire dynamique par type de source recherche/ Recherche plein texte + filtres admin/ Tableau de bord, utilisateurs, sections, dépôts… bin/ build-release.sh Construction de l'archive de distribution ``` ## Licence Usage interne — association de généalogie.