Cahier des charges - QuackNet
================
Le projet “QuackNet” a vocation à être utilisé comme base à la réalisation de différents projets en PHP.
Ce document décrit les attentes fonctionnelles autour de cette interface.
Il n’a pas vocation à être exhaustif et les fonctionnalités décrites dans ce document peuvent être complétées.
## But du projet et sources d’inspiration
Le but de ce projet est de réaliser une interface de réseau social "twitter-like" en ligne.
Cette interface doit permettre à un canard de publier des _coincoins_ en ligne.
Un "coincoin" est une publication.
Les "canards" sont les utilisateurs.
Exemples :
https://www.twitter.com
https://www.facebook.com
## Fonctionnalité 1 : Inscription et authentification
La lecture des coincoins est ouverte à tous.
Le site doit permettre à un tous les visiteurs de s’enregistrer en ligne via un formulaire, il devient alors un _canard_ du site
Un canard (table ducks) dispose :
- D’un Prénom (firstname)
- D’un Nom (lastname)
- D'un nom de canard (unique : duckname)
- D’une adresse email (unique : email).
- D’un mot de passe (password).
Un canard doit pouvoir se connecter au site avec son email ou son duckname et son mot de passe. Une fois connecté, le canard doit pouvoir mettre à jour son Prénom, Nom et mot de passe.
## Fonctionnalité 2 : Les coincoins
Le canard publie un coincoin. Pour créer un coincoin le canard doit être connecté au site. Une annonce est composée de :
- Un message
- Un auteur
- Une photo
- Une date de publication
- Une série de tags
Les coincoins sont accessibles à tous mais la possibilité de commenter les coincoins est réservée aux canard connectés.
Seul l'auteur de la publication peut supprimer. Il peut consulter son profil et celui des autres.
## Fonctionnalité 3 : Commentaires
Un canard peut envoyer un commentaire sur un "coincoin". lui et l'auteur du coincoin originel sont les seuls à pouvoir supprimer ce commentaire.
Peut-être, peut-on imaginer que le commentaire soit juste un autre "coincoin" lié au premier, par un lien parent enfant.
## Fonctionnalité 4 : Modération
Un canard peut être modérateur. Il a le droit de supprimer (masquer) des coincoins qui sont jugées inappropriées. Dès lors, les coincoins ne sont plus visibles sur la plateforme.
## Fonctionnalité 5 : Recherche
Un canard peut trouver des coincoins par le duckname de l'auteur, ou par tags.
La recherche par mot clé se fera par exemple sous la forme d'une recherche dite "full text":
`SELECT * FROM quacks WHERE duckname LIKE '%keyword%'`
## Fonctionnalité 6 : Approfondissement
Le site "QuackNet" devront être accessible via une API.
L'authentification se fait en Basic Auth mais si vous le souhaitez, il est possible de la rendre plus complexe.
### Annonces
- Récupérer la liste des derniers coincoins :
`GET /api/quack`
- Récuperer un coincoin avec son image :
`GET /api/quack/{id}`
- Rechercher des coincoins par tag :
`GET /api/quack/search/?q={tag}`
- Supprimer **son** coincoin :
`DELETE /api/quack/{id}`
### Utilisateur
- S'inscrire :
`POST /api/duck`
- Modifier son compte :
`PUT /api/duck/{id}`
- S'authentifier/récupérer ses informations :
`GET /api/whoami`
# Travail à effectuer
Ce projet est à effectuer en Binôme ou seul, au choix des personnes.
Malgré le caractère à priori peu serieux du projet, il aborde en réalité plusieurs notions proposées par le framework Symfony.
## Ressources mises à disposition
- [Symfony : getting started](https://symfony.com/doc/current/setup.html)
- [Symfony 4.0 learning guide](https://github.com/decima/symfony-learning-guide/blob/master/README.md)
- [Doctrine ORM documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/index.html)
- [Twig documentation](https://twig.symfony.com/doc/2.x/)
- [ressources graphiques](https://unsplash.com/search/photos/duck)