Page /telecharger avec deux cartes (Android / iOS). Pour chaque plateforme,
utilise en priorité un lien de store (MOBILE_*_URL) sinon le binaire déposé
dans public/downloads/ (.apk / .ipa), et affiche "Bientôt disponible" à défaut.
- config/mobile.php + .env.example (URLs/versions)
- DownloadController + vue telecharger + lien dans le header (public)
- public/downloads/ (README) ; binaires ignorés par git
- tests: accès public, lien store prioritaire, indisponibilité
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Les utilisateurs connectés peuvent proposer une modification / un ajout /
une correction via un formulaire. La soumission crée automatiquement une
issue dans le dépôt Gitea via son API (GiteaIssueService), avec le titre
préfixé par le type et l'auteur dans le corps.
- config/services.php + .env.example : GITEA_URL/TOKEN/REPO (token secret)
- SuggestionController (create/store) + validation
- vue suggestions/create + lien dans le header (utilisateurs connectés)
- tests: auth requise, création OK, validation, échec API
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Le "git pull" s'abandonnait dès qu'un fichier suivi avait été modifié
localement sur le serveur ("local changes would be overwritten"). On
répare d'abord les permissions (proprio = déployeur) puis on fait
fetch + reset --hard origin/master : récupération propre, insensible aux
modifs locales parasites. Les fichiers non suivis (cert.pem, .env) sont
préservés.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Le chown -R www-data cassait les futurs git pull/reset (les .gitignore
suivis passaient à www-data, inaccessibles à l'utilisateur SSH).
Désormais : propriétaire = utilisateur de déploiement, groupe = www-data
+ écriture de groupe + setgid, pour que git ET php-fpm puissent écrire.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- nginx.conf: sert l'application sur 80 et 443 sans redirection interne
(l'ancien "return 301 https://\$server_name" renvoyait vers localhost,
server_name étant codé à localhost). NPM gère déjà le TLS/redirect public.
- bootstrap/app.php: trustProxies(at: '*') pour que Laravel lise
X-Forwarded-Proto/Host et génère les bonnes URL derrière NPM.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Suivi en majuscules, le fichier était introuvable par Docker sur le
serveur Linux (sensible à la casse) : "open Dockerfile: no such file".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Introduced a new trait `HasCompositePrimaryKey` to enable Eloquent models to handle composite primary keys, which are not supported natively by Eloquent. The trait requires models to implement a method to define the composite key columns and manages key retrieval for save and select queries.
chore: add GrumPHP configuration for pre-commit checks
- Added a `grumphp.yml` configuration file to enforce code style and static analysis checks before commits. This setup includes Laravel Pint for code style and Larastan for static analysis, ensuring code quality and consistency.
chore: create PHPStan configuration file
- Created a `phpstan.neon` file to configure PHPStan with Larastan for static analysis. The configuration specifies the paths to analyze and sets the analysis level to 5 for a balance between catching bugs and avoiding excessive strictness.
L'extension PHP intl nécessite la bibliothèque système libicu-dev,
absente jusqu'ici (échec du build: icu-uc not found).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Les tests SecuriteTest utilisent une base SQLite en mémoire (RefreshDatabase) ;
le runner manquait le driver pdo_sqlite/sqlite3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- SecurityHeaders: autorise cdn.tailwindcss.com dans script-src/style-src
(sinon le style du site est bloqué en production)
- docs/05-mise-en-place-gitea-actions.md: guide d'installation du runner
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>