Dossier Professionnel TPDWWM Laurent Seraline .pdf


À propos / Télécharger Aperçu
Nom original: Dossier_Professionnel-TPDWWM-Laurent _Seraline.pdf
Titre: Microsoft Word - TPDWWM - Dossier Professionnel - Laurent Séraline.docx

Ce document au format PDF 1.3 a été généré par Word / macOS Version 10.15.7 (assemblage 19H524) Quartz PDFContext, et a été envoyé sur fichier-pdf.fr le 27/01/2022 à 15:43, depuis l'adresse IP 109.215.x.x. La présente page de téléchargement du fichier a été vue 940 fois.
Taille du document: 8.4 Mo (39 pages).
Confidentialité: fichier public


Aperçu du document


DOSSIER PROFESSIONNEL (DP)
y

Nom de naissance
Nom d’usage
Prénom
Adresse

u
u
u
u

Séraline
Séraline
Laurent
205, impasse Printemps, 47000 Agen

Titre professionnel visé
Développeur Web et Web Mobile

MODALITE D’ACCES :



Parcours de formation
Validation des Acquis de l’Expérience (VAE)

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

1

DOSSIER PROFESSIONNEL (DP)

Présentation du dossier
Le dossier professionnel (DP) constitue un élément du système de validation du titre professionnel.
Ce titre est délivré par le Ministère chargé de l’emploi.
Le DP appartient au candidat. Il le conserve, l’actualise durant son parcours et le présente
obligatoirement à chaque session d’examen.
Pour rédiger le DP, le candidat peut être aidé par un formateur ou par un accompagnateur VAE.
Il est consulté par le jury au moment de la session d’examen.

Pour prendre sa décision, le jury dispose :
1.

des résultats de la mise en situation professionnelle complétés, éventuellement, du questionnaire
professionnel ou de l’entretien professionnel ou de l’entretien technique ou du questionnement à partir de
productions.

2.

du Dossier Professionnel (DP) dans lequel le candidat a consigné les preuves de sa pratique professionnelle.

3.

des résultats des évaluations passées en cours de formation lorsque le candidat évalué est issu d’un
parcours de formation

4.

de l’entretien final (dans le cadre de la session titre).
[Arrêté du 22 décembre 2015, relatif aux conditions de délivrance des titres professionnels
du ministère chargé de l’Emploi]

Ce dossier comporte :
pour chaque activité-type du titre visé, un à trois exemples de pratique professionnelle ;

u

un tableau à renseigner si le candidat souhaite porter à la connaissance du jury la détention d’un titre, d’un
diplôme, d’un certificat de qualification professionnelle (CQP) ou des attestations de formation ;

u

u

une déclaration sur l’honneur à compléter et à signer ;

u

des documents illustrant la pratique professionnelle du candidat (facultatif)

u

des annexes, si nécessaire.

Pour compléter ce dossier, le candidat dispose d’un site web en accès libre sur le site.

y
Page

2

http://travail-emploi.gouv.fr/titres-professionnels

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
Sommaire
Exemples de pratique professionnelle
Activité-type n° 1 : Développer la partie front-end d’une application web ou web
mobile en intégrant les recommandations de sécurité

p.

5

u

CP1 Maquetter une application ..........................................................................................................
p. p. 5

u

CP2 Réaliser une interface utilisateur web statique et adaptable .....................................................
p. p.10

u

CP3 Développer une interface utilisateur web dynamique .................................................................
p. p15

Activité-type n° 2 : Développer la partie back-end d’une application web ou web
mobile en intégrant les recommandations de sécurité

p.

20

u

CP5 Créer une base de données .........................................................................................................
p. p.20

u

CP6 Développer les composants d’accès aux données ......................................................................
p. p.27

u

CP7 Développer la partie back-end d’une application web ou web mobile ........................................
p. p33

Titres, diplômes, CQP, attestations de formation (facultatif)

p.

38

Déclaration sur l’honneur

p.

39

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

3

DOSSIER PROFESSIONNEL (DP)

EXEMPLES DE PRATIQUE
PROFESSIONNELLE

Page

4

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
Développer la partie front-end d’une application web ou web mobile
en intégrant les recommandations de sécurité

Activité-type 1
CP1

u

Maquetter une application

1. Décrivez les tâches ou opérations que vous avez effectuées, et dans quelles conditions :

Dans le cadre de ce dossier professionnel, j’ai développé une application qui présente une partie de ma
collection de jeux de société. Ce projet m’a permis de mettre en œuvre ce que nous avons appris dans
le cadre de la formation O’clock concernant la conception d’une application web.
Avant d’attaquer la réalisation des maquettes fonctionnelles (wireframes), j’ai listé les différents
scénarios d’utilisation (users stories) que mon application devra satisfaire.
Le tableau ci-dessous décrit les fonctionnalités attendues groupées par rôle utilisateur.


Users stories
En tant que …
Visiteur
Visiteur
Visiteur
Visiteur
Visiteur
Visiteur
Visiteur
Visiteur
Visiteur
Visiteur
Visiteur

Je souhaite …
Voir la collection complète de
jeux
Pouvoir contacter le
propriétaire de la collection
Voir une photo de la boîte de
chaque jeu depuis la page
d’accueil
Voir une photo du contenu de
chaque boîte de jeu
Connaître le nom de chaque jeu
Être renseigné sur le nombre de
joueurs possibles pour chaque
jeu
Savoir la durée moyenne d’une
partie pour chaque jeu
Être informé de l’âge minimum
conseillé pour chaque jeu
Savoir à quelle(s) catégorie(s)
appartient chaque jeu
Connaître le(s) nom(s) de(s)
l’auteur(s) de chaque jeu
Avoir une description rapide de
chaque jeu

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Afin de …

Obtenir des informations
supplémentaires sur les jeux

Me faire une idée plus précise
du jeu
Savoir si les jeux correspondent
au nombre de joueurs avec qui
je veux jouer simultanément
Déterminer si les jeux seront
adaptés à mon utilisation
Savoir vers quels jeux je peux
me diriger en fonction des gens
avec qui je vais jouer
Sélectionner les jeux en
fonction de mes préférences
Savoir si le jeu a été réalisé par
un auteur que je connais
Choisir les jeux pour lesquels je
veux en savoir plus
Page

5

DOSSIER PROFESSIONNEL (DP)
En tant que …
Visiteur

Je souhaite …
Pouvoir accéder à une
description détaillée de chaque
jeu
Voir l’avis du propriétaire de la
collection pour chaque jeu
Pouvoir accéder à une
plateforme de jeux en ligne
Pouvoir accéder à une boutique
en ligne

Afin de …
En apprendre davantage sur
certains jeux

Administrateur

Pouvoir me connecter

Administrateur

Accéder aux fonctionnalités
d’administration
Compléter la collection

Pouvoir ajouter un jeu avec
toutes ses informations
(photos, nom, nombre de
joueurs, âge minimum conseillé,
durée moyenne d’une partie,
brève description, description
complète, catégorie(s), nom(s)
de(s) l’auteur(s), avis personnel
Pouvoir modifier les
Corriger une erreur, modifier la
informations d’un jeu
description ou l’avis
personnel,…etc
Pouvoir supprimer un jeu
Mettre à jour la collection

Visiteur
Visiteur
Visiteur

Administrateur
Administrateur

Avoir un avis d’une personne
ayant déjà essayé le jeu
Essayer les jeux que j’ai repérés
Commander les jeux que j’ai
repérés

Une fois l’ensemble des fonctionnalités listées et décrites, j’ai réalisé des maquettes fonctionnelles
(wireframes) en prenant soin d’y inclure tous les éléments nécessaires à la satisfaction des besoins
utilisateurs.
Des maquettes version mobile et desktop ont été réalisées pour toutes les vues de l’application. Des
légendes donnent des précisions sur le contenu et indiquent les comportements des différents
boutons.
Elles ont pour rôle de guider le développement en présentant le squelette visuel du site et sont
focalisées sur l’ergonomie que devra avoir l’application.
Dans le cadre de ce dossier, je présente uniquement les maquettes mobile et desktop de la page
d’accueil.

Page

6

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)



Wireframes

Page d’accueil – Mobile

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

7

DOSSIER PROFESSIONNEL (DP)

Page d’accueil – Desktop

Page

8

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
2. Précisez les moyens utilisés :

Réalisation des wireframes à l’aide de l’application Balsamiq Cloud (en ligne).

3. Avec qui avez-vous travaillé ?

J’ai travaillé seul sur ce projet.

4. Contexte
Nom de l’entreprise, organisme ou association
Chantier, atelier, service
Période d’exercice

u

u

Du :

u

École O’clock

Projet personnel réalisé lors de la formation
05/10/2020

au :

23/03/2021

5. Informations complémentaires (facultatif)

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

9

DOSSIER PROFESSIONNEL (DP)

Développer la partie front-end d’une application web ou web mobile
en intégrant les recommandations de sécurité

Activité-type 1
CP2

u

Réaliser une interface utilisateur web statique et adaptable

1. Décrivez les tâches ou opérations que vous avez effectuées, et dans quelles conditions :

À partir des wireframes réalisés (voir CP1), j’ai développé l’application présentant une partie de ma
collection de jeux de société. L’application étant entièrement responsive (dont le design s’adapte à la
taille d’écran de l’utilisateur), le visiteur peut la parcourir sur mobile ou sur ordinateur.
J’ai profité de ce projet pour découvrir la bibliothèque Bootstrap qui permet de faciliter la création
d’application web responsive via l’utilisation de classes prédéfinies.
Dans le cadre de ce dossier, je vais présenter uniquement la page d’accueil visiteur et me concentrer
sur le code HTML et CSS.


Page

Rendu version desktop

10

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
La page d’accueil comprend un menu de navigation sur la partie supérieure de l’écran. Il est toujours
apparent et permet de revenir à la page d’accueil, d’accéder à un site de jeu en ligne ou d’être redirigé
vers un site marchand. Le bouton « Se connecter » n’est finalement pas présent car j’ai finalement
décidé de réaliser un back-office séparé pour l’administrateur.
Les différents jeux sont présentés sous forme de cartes par lignes de 3 avec : une photo de la boîte, leur
nom, la durée de jeu moyenne, l’âge minimum conseillé, les catégories auxquelles il appartient et une
brève description. En bas de chaque carte, un bouton « En savoir plus » permet d’accéder à la page
détaillée du jeu. Enfin, un footer (non visible sur la capture) est présent sur l’ensemble des pages du
site.


Rendu version mobile

Lors de l’utilisation de l’application sur mobile, les liens de navigation sont masqués et apparaissent à la
demande de l’utilisateur via un clic sur le « menu burger ». Les tuiles présentant les jeux sont désormais
affichées les unes en dessous des autres et la description n’est plus affichée.
D’autres adaptations sont prévues dans le code pour des tailles d’écran intermédiaires.

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

11

DOSSIER PROFESSIONNEL (DP)


Gestion barre de navigation responsive

La navigation internet depuis les terminaux mobiles devenant la norme, le développement dit « mobile
first » est désormais une « bonne pratique ». Boostrap s’est adapté et ses dernières versions sont
conçue selon cette approche. Les règles CSS sont donc prévues pour un affichage mobile en premier
lieu puis on indique via un système de « breakpoints » (reposant sur l’utilisation de règles @media ) les
adaptations pour les écrans plus grands.
Pour réaliser un menu de navigation responsive, je me suis appuyé sur le composant navbar de
Bootstrap.
Sur les écrans mobiles, le composant prévoit un affichage vertical du menu. Avec la classe navbarexpand-sm , j’indique que le menu doit « s’étendre » à partir du breakpoint « small » ( sm ), correspondant
à une largeur de fenêtre de 540px. La combinaison de cette classe avec d’autres indiquées pour les
éléments enfants permettra un affichage différent à partir de ce breakpoint (la mise à l’horizontale du
menu par exemple).
Pour la version mobile, j’ai ajouté un bouton avec la représentation classique d’un menu burger via la
classe navbar-toggler-icon . La classe navbar-toggler associée à la classe navbar-expand-sm sont
responsables de la disparition de l’icône pour des largeurs supérieures à 540px ( display : none ).
La classe collapse appliquée au parent de la liste ( <ul> ) entraîne la disparition des liens en dessous
d’une largeur de 540px.
Enfin pour le comportement d’apparition/disparition du menu lors du clic sur l’icône, j’ai ajouté les
propriétés data-toggle=“collapse“ et data-target=“#navbarResponsive“ qui est l’ id que j’ai donné à
la div contenant ma liste.

Page

12

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)


Gestion de la présentation des tuiles « jeux »

Pour rendre l’affichage des tuiles responsive, je me suis appuyé sur le système de grille Bootstrap.
L’idée est de définir un élément row (via la classe du même nom) qui sera constitué de 12 colonnes de
bases. On ajoute ensuite des colonnes (via la classe col ) à l’intérieur de cet élément en indiquant le
nombre de colonnes (parmi les 12 de base) que chaque colonne créée doit occuper en fonction de la
largeur d’écran. Par défaut une colonne créée occupe toute la largeur d’une row , c’est donc le
comportement observé lors de la navigation mobile.
Pour les écrans plus larges, les classes col-md-6 col-lg-4 indiquent qu’à partir de la taille d’écran
« medium » ( md - 720px) chaque colonne créée occupera 6 des 12 colonnes de base et qu’à partir de la
taille d’écran « large » ( lg – 960px) chaque colonne créée occupera 4 des 12 colonnes de base.
Autrement dit, dès que la fenêtre atteindra 720px de large, 2 tuiles s’afficheront côte à côte et à partir
de 960px, 3 tuiles s’afficheront côte à côte.
Enfin, la classe d-none sur le paragraphe affichant la brève description permet d’indiquer un display :
none par défaut et donc de ne pas l’afficher sur mobile. La classe d-sm-block permet d’indiquer un
display : block à partir de la taille small (576px – tablettes) pour qu’elle apparaisse.

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

13

DOSSIER PROFESSIONNEL (DP)
2. Précisez les moyens utilisés :

Éditeur de code : Visual Studio Code
Technologies & Langages : HTML, CSS, JavaScript, Node.js, Express.js, ejs, Bootstrap

3. Avec qui avez-vous travaillé ?

J’ai travaillé seul sur ce projet.

4. Contexte
Nom de l’entreprise, organisme ou association
Chantier, atelier, service
Période d’exercice

u

u

Du :

u

École O’clock

Projet personnel réalisé lors de la formation
05/10/2020

au :

23/03/2021

5. Informations complémentaires (facultatif)

Page

14

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)

Développer la partie front-end d’une application web ou web mobile
en intégrant les recommandations de sécurité

Activité-type 1
CP3

u

Développer une interface utilisateur web dynamique

1. Décrivez les tâches ou opérations que vous avez effectuées, et dans quelles conditions :

Au cours de la formation au sein de l’école O’clock, nous avons découvert la manipulation du Document
Object Model (DOM) avec JavaScript via la création d’un jeu de dés : « Dice Roller » que j’ai fait un peu
évoluer durant mon temps libre.
Ce jeu aux règles complexes, qui consiste à obtenir la plus grosse somme de dés, se joue contre le
programme lui-même appelé Jarvis.

La capture d’écran ci-dessus montre l’issue d’une partie. À la connexion, la zone de jeu et le bandeau de
résultat son vides. Le nombre de dés est par défaut fixé à 6. Avant de lancer ou de relancer une partie,
le joueur peut faire varier le nombre de dés en jeu à l’aide du slider. Il lance ensuite la partie en cliquant
sur le bouton « Lancer la partie ». Un nombre de dés égal à la valeur choisie apparaît dans chaque zone
de jeu. Au bout de quelques secondes, les dés « s’immobilisent » et le résultat s’affiche.
Dans le cadre de cette CP3 (« Développer une interface utilisateur web dynamique »), je vais
uniquement m’attarder sur la partie JavaScript de cette application.

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

15

DOSSIER PROFESSIONNEL (DP)


Fonction diceRoll()

Avant toutes choses, je crée une fonction permettant de simuler un lancer de dé à 6 faces et de
renvoyer le résultat obtenu.


Ajout d’une zone affichant le résultat

Afin de pouvoir afficher le résultat de la partie, je crée un élément html p avec la classe winner que
j’insère dans le DOM à la fin du conteneur body .


Fonction createDice()

Cette fonction permet de créer un dé, de l'insérer, de donner un effet de dé qui roule avant de
s’immobiliser et de renvoyer le résultat du lancer. Elle sera utilisée par la fonction play() (présentée
dans la suite de cette section) pour générer les dés en fonction du nombre choisi par le joueur.
Je commence par créer une <div> que je stocke dans une variable dice . Une fois insérée dans le DOM,
elle recevra l’image « sprite » du dé en image de fond. C’est ces div qui permettront donc d’afficher
des dés à l’écran.
Page

16

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
Je sélectionne ensuite la zone de jeu dans laquelle l’insérer ( player-board ou jarvis-board ) en
récupérant l’information via la valeur passée en paramètre de la fonction ( board ) puis je l’insère.
J’exécute ensuite la fonction rollDice() précédemment créée pour attribuer une valeur à ce dé. Je
stocke le résultat dans une variable result .
La suite du code permet de donner l’effet d’un dé qui roule avant de s’immobiliser en donnant à
l’image « sprite » une position aléatoire toutes les 100ms jusqu’à l’expiration d’un délai aléatoire
également.
Enfin je renvoie le résultat du lancer pour l’utiliser dans le calcul.


Fonction play()

Cette fonction s’exécutera lors du clic de l’utilisateur sur le bouton « Lancer une partie ». Elle permet de
lancer une partie, de créer le nombre de dés choisis par l’utilisateur, de calculer le résultat de la partie
et de l’afficher.
Tout d’abord, je récupère et je stocke dans une variable choice le nombre de dés choisis par
l’utilisateur via le slider. Cette valeur déterminera le nombre de fois que la fonction createDice() doit
être exécutée.
DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

17

DOSSIER PROFESSIONNEL (DP)
Avant de créer les nouveaux dés, je vide les zones de jeu et de résultat et j’initialise les variables
permettant de stocker les scores totaux.
Je lance ensuite une boucle pour exécuter ma fonction createDice() autant de fois que la valeur
choisie par l’utilisateur et ce pour chaque camp. Je cumule les valeurs de dés retournées dans les
variables playerScore et jarvisScore .
Enfin, en fonction des résultats obtenus par les 2 camps, j’ajoute le contenu et la couleur de fond
adaptés à la div winner . Le setTimeout() permet d’afficher le résultat une fois les dés immobilisés.


Ajout d'un écouteur d'évènements sur le ‘slider’

Afin que le nombre de dés en jeu (affiché dans le header) change à l’écran lorsque l’utilisateur fait
varier le slider, j’ajoute un écouteur d’évènement sur le slider qui déclenche une fonction mettant à
jour le contenu de l’output.


Ajout d'un écouteur d'évènement sur le bouton ‘play-button’

Enfin, j’ajoute un dernier écouteur d’évènement sur le bouton « Lancer la partie » pour déclencher ma
fonction play() .

Page

18

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
2. Précisez les moyens utilisés :

Éditeur de code : Visual Studio Code
Technologies & Langages : HTML, CSS, JavaScript

3. Avec qui avez-vous travaillé ?

J’ai travaillé seul sur ce projet

4. Contexte
Nom de l’entreprise, organisme ou association
Chantier, atelier, service
Période d’exercice

u

u

Du :

u

École O’clock

Projet réalisé au cours de la formation et amélioré sur mon temps libre
05/10/2020

au :

23/03/2021

5. Informations complémentaires (facultatif)

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

19

DOSSIER PROFESSIONNEL (DP)
Développer la partie back-end d’une application web ou web mobile en
intégrant les recommandations de sécurité

Activité-type 2
CP5

u

Créer une base de données

1. Décrivez les tâches ou opérations que vous avez effectuées, et dans quelles conditions :

Dans le cadre de ce dossier professionnel, j’ai conçu une base de données qui sera utilisée par une
application de réservations de salles d’Escape Game. Elle comprendra plusieurs structures (endroit)
pouvant regrouper plusieurs salles. Les utilisateurs pourront réserver et noter les différentes salles.
Pour réaliser ce travail, je me suis appuyé sur la méthode Merise et son processus de conception en 3
étapes : modèle conceptuel puis modèle logique et enfin modèle physique.


Modèle Conceptuel de données (MCD)

Après avoir réalisé un recueil de données pour lister les informations nécessaires au fonctionnement de
l’application, les entités suivantes (et leurs attributs) se sont dégagées :
CLIENT : numéro client, email, prénom, nom, mot de passe
SALLE : code salle, nom, durée, niveau de difficulté, nombre de joueur minimum, nombre de
joueur maximum, prix
STRUCTURE : code structure, nom, adresse, complément, code postal, ville
THÈME : référence interne, libellé
J’ai ensuite déterminé les relations et les cardinalités (quantités minimum et maximum entre deux
entités) entre ces différentes entités, elles sont les suivantes :
Structure <- INCLURE -> Salle
Þ Relation 1:N
§ Une structure peut inclure minimum 1 salle et maximum N salles
§ Une salle peut faire partie de minimum 1 structure et maximum 1 structure
Salle <- APPARTENIR -> Thème
Þ Relation N:N
§ Une salle peut appartenir à minimum 1 thème et maximum N thèmes
§ Un thème peut être attribué à minimum 0 salle et maximum N salles
Client <- RÉSERVER -> Salle
Þ Relation N:N
§ Un client peut réserver minimum 0 salle et maximum N salles
§ Une salle peut être réservée par minimum 0 client et maximum N clients
Page

20

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
Client <- NOTER -> Salle
Þ Relation N:N
§ Un client peut noter minimum 0 salle et maximum N salles
§ Une salle peut être notée par minimum 0 client et maximum N clients
Certaines données présentes dans le recueil de données se trouvent décrire non pas une entité mais
une relation. Elles seront visibles dans la modélisation graphique du MCD ci-dessous :



Modèle Logique de Données (MLD)

Après la réalisation du MCD, j’ai fait un pas de plus vers la base de données physique finale en réalisant
le MLD. Pour passer de l’un à l’autre, voici les règles à appliquer :
Þ Toutes les entités décrites dans le MCD deviennent des tables du MLD.
Þ Les 3 relations de type N:N seront également matérialisées par des tables à part entière
contenant les 2 clés étrangères des tables à lier et les attributs décrivant ces relations.
Þ La relation de type 1:N sera matérialisée par une clé étrangère dans la table ayant la
cardinalité maximum égale à 1 (Salle) faisant référence à l’identifiant dans la table
associée (Structure).

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

21

DOSSIER PROFESSIONNEL (DP)
Voici la représentation graphique du MLD :



Dictionnaire de données

À partir du MLD réalisé, j’ai rédigé un dictionnaire de données qui liste, par table, l’ensemble des
champs avec : le type de donnée, ses spécificités et les relations entre les tables. Il me permettra, une
fois « traduit » en langage SQL, de générer ma base de données physique.
ORGANIZATION
Champ

Type

id

INT

organization_code
name
address
complement

TEXT
TEXT
TEXT
TEXT

zip_code
city
created_at

INT
TEXT
TIMESTAMPTZ

updated_at

TIMESTAMPTZ

Page

22

Spécificités
GENERATED ALWAYS AS
IDENTITY PRIMARY KEY
UNIQUE, NOT NULL
NOT NULL
NOT NULL

NOT NULL
NOT NULL
NOT NULL DEFAULT now()

Description
Clé primaire
Identifiant unique de la structure
Nom de la structure
Numéro et nom de rue
Informations complémentaires sur
l’adresse
Code postal
Ville
Date et heure de création de
l’enregistrement
Date et heure de dernière modification
de l’enregistrement

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
ROOM
Champ

Type

id

INT

room_code
name
duration
difficulty_level
min_players
max_players
organization_id

TEXT
TEXT
INT
INT
INT
INT
INT

created_at

TIMESTAMPTZ

updated_at

TIMESTAMPTZ

THEME
Champ

Type

id

INT

theme_code
name
created_at

TEXT
TEXT
TIMESTAMPTZ

updated_at

TIMESTAMPTZ

ROOM_HAS_THEME
Champ

Type

id

INT

room_id

INT

theme_id

INT

created_at

TIMESTAMPTZ

updated_at

TIMESTAMPTZ

Spécificités
GENERATED ALWAYS AS
IDENTITY PRIMARY KEY
UNIQUE, NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL REFERENCES
“organization”(id) ON DELETE
CASCADE
NOT NULL DEFAULT now()

Description
Clé primaire
Identifiant unique de la salle
Nom de la salle
Durée de jeu
Niveau de difficulté entre 1 et 5
Nombre de joueurs minimum
Nombre de joueurs maximum
Clé étrangère faisant référence à l’id
d’une structure
Date et heure de création de
l’enregistrement
Date et heure de dernière modification
de l’enregistrement

Spécificités
GENERATED ALWAYS AS
IDENTITY PRIMARY KEY
UNIQUE, NOT NULL
NOT NULL
NOT NULL DEFAULT now()

Description
Clé primaire
Identifiant unique du thème
Libellé du thème
Date et heure de création de
l’enregistrement
Date et heure de dernière modification
de l’enregistrement

Spécificités
GENERATED ALWAYS AS
IDENTITY PRIMARY KEY
NOT NULL REFERENCES
“room”(id) ON DELETE
CASCADE
NOT NULL REFERENCES
“theme”(id) ON DELETE
CASCADE
NOT NULL DEFAULT now()

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Description
Clé primaire
Clé étrangère faisant référence à l’id
d’une salle
Clé étrangère faisant référence à l’id
d’un thème
Date et heure de création de
l’enregistrement
Date et heure de dernière modification
de l’enregistrement

Page

23

DOSSIER PROFESSIONNEL (DP)
CUSTOMER
Champ

Type

Spécificités

id

INT

GENERATED ALWAYS AS
IDENTITY PRIMARY KEY
UNIQUE, NOT NULL
UNIQUE, NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL DEFAULT now()

customer_number
email
firstname
lastname
password
created_at

INT
TEXT
TEXT
TEXT
TEXT
TIMESTAMPTZ

updated_at

TIMESTAMPTZ

BOOKING
Champ

Type

Spécificités

Description
Clé primaire
Identifiant unique d’un client
Adresse email du client
Prénom du client
Nom du client
Mot de passe chiffré
Date et heure de création de
l’enregistrement
Date et heure de dernière modification
de l’enregistrement

Description

id

INT

room_id

INT

customer_id

INT

booking_number
start_time

INT
TIMESTAMPTZ

GENERATED ALWAYS AS
IDENTITY PRIMARY KEY
NOT NULL REFERENCES
“room”(id) ON DELETE
CASCADE ON DELETE
CASCADE
NOT NULL REFERENCES
“customer”(id) ON DELETE
CASCADE
UNIQUE, NOT NULL
NOT NULL

created_at

TIMESTAMPTZ

NOT NULL DEFAULT now()

updated_at

TIMESTAMPTZ

Identifiant unique d’une réservation
Date et heure de début d’une
réservation
Date et heure de création de
l’enregistrement
Date et heure de dernière modification
de l’enregistrement

RATING
Champ

Type

Spécificités

Description

GENERATED ALWAYS AS
IDENTITY PRIMARY KEY
NOT NULL REFERENCES
“customer”(id)
NOT NULL REFERENCES
“room”(id)
NOT NULL, DEFAULT now()
NOT NULL
NOT NULL DEFAULT now()

id

INT

customer_id

INT

room_id

INT

date
rating
created_at

TIMESTAMPTZ
INT
TIMESTAMPTZ

updated_at

TIMESTAMPTZ

Page

24

Clé primaire
Clé étrangère faisant référence à l’id
d’une salle
Clé étrangère faisant référence à l’id
d’un client

Clé primaire
Clé étrangère faisant référence à l’id
d’un client
Clé étrangère faisant référence à l’id
d’une salle
Date de la visite
Note entre 1 et 20
Date et heure de création de
l’enregistrement
Date et heure de dernière modification
de l’enregistrement
DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)


Modèle Physique de Données

Cette dernière étape consiste à implanter concrètement une base de données dans un Système de
Gestion de Base de Donnée Relationnelle (SGBDR). D’après le dictionnaire de données réalisé, j’ai écrit
et exécuté le code ci-après en utilisant PostgreSQL comme SGBDR.

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

25

DOSSIER PROFESSIONNEL (DP)

2. Précisez les moyens utilisés :

MCD -> Mocodo (mocodo.xingi.net)
MLD -> Draw.io
Éditeur de code : Visual Studio Code
Langage : SQL

3. Avec qui avez-vous travaillé ?

J’ai travaillé seul sur ce projet.

4. Contexte
Nom de l’entreprise, organisme ou association
Chantier, atelier, service
Période d’exercice

u

u

Du :

u

École O’clock

Projet réalisé à l’issue de la formation
05/10/2020

au :

23/03/2021

5. Informations complémentaires (facultatif)

Page

26

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)

Développer la partie back-end d’une application web ou web mobile en
intégrant les recommandations de sécurité

Activité-type 2
CP6

u

Développer les composants d’accès aux données

1. Décrivez les tâches ou opérations que vous avez effectuées, et dans quelles conditions :

Dans le cadre de la formation O’clock, nous avons codé une Application Programming Interface (API) à
destination d’une application de blog que je vais vous présenter ici.
Après avoir conceptualisé puis mis en place la base de données, nous y avons ajouté des données via un
script sur mesure qui récupère les données dans des JSON avant d’exécuter des requêtes SQL
d’insertion.
Dans cette partie, je vais montrer comment j’ai connecté l’API à la base de données puis comment j’ai
développé les composants d’accès aux données.


Connection à la base de données

L’API étant développée sous Node.js, j’ai commencé par installer le module npm « pg » qui est un client
PostgreSQL.
Pour la connexion, j’ai utilisé un « pool de connexion ». PostgreSQL ne traitant qu’une seule requête à
la fois par client connecté (first-in first-out) et chaque nouvelle connexion mettant du temps à s’établir,
l’utilisation d’un pool permet d’optimiser les temps de connexion. Le pool permet de conserver les
connexions précédemment ouvertes et de les réutiliser pour des connexions ultérieures. Si toutes les
connexions sont occupées, une nouvelle est créée.

Je définis ma variable DATABASE_URL dans un fichier «.env » et le module dotenv installé se chargera de
la stocker dans mes variables d’environnement auxquelles j’accède via process.env .

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

27

DOSSIER PROFESSIONNEL (DP)


Accès aux données

Pour construire l’API, je me suis appuyé sur le Design Pattern MVC (Model-View-Controller) qui met
l’accent sur la séparation des responsabilités.
Dans cette section, je vais présenter les modules en rapport direct avec la donnée (lecture,
enregistrement, etc.) qui, associés à la base de données elle-même, constituent la couche « model ».
Pour ces modules, j’ai créé 2 types de fichiers pour chaque entité de ma base de données : un fichier
qui définit une classe correspondant à l’entité avec ses propriétés et son constructeur et un fichier
« dataMapper » comprenant les méthodes d’accès à la donnée et utilisant les fichiers « classe » pour
renvoyer un objet formaté.
Dans le cadre de ce dossier, je vais vous présenter les fichiers correspondants aux publications (posts).
app>models>post.js

app>models>postMapper.js (découpé en plusieurs captures d’écran ci-dessous)

Page

28

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
Après avoir « importé » la classe Post et la connexion avec la base de données, j’ai créé un objet
postMapper qui contiendra les différentes méthodes d’accès à la base de données et que j’exporterai
pour qu’il puisse être utilisé par les Controllers de mon application.
La première méthode, findOne() , permet de récupérer un post précis dans la base de données via son
id .
La mention async indique que cette fonction a un fonctionnement asynchrone. Ainsi l’utilisation de
l’expression await placée devant une fonction à l’intérieur d’une fonction asynchrone permet de
mettre en pause l’exécution de cette dernière jusqu’à ce que la promesse soit résolue et sa valeur
retournée. Dans notre exemple, l’intérêt est d’attendre le retour de l’appel à la base de données (qui
peut prendre un certain temps) avant d’exécuter la suite du code.
Afin de me prémunir des injections SQL, je n’utilise pas le paramètre categoryId directement dans la
requête. Je place ce paramètre dans un tableau en 2ème paramètre de la méthode db.query() et je le
remplace par un « placeholder » dans la requête. Il s’agit là de requêtes préparées.
À l’inverse, si je place le paramètre reçu directement dans la requête, elle sera envoyée telle quelle
avec ce que l’utilisateur, potentiellement malveillant, a saisi. Si c’est du code SQL, il sera exécuté avec
des conséquences parfois graves sur la base de données.
Si le post est bien trouvé en base de données, je retourne une nouvelle instance de la classe Post
construite à partir des données brutes récupérées.

La méthode findAll() permet de récupérer tous les posts présents en base de données.
La propriété rows de la promesse résultante contient un tableau des enregistrements retournés. On
utilise la méthode map() pour boucler sur ce tableau et créer des instances de la classe Post . On
retourne ensuite ce nouveau tableau d’instances.

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

29

DOSSIER PROFESSIONNEL (DP)

La méthode findByCategory() permet de récupérer tous les articles correspondants à une catégorie. Là
aussi la requête est préparée afin d’éviter les injections SQL de la part d’utilisateurs malveillants.
À l’image de la méthode précédente, on instancie la classe Post à partir des données brutes
récupérées.

Page

30

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
Cette dernière méthode save() permet de sauvegarder un nouveau post en base de données.
Deux scénarios sont envisagés :
- l’id de la catégorie est fourni
- le nom de la catégorie est fourni.
En fonction du cas, la requête SQL sera différente. On crée donc une variable query qui recevra la
bonne syntaxe en fonction du cas. On prépare également une variable contenant les données
communes aux deux cas qu’on passera en deuxième propriété de la méthode db.query()
ultérieurement.
Dans le cas où l’ id est fourni, on dispose de toutes les données nécessaires à l’insertion dans la table
post . On ajoute donc l’ id à notre tableau de données ( data.push() ) et on passe directement les
valeurs ( VALUES ) dans la requête.
Dans le cas où l’ id n’est pas fourni, il faut aller le récupérer dans la table category avant de procéder à
l’insertion dans la table post . Ainsi, au lieu d’utiliser VALUES pour passer les valeurs à insérer, on va
utiliser le mot clé SELECT pour insérer le retour de cette sous-requête. Après avoir ajouté le nom de la
catégorie dans le tableau de données data , on va ainsi pouvoir utiliser ces variables comme avec
VALUES mais également récupérer l’ id de la catégorie en base de données.
Lors de l’insertion d’un nouvel enregistrement en base de données, un id (clé primaire) est généré
automatiquement. On peut récupérer cet id via le mot clé RETURNING ajouté à la fin des deux requêtes.
Une fois la requête exécutée, on ajoute l’ id récupéré au post reçu en entrée. L’objet d’origine étant
passé par référence, pas besoin de le renvoyer avec l’ id généré : il est déjà modifié !
Enfin, à la fin de ce fichier, on exporte l’objet postMapper contenant les méthodes d’accès aux données
pour pouvoir le récupérer et l’exploiter dans le « controller ».

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

31

DOSSIER PROFESSIONNEL (DP)

2. Précisez les moyens utilisés :

Langages : JavaScript, SQL
Technologies : Node.js, Express.js, PostgreSQL, Joi, Sqitch

3. Avec qui avez-vous travaillé ?

Projet réalisé seul dans un premier temps puis amélioré suite à une correction en cours de formation.

4. Contexte
Nom de l’entreprise, organisme ou association
Chantier, atelier, service
Période d’exercice

u

u

Du :

u

École O’clock

Projet réalisé en cours de formation
05/10/2020

au :

23/03/2021

5. Informations complémentaires (facultatif)

Page

32

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
Développer la partie front-end d’une application web ou web mobile
en intégrant les recommandations de sécurité

Activité-type 2
CP7

u

Développer la partie back-end d’une application web ou web mobile

1. Décrivez les tâches ou opérations que vous avez effectuées, et dans quelles conditions :

Après avoir vu la couche Model de l’API, nous allons maintenant jeter un œil à la couche Controller en
charge de gérer les demandes des utilisateurs.
Dans un premier temps, regardons le fichier postController.js de mon application qui regroupe les
méthodes liées aux posts et qui interagit avec le postMapper vue précédemment.


Controller
App>controllers>postController.js (découpé en plusieurs captures d’écran ci-dessous)

Après avoir importé le fichier contenant la classe Post et le fichier postMapper.js contenant les
méthodes d’accès à la base de données, je crée un objet postController qui contiendra les méthodes
et sera exporté.
La première méthode allPosts() permet de récupérer un tableau d’instances de la classe Post via la
méthode findAll() du postMapper et de renvoyer ce résultat sous forme de JSON à l’utilisateur
consommateur de l’API. Comme vu dans le dataMapper, la méthode est là aussi asynchrone pour
pouvoir indiquer qu’il faut attendre la fin de l’exécution de la méthode du dataMapper avant de
poursuivre et d’envoyer la réponse.

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

33

DOSSIER PROFESSIONNEL (DP)

Cette seconde méthode onePost() permet de récupérer un post spécifique via la méthode findOne()
du postMapper qui requiert un paramètre id correspondant à l’ id du post en question.
Pour récupérer cet id , j’utilise la déstructuration pour récupérer la valeur de la propriété id de l’objet
request.params dans une variable id que je passe ensuite à la méthode postMapper.findOne() . Nous
verrons plus tard dans le router que l’ id est une variable dans l’url concerné.
Si aucun post ne correspond à cet id , le catch récupère l’ Error instanciée dans le mapper et dont la
propriété message correspond à la chaîne de caractère passée en argument du constructeur.

Cette méthode postsByCategory() permettant de récupérer tous les posts liés à une catégorie est très
similaire à celle décrite juste au-dessus à la différence que l’ id récupéré dans la request et passé en
argument de la méthode du mapper concerne une catégorie.
On récupère alors un tableau d’instances qu’on renvoie sous forme de JSON en cas de succès.

Page

34

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)

Cette dernière méthode du controller, newpost() , permet d’ajouter un post en base de données.
À la différence des méthodes précédentes, la méthode postMapper.save() attend un objet en
paramètre. Plus précisément une instance de la classe Post qu’on instancie à partir de l’objet
request.body contenant des couples clé-valeur issus d’un formulaire.
On notera qu’il est inutile de récupérer le retour de la méthode du mapper afin de l’utiliser pour la
réponse. En effet, l’objet étant passé par référence, l’ajout du paramètre id via le postMapper agit
directement sur l’objet thePost . Il suffit donc de renvoyer cet objet.
Enfin, à la fin du fichier, on exporte l’objet postController pour pouvoir le récupérer et l’exploiter
depuis le router.


Router
app>Router.js

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

35

DOSSIER PROFESSIONNEL (DP)
Pour construire ce router j’ai utilisé la classe Router d’Express.
J’utilise ensuite les méthodes get() et post() founies pour répondre aux requêtes HTTP GET et POST.
En premier argument, je précise l’url attendue pour exécuter la méthode et en second argument la
méthode de controller à utiliser.
Dans certaines url, les mots précédés de « : » sont des variables. Ici les variables sont nommées id . Ce
nom sera utile pour récupérer les valeurs dans le controller. L’expression régulière (regex) entre
parenthèses indique qu’on attend ici une combinaison de chiffres entre 0 et 9.
On prévoit également une 404 pour l’API si la requête ne satisfait à aucune des routes précédentes.


Point d’entrée de l’API
index.js

Page

36

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)
2. Précisez les moyens utilisés :

Langages : JavaScript, SQL
Technologies : Node.js, Express.js, PostgreSQL, Sqitch

3. Avec qui avez-vous travaillé ?

Projet réalisé seul dans un premier temps puis amélioré suite à une correction en cours de formation.

4. Contexte
Nom de l’entreprise, organisme ou association
Chantier, atelier, service
Période d’exercice

u

u

Du :

u

École O’clock

Projet réalisé en cours de formation
05/10/2020

au :

23/03/2021

5. Informations complémentaires (facultatif)

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

37

DOSSIER PROFESSIONNEL (DP)

Titres, diplômes, CQP, attestations de formation
(facultatif)

Intitulé

Autorité ou organisme

Date

Formation Développeur
web Fullstack JS

École O’clock

2021

Master Programme
Grande École

Toulouse Business School

2016

Programme Bachelor en
Management

ESC Toulouse

2013

Baccalauréat Scientifique

Lycée Bernard Palissy (Agen)

2008

Page

38

DOSSIER PROFESSIONNEL-Version du 11/09/2017

DOSSIER PROFESSIONNEL (DP)

Déclaration sur l’honneur

Je soussigné Laurent Séraline, déclare sur l’honneur que les renseignements fournis dans ce
dossier sont exacts et que je suis l’auteur des réalisations jointes.

Fait à Agen le 27/08/2021 pour faire valoir ce que de droit.

Signature :

DOSSIER PROFESSIONNEL-Version Traitement de texte – Version du 11/09/2017

Page

39


Aperçu du document Dossier_Professionnel-TPDWWM-Laurent _Seraline.pdf - page 1/39

 
Dossier_Professionnel-TPDWWM-Laurent _Seraline.pdf - page 2/39
Dossier_Professionnel-TPDWWM-Laurent _Seraline.pdf - page 3/39
Dossier_Professionnel-TPDWWM-Laurent _Seraline.pdf - page 4/39
Dossier_Professionnel-TPDWWM-Laurent _Seraline.pdf - page 5/39
Dossier_Professionnel-TPDWWM-Laurent _Seraline.pdf - page 6/39
 





Télécharger le fichier (PDF)




Sur le même sujet..





Ce fichier a été mis en ligne par un utilisateur du site. Identifiant unique du document: 01977258.
⚠️  Signaler un contenu illicite
Pour plus d'informations sur notre politique de lutte contre la diffusion illicite de contenus protégés par droit d'auteur, consultez notre page dédiée.