HyCritics est une application web développée avec Angular qui permet aux utilisateurs de découvrir, noter et critiquer des médias (films, séries, livres).
-
Installer les dépendances :
npm install
-
Lancer le serveur JSON (backend) :
npm run json-server
-
Lancer l'application Angular (frontend) :
npm start
L'application sera accessible à l'adresse
http://localhost:4200/.
Ce projet respecte toutes les exigences techniques demandées. Voici un aperçu de leur implémentation :
Le backend de l'application est simulé à l'aide de JSON Server. La base de données se trouve dans backend/db.json et contient 5 tables :
users: pour la gestion des utilisateurs.medias: pour les informations sur les médias.critics: pour les critiques rédigées par les utilisateurs.genres: pour les genres de médias.platforms: pour les plateformes de diffusion.
Un système d'authentification simple a été mis en place :
- Pages : Les composants pour la connexion et l'inscription se trouvent dans
src/app/pages/loginetsrc/app/pages/register. - Service : La logique de connexion, d'inscription et de gestion de la session utilisateur est gérée par
src/app/services/auth.service.ts. - Garde de route : Un
AuthGuard(src/app/guards/auth.guard.ts) protège les routes qui nécessitent une authentification.
Le fichier de routage src/app/app.routes.ts définit l'ensemble des routes de l'application. On y trouve :
- Plus de 3 routes en dehors de la page d'accueil (
/medias,/critics,/login, etc.). - Route avec paramètre (
route param) : La routemedias/:idpermet d'afficher la page de détail d'un média spécifique. Le composantsrc/app/pages/detail-media/detail-media.tsrécupère cetidpour charger les bonnes informations. - Route avec paramètres de requête (
query params) : La pagesrc/app/pages/list-medias/list-medias.tsutilise les query params pour filtrer les médias par genre ou pour effectuer une recherche.
Chaque page de l'application est un composant Angular dédié, situé dans le dossier src/app/pages. Par exemple :
src/app/pages/home/home.tspour la page d'accueil.src/app/pages/list-medias/list-medias.tspour la liste des médias.src/app/pages/add-critic/add-critic.tspour le formulaire d'ajout de critique.
Le projet inclut plusieurs composants réutilisables, notamment :
media-resume(src/app/components/media-resume/) :@Input(): Reçoit un objetmediaà afficher.@Output(): Émet un événementfavoriteTogglelorsque l'utilisateur clique sur le bouton pour ajouter/retirer un média de ses favoris.
stars-note(src/app/components/stars-note/) : Affiche une note sous forme d'étoiles et prend la note en@Input().card(src/app/components/card/) : Composant générique pour afficher des cartes génériques, avec des@Input()pour les données à afficher et un@Output()pour gérer les interactions.
Le projet utilise plusieurs services pour séparer la logique métier et la communication avec l'API. Ils se trouvent dans src/app/services/ :
auth.service.ts: Gère l'authentification.medias.service.ts: Gère les opérations CRUD pour les médias.critics.service.ts: Gère les opérations CRUD pour les critiques.users.service.ts: Gère les informations des utilisateurs.
Le formulaire pour ajouter un média utilise également un ReactiveForm avec des validateurs similaires.
- Composant :
src/app/pages/register-media/register-media.ts. - Contrôles : Le formulaire contient plusieurs
FormControl(title,type,year,description, etc.). - Validateurs : Il utilise des validateurs tels que
Validators.required,Validators.minLength, etValidators.patternpour garantir la qualité des données saisies.
- Directive custom : La directive
golden-border(src/app/directives/golden-border.directive.ts) ajoute une bordure dorée et une ombre à un élément lorsqu'on le survole. Elle est utilisée sur les cartes des médias. - Pipes custom :
truncate.pipe.ts: Tronque un texte trop long et ajoute "...".relative-time.pipe.ts: Affiche une date sous forme de temps relatif (ex: "il y a 2 heures").
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- Sébastien BRANLY
- Guillaume MAUGIN
- Louis RÉVILLE