Compte rendu
Le PDF du compte rendu complet de l'Atelier Professionnel est disponible dans la section Ressources supplémentaires ci-dessous.
Langages et technologies utilisés
Application C# C# .NET Framework 4.7.2 — Windows Forms — Newtonsoft.Json
API REST PHP PHP 7.x+ — vlucas/phpdotenv — PDO MySQL
Outils communs MySQL 8.x — Git — GitHub — Postman — SonarQube for IDE — Visual Studio 2019+
Contexte
Mediatek86 est un réseau de médiathèques de la Vienne (Poitiers). La direction, représentée par Mme JULIEN (Directrice Administrative et Financière), souhaitait doter son personnel d'une application de bureau pour gérer le catalogue documentaire, les commandes, les abonnements et les exemplaires physiques. Aucune application n'existait auparavant. En tant que développeur au sein de la société InfoTech Services 86 (maîtrise d'œuvre), j'ai pris en charge la complétion de l'application C# existante et de l'API REST associée, depuis la gestion des documents jusqu'au déploiement en production, pour un total de 45 heures estimées réparties sur 7 missions.
Documents officiels
Les documents officiels du projet sont disponibles dans la section Ressources supplémentaires ci-dessous :
- Contexte officiel de l'atelier professionnel
- Contrat de développement entre Mediatek86 (client) et InfoTech Services 86 (MOE)
- Cahier des charges de l'application MediatekDocuments
- Description des 7 missions (45h estimées)
- Procès-verbal de recette
Dépôts GitHub
Application C# — https://github.com/rabarijoy/MediaTekDocuments
- Installeur
.msidans l'archive MediaTek Documents.zip - Documentation XML C# (
MediaTekDocuments.xml) à la racine du projet
API REST PHP — https://github.com/rabarijoy/rest_mediatekdocuments
- Script de création de la base de données (
mediatek86.sql) à la racine - Documentation PHP générée par phpDocumentor dans le dossier
docs/ - Collection Postman (
MediaTekDocuments_API_Tests.postman_collection.json) à la racine
API en ligne
https://apirestmediatekdocuments.medianewsonline.com/rest_mediatekdocuments/
Le mode opératoire complet (authentification, routes disponibles, exemples Postman) est décrit dans le README du dépôt rest_mediatekdocuments.
Documentations techniques
Documentation C# (XML) Générée automatiquement depuis les commentaires /// <summary> sur toutes les classes et méthodes publiques. Fichier : MediaTekDocuments.xml dans le dépôt MediaTekDocuments.
Documentation PHP (phpDocumentor 3) Générée depuis les commentaires phpDoc du dossier src/. Dossier docs/ dans le dépôt rest_mediatekdocuments — couvre les classes MyAccessBDD, AccessBDD, Controle, Url, Connexion.
Vidéo de démonstration
[LIEN_VIDEO_DEMO]
Compétences officielles couvertes
BLOC 1 — Services informatiques aux organisations
Gérer le patrimoine informatique
- Recenser et identifier les ressources numériques
- Exploiter des référentiels, normes et standards adoptés par le prestataire informatique
- Mettre en place et vérifier les niveaux d'habilitation associés à un service
- Vérifier les conditions de la continuité d'un service informatique
- Gérer des sauvegardes
- Vérifier le respect des règles d'utilisation des ressources numériques
Répondre aux incidents et aux demandes d'assistance et d'évolution
- Collecter, suivre et orienter des demandes
- Traiter des demandes concernant les services réseau et système, applicatifs
- Traiter des demandes concernant les applications
Développer la présence en ligne de l'organisation
- Participer à la valorisation de l'image de l'organisation sur les médias numériques en tenant compte du cadre juridique et des enjeux économiques
- Référencer les services en ligne de l'organisation et mesurer leur visibilité
- Participer à l'évolution d'un site Web exploitant les données de l'organisation
Travailler en mode projet
- Analyser les objectifs et les modalités d'organisation d'un projet
- Planifier les activités
- Évaluer les indicateurs de suivi d'un projet et analyser les écarts
Mettre à disposition des utilisateurs un service informatique
- Réaliser les tests d'intégration et d'acceptation d'un service
- Déployer un service
- Accompagner les utilisateurs dans la mise en place d'un service
BLOC 2 — Conception et développement d'applications
Concevoir et développer une solution applicative
- Recueillir, analyser et mettre à jour les informations sur une version d'une solution applicative
- Analyser un besoin exprimé et son contexte juridique
- Participer à la conception de l'architecture d'une solution applicative
- Identifier, développer, utiliser ou adapter des composants logiciels
- Exploiter les technologies Web pour mettre en œuvre les échanges entre applications, y compris de mobilité
- Utiliser des composants d'accès aux données
- Réaliser les tests nécessaires à la validation ou à la mise en production d'éléments adaptés ou développés
- Rédiger des documentations technique et d'utilisation d'une solution applicative
- Assurer la maintenance corrective ou évolutive d'une solution applicative
Gérer les données
- Concevoir ou adapter une base de données
- Réaliser des requêtes d'interrogation ou de mise à jour d'une base de données
- Assurer la sécurité des données stockées
Détail des missions
Mission 1 — CRUD des documents (8h) Ajout des endpoints POST, PUT et DELETE pour les livres, DVD et revues côté API (transactions PDO multi-tables). Côté application C#, intégration des boutons Ajouter, Modifier, Supprimer dans les trois onglets catalogue, avec identifiant calculé automatiquement et validations de saisie.
Mission 2, Tâche 1 — Commandes livres et DVD (8h) Nouveaux onglets Commandes livres et Commandes DVD. Suivi en quatre étapes avec règles métier strictes. Endpoints API correspondants incluant la création de la table suivi.
Mission 2, Tâche 2 — Abonnements revues (4h) Onglet Commandes revues, alerte d'expiration à 30 jours au démarrage, 5 tests unitaires MSTest sur la méthode ParutionDansAbonnement.
Mission 3 — Gestion des exemplaires (5h) Enrichissement du GET exemplaires avec le libellé d'état (jointure), ajout du PUT et DELETE. Affichage automatique dans les onglets Livres, DVD et Parutions, avec modification d'état et suppression.
Mission 4 — Authentification (4h) Endpoint API d'authentification avec jointure sur la table service. Formulaire de connexion FrmLogin, méthode AppliquerDroitsAcces appliquant les restrictions par service.
Mission 5 — Sécurité, qualité, logs (4h) Externalisation des credentials dans App.config. Protection de la racine API en HTTP 400. Correction de 36 issues SonarCloud en 6 commits. Système de logs journaliers thread-safe dans %AppData%.
Mission 6 — Tests et documentation (8h) 27 tests unitaires MSTest sur les classes du modèle. Collection Postman de 25 requêtes avec assertions JavaScript. Documentation XML C# et phpDocumentor 3 PHP. Vidéo de démonstration de moins de 10 minutes.
Mission 7 — Déploiement et sauvegardes (4h) Déploiement de l'API et de la BDD sur AwardSpace. Corrections .htaccess et TLS pour compatibilité hébergeur. Installeur .msi via projet Visual Studio. Sauvegardes quotidiennes automatisées via cron-job.org à 02h00.
Fonctionnalités développées
Application C# (Windows Forms)
Gestion des documents Onglets Livres, DVD et Revues avec ajout, modification et suppression. L'identifiant est calculé automatiquement (premier entier non attribué, préfixe et zéros détectés depuis les ids existants). La suppression est bloquée si des exemplaires ou des commandes existent.
Commandes de livres et DVD Recherche d'un document, affichage de ses commandes triées par date décroissante. Ajout d'une commande (date, montant, nombre d'exemplaires). Suivi d'étapes avec règles métier strictes : une commande livrée ou réglée ne peut pas revenir à une étape antérieure ; seule une commande livrée peut passer à réglée. Suppression possible uniquement si l'étape est "en cours" ou "relancée".
Abonnements de revues Ajout d'un abonnement (date de commande, montant, date de fin). Suppression bloquée si des parutions ont été reçues pendant la période. Alerte au démarrage listant les abonnements expirant dans les 30 prochains jours.
Gestion des exemplaires Liste des exemplaires affichée automatiquement à la sélection d'un document. Modification de l'état (neuf, usagé, détérioré, inutilisable). Suppression après confirmation.
Authentification et droits d'accès
- Service Administratif : accès complet à toutes les fonctionnalités
- Service Administrateur : accès complet à toutes les fonctionnalités
- Service Prêts : consultation du catalogue uniquement
- Service Culture : accès refusé
Sécurité et logs Credentials externalisés dans App.config (modifiables sans recompilation). Logs journaliers dans %AppData%\MediaTekDocuments\logs\, thread-safe et silencieux.
API REST PHP
Endpoints CRUD des documents 9 routes POST/PUT/DELETE pour livres, DVD et revues. Les ajouts et suppressions s'effectuent en transactions PDO pour maintenir la cohérence des tables liées par héritage (document, livres_dvd, livre/dvd/revue).
Endpoints commandes GET sur /commandedocument/{json} retournant les commandes avec l'étape de suivi et son libellé. GET sur /suivi. POST, PUT (étape) et DELETE sur /commandedocument.
Endpoints abonnements GET sur /abonnement/{idRevue}. GET sur /abonnementexpiration (expiration dans 30 jours). POST et DELETE sur /abonnement (suppression conditionnelle aux parutions reçues).
Endpoints exemplaires GET enrichi avec libelleEtat via jointure sur la table etat. PUT pour modifier l'état. DELETE sur /exemplaire/{json}.
Endpoint authentification GET sur /utilisateur/{login, pwd} avec jointure sur la table service. Retourne le code 400 si les identifiants sont absents ou incorrects.
Déploiement Hébergé sur AwardSpace (offre gratuite, compatible avec tous les verbes HTTP). Configuration .htaccess adaptée pour la réécriture d'URL et la compatibilité des en-têtes HTTP Basic Auth sur hébergeur mutualisé. Sauvegardes quotidiennes planifiées via cron-job.org à 02h00.
Dépôt de documentation
https://github.com/rabarijoy/AP_MediaTekDocuments
Ce dépôt contient tous les documents de l'atelier en faisant référence aux submodules spécifiques des dépots de l'application et de l'API respectivement.