Files
xamxam/database/posterg_fiche-technique.md
Théophile Gervreau-Mercier 467aced734 Restructure repository and implement secure search feature
Phase 1: Consolidate shared infrastructure
- Create shared/ directory for common code
- Consolidate Database.php from front-backend and formulaire into unified shared/Database.php
  - Smart path detection for test.db vs posterg.db
  - Secure search with wildcard escaping and input validation
  - Support both singleton and direct instantiation patterns
  - Full CRUD methods for admin functionality
- Move RateLimit.php to shared/ (30 requests/min)
- Update all require paths across apps to use shared/

Phase 2: Reorganize directory structure
- Rename front-backend/ → apps/public/
- Rename formulaire/ → apps/admin/
- Rename db/ → database/
- Update all file paths for new structure
- Create root .gitignore excluding databases, cache, logs

Implement secure search feature
- Add apps/public/search.php with full-text search across theses
- Search filters: query, year, orientation, AP program, keywords
- Security features:
  - SQL injection prevention (prepared statements)
  - Wildcard injection prevention (escape % and _)
  - Input validation (max 200 chars, year range 1900-2100)
  - Rate limiting (30 req/min per IP)
  - Pagination limited to 100 results/page
  - XSS protection (htmlspecialchars on output)

Add comprehensive test suite
- Create apps/public/tests/ with proper structure
  - tests/Integration/SearchTest.php - 12 search scenarios
  - tests/Security/SecurityTest.php - vulnerability testing
  - tests/Unit/RateLimitTest.php - rate limit behavior
- Create database/fixtures/CreateTestDatabase.php
- Add apps/public/run-tests.php test runner
- All tests passing (4/4 suites)

Update deployment configuration
- Rename justfile 'sync' recipe to 'deploy'
- Create deploy group with separate deploy-public and deploy-admin
- Add test-deploy recipe for test database
- Exclude *.db, tests/, cache/, *.md from production deploy
- Deploy shared/ to both public and admin locations

Stats: +4482 insertions, -654 deletions across 72 files
2026-02-02 18:53:58 +01:00

171 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fiche technique
## Différentes catégories / métadonnées
**• Titre du TFE**
**• Sous-titre (si applicable)**
**• Auteur·ice(s)**
**• Contact (optionnel) [mail/site/insta/etc.]**
**• Promoteur·ice(s)**
**• Année**
**• Orientation [liste prédéfinie]**
* Arts Numériques / Dessin / Cinéma d'animation / Installation-Performance / Peinture / Photographie / Sculpture / Vidéographie / Graphisme / Typographie / Design Numérique / Illustration / Bande-Dessinés / Sérigraphie / Gravure
**• AP [liste prédéfinie]**
* Narration Spéculative / Design et Politique du Multiple [DPM] / Atelier Pratiques Situées [APS] / Lieux, Interdisciplinarités, Écologie, Nécessité, Systèmes [L.I.E.N.S.]
**• Finalité du master [liste prédéfinie]**
* Approfondi / Enseignement /Spécialisé
**• Langue du TFE [liste prédéfinie + option de créer des nouvelles langues]**
* Français / Anglais / autre : [imput] —> possible d'en sélectionner plusieurs en même temps
**• Format [liste pré-définie + une case autre "fourre-tout"]**
* Site web / Audio / Vidéo / Performance / Objet éditorial / Installation / Etc. / Autre
* —> possible d'en sélectionner plusieurs en même temps
**• Mots-clés (max 10) [liste avec les mots clés déjà existants + option d'en créer des nouveaux]**
* spéculation / narration / urbanisme / patrimoine / intime / collectivité / film / cinéma / sociologie / anthropologie / éphémérité / queer / écriture / poésie / écologies affectives / technologies / autre : [imput]
**• Synopsis (environ 200 mots ; pas nécessairement de max à voir si c'est nécessaire côté technique)**
**• Durée du TFE (si applicable) [faire en choix entre minutes/pages : [imput]]**
**• J'autorise l'erg à archiver mon TFE de la manière suivante ;**
[]x Libre ;[] mon TFE est en libre accès à tout le monde sur la plateforme des TFE ainsi que dans la bibliothèque de l'erg.
[]x Interne ;[] mon TFE n'est accessible que sur place en physique. Une note descriptive est disponible sur le site.
[]x Interdit ;[] mon TFE n'est pas disponible en physique ni sur le site. Une note descriptive est disponible sur le site.
L'étudiant·e peut, à tout moment, décider de restreindre son propre choix. Iel ne peut par contre pas l'ouvrir.
**• Licence du TFE ; dropdown avec plusieurs choix pré-établis + ouverture pour en donner d'autres ?**
* Les options précises sont encore au travail.
**• Upload du TFE**
**• Upload des annexes éventuelles**
**• Upload de la partie écrite**
**• Système pour que læ président·e du jury puisse rajouter une note de max 150 mots qui contextualiserait le TFE.**
**• Points du jury**
[]/!\ Quand l'étudiant·e dépose le TFE, celui-ci ne doit pas immédiatement être publié. Il faut attendre que la soutenance ait eu lieu et que læ président·e puisse éventuellement y ajouter un texte ainsi que les points. []
[]—> trouver un système pour rendre ça le plus fluide possible pour læ présidant·e ainsi que l'étudiant·e.[]
## Design
• Prévoir un « onglet » Charte / à propos (texte à venir doit être facile à adapter sans avoir à coder).
• Prévoir un « onglet » licences (texte à venir doit être facile à adapter sans avoir à coder).
• Prévoir un « onglet » contact (texte à venir doit être facile à adapter sans avoir à coder).
• Il faut prévoir un espace ou quelque chose pour différencier les thèses (doctorats) des TFE.
## Points importants
• Important que le "back-office" soit accessible / pas trop complexe pour qu'on puisse adapter, supprimer, ajouter, corriger les données des TFE (relativement) facilement.
• Important que le texte des différents onglets soit éditable (relativement) facilement.
• Important que le statut de monstration "libre", "interne", "interdit" soit facilement changeable.
## Création Base de Données
• Engagement début décembre
* Min 5h/semaine à horaire libre
* On espère qu'un premier draft de base donnée arrivera mi-décembre pour pouvoir expérimenter avec. On vous enverra un fichier csv dès qu'on a une base solide.
• Collecte et assemblage des différentes années (au moins 2 ans idéalement tout [lol])
* —> il faudra demander aux ancien·nes étudiant·es s'iels sont d'accord que leurs données soient publiées. Un mail sera envoyé après la récolte.
* —> voir avec Karim ce qu'on a le droit de montrer s'il n'y a pas de réponse (fiche descriptive, TFE en physique ?)
• Établir une liste de mots clés prédéfinis / voir s'il y a des lacunes et/ou problèmes quelque part
• On est au travail pour la partie doctorats. On vous tient au courant dès qu'il y a plus d'informations à ce sujet.
## Technique
• Hébergement et intégration avec les outils existants à voir avec Joan.
## Retroplanning
• Mi-décembre ; envoi d'un semblant de base de donnée pour permettre à l'équipe posterg d'expérimenter
• Journées pédagogiques du 15 \& 16 janvier ; travail sur les TFE, la place du jury dans sa publication etc.
• Mi-février ; envoi d'un mail aux ancien·nes étudiant·es et aux profs en vue de la publication digitale des TFE
• Mi-février ; finalisation de la maquette du site Post-ERG
• Mi-mars ; base de donnée des ancien·nes étudiant·es finalisée (fichier .cvs)
• Mi-avril ; date de remise du projet site finalisé
• Début mai ; mise en ligne du site
• Mi-mai ; dépôt des TFE de 1e session (les TFE ne sont pas publiés publiquement à ce moment)
• Mi-juin ; publication publique des TFE (après éventuelle note du jury)