wip description of nestjs and list of products

main
Shad Amethyst 2 years ago
parent 466cf34f14
commit f2e0946f01

@ -9,7 +9,15 @@
@misc{momentcare,
author={Moment},
title={Moment Care - Un écosystème digital pour votre établissement de santé},
hopublished="\url{https://moment.care/}",
howpublished="\url{https://moment.care/}",
year=2023,
note="[En ligne; accédé le 30 Janvier 2023]"
}
@misc{nestjs,
author={NestJS},
title={NestJS - A progressive Node.JS framework},
howpublished="\url{https://nextjs.com/}",
year=2023,
note="[En ligne; accédé le 31 Janvier 2023]"
}

@ -26,8 +26,37 @@
% Requires xelatex to run (or maybe also lualatex)
\usepackage{utbmcovers}
% From https://tex.stackexchange.com/questions/89574/language-option-supported-in-listings
\lstdefinelanguage{JavaScript}{
keywords={
typeof, new,
abstract, class, interface, type, function, return,
try, catch, finally,
switch, case, break,
var, let, const,
if, else,
for, while, in, of, do,
true, false, null, undefined
},
keywordstyle=\color{blue}\bfseries,
ndkeywords={
export, implements, import, this,
private, public, readonly, constructor,
@Inject, @Injectable, @Controller, @Module
},
ndkeywordstyle=\color{darkgray}\bfseries,
identifierstyle=\color{black},
sensitive=false,
comment=[l]{//},
morecomment=[s]{/*}{*/},
commentstyle=\color{purple}\ttfamily,
stringstyle=\color{red}\ttfamily,
morestring=[b]',
morestring=[b]"
}
\definecolor{bgColor}{rgb}{0.95,0.95,0.92}
\lstdefinestyle{JS}{
\lstdefinestyle{JavaScript}{
backgroundcolor=\color{bgColor},
commentstyle=\color{gray},
keywordstyle=\color{magenta},
@ -44,7 +73,7 @@
showstringspaces=false,
showtabs=false,
tabsize=2,
language=Javascript
language=JavaScript
}
\newfontfamily{\Tahoma}{Tahoma}
@ -150,6 +179,8 @@ différents pôles:
futurs. Elle met en place le business plan, amène à l'entreprise de nouvelles opportunités
de partenariat et négocie les prix lors de la vente des produits de l'entreprise.
% TODO: reste
\end{description}
\newpage
@ -196,8 +227,162 @@ différents pôles:
% Tests unitaires
%
\subsection{Produits de Moment}
\subsubsection{Flymingo}
\entity{Flymingo} est le produit principal de \entityb{Moment}:
% Pitch de Moment, dire sur quoi c'est déployé
Ce produit est composé d'un serveur, nommé \entity{Flymingo Box}, sur lequel tournent plusieures applications:
\begin{itemize}
\item Une application web, \entity{Flymingo Digital}, sur laquelle les passagers peuvent se connecter.
\item La \entity{Content API}, qui est une API pour accéder aux informations sur les différents divertissements
disponibles sur le serveur. Cette API permet aux clients d'avoir un certain degré de customabilité.
Cette API sert également les différents contenus (vidéo, musique, magazines).
% Zirock?
\end{itemize}
\subsubsection{Mint}
% TODO: add logo floating to the right
\entity{Mint} est le produit que \entityb{Moment} développe et déploie en ce moment dans les cliniques de santé:
\begin{description}
\item[Mint Admin] est une application web permettant aux clinique de fixer les prix
pour les offres que celles-cis souhaite mettre à disposition, ainsi que de gérer l'assignement des différents
appareils (comme les télévisions et les tablettes) aux chambres, des différents patients à ces chambres,
et des offres aux patients.
\item[Mint Digital] est une application web que les patients des cliniques utilisent
pour se connecter, acheter des offres en ligne, regarder des films, documentaires, magazines et écouter de la musique.
\item[Mint Service] est le back-end avec lequel \entity{Mint Admin} et \entity{Mint Digital} communiquent.
\entity{Mint Service} expose une API permettant à \entity{Mint Admin} de faire des modifications aux offres et aux patients,
et à \entity{Mint Digital} de permettre aux utilisateurs de se connecter et d'acheter des offres en ligne.
\item[Mint Tab] est une application pour tablettes \term{iPad}, qui permet aux patients des cliniques
d'accéder au même contenu que sur \entity{Mint Digital}.
\item[Mint TV] est une application tournant sur les télévisions connectées, qui permet aux patients des
cliniques d'accéder au même contenu que sur \entity{Mint Digital}.
\end{description}
\section{Travail réalisé}
Durant ce stage, j'ai surtout travaillé sur les applications suivantes:
\begin{itemize}
\item Mint Service
\item Mint Admin
\item Mint Digital
\item Mint TV et Mood TV
\end{itemize}
\subsection{Mint Service}
Mint Service est une application construite avec \term{NestJS}.
NestJS est un framework permettant de construire des applications côté serveur en Javascript,
et de s'assurer que ces applications soient à la fois sûres, efficaces et flexibles \cite{nestjs}.
\subsubsection{NestJS et l'organisation du code dans Mint Service}
% TODO: hiérarchiser l'argumentaire
NestJS emploie à son coeur les principes de \term{modularité} et d'\term{inversion de contrôle} (\term{IoC}).
L'application est séparée en différents modules, permettant de faire une séparation claire entre les morceaux de codes utilisés
pour répondre à différents besoins.
Chaque module contient des \term{services}, aussi appelés \term{providers}, qui contiennent du code métier
(contacter la base de donnée, traiter de l'information, etc).
Les modules ont également des \term{controlleurs}, qui permettent de définir les différents chemins qui seront exposés
sur le réseau.
Un contrôleur est responsable pour transformer les requêtes, vérifier leur légitimité, puis il appele les méthodes
d'un ou plusieurs services avant de transformer la réponse puis l'envoyer au client.
% TODO: trouver une source
La séparation entre \term{contrôleur} et \term{service} permet d'avoir une claire \term{séparation des préoccupations}:
les contrôleurs s'occupent de gérer, valider et répondre aux requêtes faites par un client,
tandis que les services s'occupent de l'implémentation de la logique permettant de satisfaire la requête.
Il devient également plus simple avec ce système de modifier l'implémentation de la logique côté service
sans mettre en danger la fonctionnalité du service avec d'autres applications: la gestion et la vérification
des requêtes restant inchangée.
Pour limiter le couplage entre les services, et pour simplifier la réutilisation des services,
NestJS permet de faire de l'\term{injection de dépendances} dans les services et dans les contrôleurs,
d'une manière similaire framework \entity{Spring} en Java.
Par exemple, si un service \textit{ParentService} souhaite utiliser des méthodes d'un service \textit{ChildService},
alors au lieu de créer une instance de \textit{ChildService} dans \textit{ParentService}, \textit{ParentService}
indique qu'il aimerait recevoir une instance de \textit{ChildService}, et l'utilisateur de \textit{ParentService}
est responsable pour fournir à celui-ci une instance de \textit{ChildService}.
NestJS simplifie ce processus, en permettant aux modules de faire la liste des services disponibles,
et en détectant automatiquement quels services dépendent de quels services à partir des arguments du constructeur.
NestJS construit ensuite les instances de ces services et les \term{injecte} en paramètre aux services en dépendant.
\begin{lstlisting}[style=JavaScript]
export abstract class IChildService {
// ...
}
@Injectable(IChildService)
export class ChildService implements IChildService {
// ...
}
@Injectable()
export class ParentService {
private childService: IChildService;
constructor(
childService: IChildService
) {
this.childService = IChildService;
}
// ...
}
@Module({
providers: [
ChildService,
ParentService
],
exports: [
ParentService
]
})
export class ParentModule {}
\end{lstlisting}
Les modules peuvent enfin exporter un sous-ensemble de ces services, qui peuvent alors être facilement réutilisés
à d'autres endroits de l'application sans avoir à reconfigurer l'ensemble des dépendances de ces services:
\begin{lstlisting}[style=JavaScript]
@Injectable()
export class MyService {
constructor(
parentService: ParentService
) {
// ...
}
}
@Module({
imports: [
// Comme ParentModule exporte ParentService,
// ce service est facilement rendu disponible ici pour MyService:
ParentModule
],
providers: [
MyService
]
})
export class MyModule {}
\end{lstlisting}
\newpage
\bibliographystyle{plain}

Loading…
Cancel
Save