Atelier Professionnel - MediaTekDocuments

Le réseau Mediatek86 regroupe les médiathèques municipales de la Vienne (Poitiers). Le personnel, réparti en plusieurs services (administratif, prêts, culture), avait besoin d'un outil de gestion du catalogue documentaire. Ce projet couvre le développement complet de cet outil, du premier endpoint PHP jusqu'à l'installeur de l'application et aux sauvegardes automatisées de la base de données en production.

L'application de bureau, développée en C# .NET Framework 4.7.2 avec Windows Forms, permet de gérer les livres, les DVD et les revues : ajout avec identifiant calculé automatiquement, modification, suppression sous condition d'absence d'exemplaires ou de commandes. Elle gère les commandes de livres et DVD avec un suivi en quatre étapes (en cours, relancée, livrée, réglée) encadré par des règles métier strictes, les abonnements aux revues avec une alerte automatique au démarrage listant les expirations dans les 30 prochains jours, et la gestion des exemplaires physiques (modification d'état, suppression). L'accès est conditionné par un formulaire de connexion dont le résultat détermine les droits : accès complet pour les profils administratif et administrateur, consultation seule pour le service prêts, accès refusé pour le service culture.

L'API REST, écrite en PHP sans framework, expose des endpoints CRUD pour l'ensemble des tables de la base de données mediatek86. Les opérations multi-tables (ajout ou suppression d'un livre, d'un DVD, d'une commande) sont encapsulées dans des transactions PDO pour garantir la cohérence des données. L'authentification s'effectue en HTTP Basic Auth. L'API est déployée sur un hébergeur mutualisé (AwardSpace), avec une configuration Apache adaptée pour la réécriture d'URL et la compatibilité des en-têtes d'authentification sur les hébergeurs partagés.

La qualité du code a été traitée via SonarCloud (36 issues corrigées en 6 commits catégorisés). Les credentials de connexion à l'API sont externalisés dans un fichier de configuration non versionné. Un système de logs journaliers thread-safe enregistre toutes les erreurs réseau dans un fichier rotatatif dans AppData. Les tests couvrent 27 cas unitaires MSTest sur les classes du modèle, et une collection Postman de 25 requêtes avec assertions couvre l'intégralité des endpoints API.

La documentation technique est générée automatiquement : commentaires XML pour l'application C#, phpDocumentor 3 pour l'API PHP. Une vidéo de démonstration de moins de 10 minutes présente toutes les fonctionnalités depuis la connexion jusqu'à la gestion des exemplaires. Le projet est versionné sur GitHub avec une branche par mission, des pull requests vers main et un tableau Kanban pour le suivi.

voir sur github
Atelier Professionnel - MediaTekDocuments

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 .msi dans 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.

Ressources supplémentaires