== Besoins utilisateurs Nous souhaitons développer un site où un utilisateur donné peut créer une liste contenant des souhaits et où d'autres utilisateurs, authentifiés ou non, peuvent choisir les souhaits à la réalisation desquels ils souhaitent participer. Il sera nécessaire de s'authentifier pour : * Créer une liste associée à l'utilisateur en cours * Ajouter un nouvel élément à une liste Il ne sera pas nécessaire de s'authentifier pour : * Faire une promesse d'offre pour un élément appartenant à une liste, associée à un utilisateur. L'utilisateur ayant créé une liste pourra envoyer un email directement depuis le site aux personnes avec qui il souhaite partager sa liste, cet email contenant un lien permettant d'accéder à cette liste. A chaque souhait, on pourrait de manière facultative ajouter un prix. Dans ce cas, le souhait pourrait aussi être subdivisé en plusieurs parties, de manière à ce que plusieurs personnes puissent participer à sa réalisation. Un souhait pourrait aussi être réalisé plusieurs fois. Ceci revient à dupliquer le souhait en question. == Besoins fonctionnels === Gestion des utilisateurs Pour gérer les utilisateurs, nous allons faire en sorte de surcharger ce que Django propose: par défaut, on a une la possibilité de gérer des utilisateurs (identifiés par une adresse email, un nom, un prénom, ...) mais sans plus. Ce qu'on peut souhaiter, c'est que l'utilisateur puisse s'authentifier grâce à une plateforme connue (Facebook, Twitter, Google, etc.), et qu'il puisse un minimum gérer son profil. === Gestion des listes ==== Modèlisation Les données suivantes doivent être associées à une liste: * un identifiant * un identifiant externe (un GUID, par exemple) * un nom * une description * le propriétaire, associé à l'utilisateur qui l'aura créée * une date de création * une date de modification ==== Fonctionnalités * Un utilisateur authentifié doit pouvoir créer, modifier, désactiver et supprimer une liste dont il est le propriétaire * Un utilisateur doit pouvoir associer ou retirer des souhaits à une liste dont il est le propriétaire * Il faut pouvoir accéder à une liste, avec un utilisateur authentifier ou non, *via* son identifiant externe * Il faut pouvoir envoyer un email avec le lien vers la liste, contenant son identifiant externe * L'utilisateur doit pouvoir voir toutes les listes qui lui appartiennent === Gestion des souhaits ==== Modélisation Les données suivantes peuvent être associées à un souhait: * un identifiant * identifiant de la liste * un nom * une description * le propriétaire * une date de création * une date de modification * une image, afin de représenter l'objet ou l'idée * un nombre (1 par défaut) * un prix facultatif * un nombre de part, facultatif également, si un prix est fourni. ==== Fonctionnalités * Un utilisateur authentifié doit pouvoir créer, modifier, désactiver et supprimer un souhait dont il est le propriétaire. * On ne peut créer un souhait sans liste associée * Il faut pouvoir fractionner un souhait uniquement si un prix est donné. * Il faut pouvoir accéder à un souhait, avec un utilisateur authentifié ou non. * Il faut pouvoir réaliser un souhait ou une partie seulement, avec un utilisateur authentifié ou non. * Un souhait en cours de réalisation et composé de différentes parts ne peut plus être modifié. * Un souhait en cours de réalisation ou réalisé ne peut plus être supprimé. * On peut modifier le nombre de fois qu'un souhait doit être réalisé dans la limite des réalisations déjà effectuées. === Gestion des réalisations de souhaits ==== Modélisation Les données suivantes peuvent être associées à une réalisation de souhait: * identifiant du souhait * identifiant de l'utilisateur si connu * identifiant de la personne si utilisateur non connu * un commentaire * une date de réalisation ==== Fonctionnalités * L'utilisateur doit pouvoir voir si un souhait est réalisé, en partie ou non. Il doit également avoir un pourcentage de complétion sur la possibilité de réalisation de son souhait, entre 0% et 100%. * L'utilisateur doit pouvoir voir la ou les personnes ayant réalisé un souhait. * Il y a autant de réalisation que de parts de souhait réalisées ou de nombre de fois que le souhait est réalisé. === Gestion des personnes réalisants les souhaits et qui ne sont pas connues ==== Modélisation Les données suivantes peuvent être associées à une personne réalisant un souhait: * un identifiant * un nom * une adresse email facultative ==== Fonctionnalités