Giter VIP home page Giter VIP logo

limon's Introduction

Limon - Streaming et VOD

enter image description here

Limon est un site web Angular et Symfony qui permet de visionner et acheter des films en ligne, cette application a été crée pour un projet de deuxiÚme année d'informatique (par conséquent) aucun film n'est achetable réellement sur le site).

Le lien vers le site Limon

Fonctionnement

Le site est géré par Angular et échange des données avec une API qui fonctionne en Symfony permet d'échanger les données utilisateurs de gérer les films, les factures et le téléchargement des films.

Le site possĂšde 15 pages:

- La page **catalogue** permet de rechercher un film.
- La page de **profil** consulter son profil.
- La tableau de bord d'**administration** permet de voir les statistiques du site.
- La page de **connexion** permet de se connecter Ă  son compte.
- La page d'**inscription** permet de créer un compte sur le site.
- La page de **historique** permet de consulter l'historique des films.
- La page de **watchlist** permet de regrouper les films que l'on souhaite regarder plus tard.
- La page d'**achat** permet de voir les films achetés sur le site.
- La page d'**abonnement** permet de s'abonner au Premium pour voir des films.
- La page de **téléchargement d'un film** permet de télécharger un film que l'on a acheté.
- La page de **crĂ©ation/Ă©dition d'un film** permet d’ajouter ou modifier un film.
- La page de **liste des membres** permet de gérer tout les membres du site
- La page de **politique de confidentialité** 
- La page de **mentions légales** 
- La page de **documentation de l'API** permet aux développeurs d'accéder à notre catalogue

Technologies utilisées

  • La framework Angular 9.1.7
  • Le framework Symfony 5.0.8
  • Stripe Elements permettant de crĂ©er un formulaire de paiement
  • Gravatar pour la gestion des photo de profil

DĂ©ploiement de l'application

L'application à été déployé sur un serveur dédié virtuel chez OVH, cela comprend la site web limon.app-tricycle.com et l'API à l'adresse api-limon.app-tricycle.com.

Présentation détaillée

Page de catalogue

enter image description here Dans la page de catalogue on peut dĂ©couvrir les derniĂšres nouveautĂ©s du site et les films les plus populaires (qui les meilleurs moyennes). On peut y faire un recherche de film grĂące au champ de recherche et mĂȘme filtrer par catĂ©gorie en sĂ©lectionnant une catĂ©gorie. Une fois la recherche effectuĂ© on peut trier les rĂ©sultats:

  • par date de sortie
  • par prix
  • par ordre alphabĂ©tique

Si la recherche possÚde un trop grande nombre de résultats, ces résultats seront répartis par page.

Page de détails d'un film

enter image description here Sur cette page on peut retrouver les informations d'un film précis:

  • le nom du film
  • la sociĂ©tĂ© de production
  • l'annĂ©e de sortie
  • la catĂ©gorie
  • le synopsis du film
  • le prix du film
  • la note moyenne des utilisateurs
  • les avis des utilisateurs

Notes et commentaires Plus bas dans la page, on peut lire les commentaires des utilisateurs, d'y attribué sa propre note sur 5 et on peut aussi écrire un commentaire.

Page de profil

enter image description here La page de profil permet de consulter ses informations personnelles et d'accéder à différentes pages liées à son compte (historique, watchlist et liste des achats).

On peut aussi modifier les informations de son compte ou le supprimer en cliquant sur l'icĂŽne ⚙ (ParamĂštres) ainsi que se dĂ©connecter de son compte.

Historique

historique Depuis le menu ou le profil on peut accéder à la page d'historique permettant de parcourir la liste des films regardées récemment sur ce compte. On peut y acheter un film (ou le télécharger si il a déjà été acheté) et voir quelques informations sur le film, on peut aussi connaßtre la derniÚre date et heure de visionnage.

Watchlist

watchlist Depuis le menu ou le profil on peut accĂ©der Ă  la watchlist permettant de voir les films que l'on a enregistrĂ©, cette page est similaire Ă  "À regarder plus tard" de YouTube ou une liste de favoris.

On peut l'acheter/télécharger et le supprimer de la watchlist.

Achats

Achats La page d'achats (accessible depuis le profil) permet de consulter les films achetées et leur factures associées, on peut aussi y télécharger le film.

Tableau de bord pour Administrateur

admin L'administration possÚde un tableau de bord pour voir les revenues générer sur le site, le nombre de membres et de ventes au global et sur les 7 derniers jours.

API

Au niveau backend, nous avons choisi de mettre en place une API. Cette API fonctionne grùce au framework Symfony avec une base de données MySQL.

Bundles utilisés

  • knplabs/knp-paginator-bundle : Paginer les rĂ©sultats
  • lexik/jwt-authentication-bundle : GĂ©nĂ©rer et authentifier les utilisateurs avec des Json Web Token
  • nelmio/api-doc-bundle : GĂ©nĂ©rer une doc en ligne pour une partie de l'API
  • nelmio/cors-bundle : GĂ©rer les CORS
  • spipu/html2pdf : GĂ©nĂ©rer des documents PDF depuis un template HTML

🎬 - Films

Endpoints accessible Ă  tous sans token

  • RĂ©cupĂ©rer les films pour la page d'accueil [MĂ©thode GET] : /api/movie/all => Retourne les derniers films ajoutĂ©s et les films les mieux notĂ©s (12 rĂ©sultats pour chaque)
{
	"last_movies": [
		{
			// data du movie
		},...
	],
	"most_rating_movies": [
		{
			// data du movie
		}
	]
}

  • Rechercher un film [MĂ©thode GET] : /api/movie/search?query=marecherche&searchBy=name&orderBy=&page=1

=> Retourne les résultats de recherche

query : le contenu de la recherche searchBy : ParamÚtre facultatif. L'élément à rechercher : la valeur est soit name ou category orderBy : ParamÚtre facultatif . Trier les résultats

Par défaut, les résultats sont retourné dans l'ordre. orderBy=desc : trie par ordre décroissant (plus récent au moins récent) orderBy=date-asc : trie par date de parution croissante (du moins récent au plus récent) orderBy=date-desc : trie par date de parution décroissante (récent au moins récent) orderBy=price-asc : trie par prix croissant orderBy=price-desc trie par prix décroissant

Les résultats sont paginés page : par défaut à 1.

Pagination :

  • current_page
  • items_per_page
  • total_item_count
  • nb_pages
{
	"current_page": 1,
	"nb_pages": 3, 
	"movies": [
		{...}
	],
	"items_per_page": 18,
	"total_item_count": 39
}

  • AccĂ©der Ă  un film [MĂ©thode GET] : /api/movie/{id} {id} correspond Ă  l'id du film en base

=> Retourne le film, les avis liés au film, la note moyenne

{
	"movie": {
		...(data du film)
		avg_score: 1
	}
	"buy": true,
	"user_note": null
}

  • RĂ©cupĂ©rer les diffĂ©rentes catĂ©gories de film : [MĂ©thode GET] : /api/category/all => Retourne toutes les catĂ©gories
[
	{
		"id": 37,
		"name: "Action"
	},
	...
]

Endpoints accessible avec token

  • TĂ©lĂ©charger un film [Method GET] : /api/movie/{id}/download {id} : id du film => Retourne le film

🔐 - Authentification et inscription

Les endpoints doivent ĂȘtre accessible par tous

  • Inscription : [MĂ©thode POST] /api/register DonnĂ©es Ă  envoyer :
{
	"email": "monemail",
	"password": "monsuperMOTDEPASSE",
	"birthday": "1997-09-01",
	"fullname": "Arthur Geay"
}

=> Renvoie un token, le rÎle de l'utilisateur, la date d'expiration du token et si l'utilisateur est abonné ou non

  • Connexion [MĂ©thode POST] /api/login
{
	"username": "[email protected]",
	"password": "limon"
}

=> Renvoie un token, le rÎle de l'utilisateur ainsi qu'une date d'expiration du token et si l'utilisateur est abonné ou non


👹‍🎹 - Profil utilisateur

Endpoint accessible uniquement au personne connectĂ©. Envoi du token dans l'entĂȘte de la requĂȘte

  • Affichage profil utilisateur [MĂ©thode GET] : /api/user/ => Retourne les infos du profil utilisateur de la personne connectĂ©
{

	"id": 199,

	"email": "[email protected]",

	"roles": [

		"ROLE_USER"

	],

	"fullname": "Arthur Geay",

	"birthday": "1997-09-01T00:00:00+00:00",

	"subscription": {

	"id": 76,

	"price": 60,

	"end_date": "2021-06-06T15:41:24+00:00",

	"activate": true,

	"date_subscription": "2020-06-06T15:41:24+00:00"

	}

}

ROUTE ACCESSIBLE A L'UTILISATEUR ET AUX ADMINISTRATEUR

  • Modifier profil utilisateur pour l'utilisateur [MĂ©thode PUT]: /api/user/
  • Modifier profil utilisateur par un administrateur [MĂ©thode PUT] : /api/user/?userId=443 userId = l'id de l'utilisateur
{
	"email": "monemail",
	"birthday": "1997-09-01",
	"fullname": "Arthur Geay"
}

ROUTE ACCESSIBLE A L'UTILISATEUR ET AUX ADMINISTRATEUR

  • Supprimer son compte par un utilisateur [MĂ©thode DELETE] : /api/user/
  • Supprimer un compte par un administrateur [MĂ©thode DELETE] : /api/user/?userId=443
  • RĂ©cupĂ©rer l'historique des films achetĂ©s : [MĂ©thode GET] : /api/user/movies-purchased?page=2 ParamĂštre page par dĂ©faut Ă  1
  • RĂ©cupĂ©rer l'historique des films achetĂ©s par un administrateur : [MĂ©thode GET] : /api/user/movies-purchased?userId=442

  • RĂ©cupĂ©rer l'historique des films regardĂ©s : [MĂ©thode GET] : /api/user/movies-watched?page=2
  • Ajouter un film Ă  l'historique des films visionnĂ©s : [MĂ©thode GET] : /api/user/movie-watch/{id} (id du film)

📝 - Avis & Score

Endpoint accessible uniquement au personne connectĂ©. Envoi du token dans l'entĂȘte de la requĂȘte

  • Donner une note au film [POST] /api/rating/{id du film} DonnĂ©es Ă  envoyer :
{
	"score": 2
}
  • Donner un avis au film [MĂ©thode POST] : /api/review/{id du film} DonnĂ©es Ă  envoyer :
{
	"message": "Mon avis"
}
  • Modifier un avis [MĂ©thode PUT]: /api/review/{id de l'avis} DonnĂ©es Ă  envoyer :
{
	"message": "Mon avis"
}
  • Supprimer un avis [MĂ©thode DELETE] : /api/review/{id de l'avis} (Par l'auteur ou l'administrateur)

💰 - Abonnement

Endpoint accessible uniquement au personne connectĂ©. Envoi du token dans l'entĂȘte de la requĂȘte

  • S'abonner Ă  la formule [MĂ©thode GET] : /api/subscription

đŸ’” - Achat

Endpoint accessible uniquement au personne connectĂ©. Envoi du token dans l'entĂȘte de la requĂȘte

  • Achat d'un film : [MĂ©thode GET]: /api/purchase/{id du film}
  • TĂ©lĂ©chargement d'une facture [MĂ©thode GET] : /api/purchase/invoice/{id de l'achat}

đŸ•”ïžâ€â™‚ïž - Watchlist

Endpoint accessible uniquement au personne connectĂ©. Envoi du token dans l'entĂȘte de la requĂȘte

  • AccĂ©der Ă  sa watchlist : [MĂ©thode GET] /api/watchlist
  • Ajouter un film : [MĂ©thode POST] /api/watchlist DonnĂ©es Ă  envoyer (id du film):
{
	"movie": 345
}
  • Supprimer un film : [MĂ©thode DELETE] /api/watchlist/{id du film}
  • VĂ©rifier si un film existe dĂ©jĂ  dans la watchlist : [MĂ©thode GET] /api/watchlist/added/{id}

đŸ‘źâ€â™€ïž - Administration

Endpoint accessible uniquement au personne connectĂ© (ADMIN). Envoi du token dans l'entĂȘte de la requĂȘte

  • Stats du site : [MĂ©thode GET] /api/admin/stats
  • Liste des membres : [MĂ©thode GET] /api/admin/users?page=1

Membres

  • Afficher un profil : [MĂ©thode GET] /api/user/?userId=33
  • Modifier un membre : [MĂ©thode PUT] /api/user/?userId=33
  • Supprimer un membre : [MĂ©thode DELETE] /api/user/?userId=33

** Avis **

  • Supprimer l'avis d'un membre : [MĂ©thode DELETE] /api/review/{id de l'avis}

** Historique des films achetés **

  • RĂ©cupĂ©rer l'historique des films achetĂ©s par un administrateur : [MĂ©thode GET] : /api/user/movies-purchased?userId=442

Films

Endpoint accessible uniquement au personne connectĂ© (ADMIN). Envoi du token dans l'entĂȘte de la requĂȘte

  • Ajouter un film : [MĂ©thode POST] /api/movie/

Données à envoyer :

{
	"title": "montitre"
	"date": "2010-01-01",
	"price": "3.5"
	"production": "OUAIS"
	"hero_img": "url",
	"poster_img": "url",
	"category": "Action",
	"synopsis": "oeeoufe"
}
  • Modifier un film : [MĂ©thode PUT] /api/movie/{id film} DonnĂ©es Ă  envoyer :
{
	"title": "montitre"
	"date": "2010-01-01",
	"price": "3.5"
	"production": "OUAIS"
	"hero_img": "url",
	"poster_img": "url",
	"category": "Action",
	"synopsis": "oeeoufe"
}
  • Supprimer un film : [MĂ©thode DELETE] /api/movie/{id}

limon's People

Contributors

jeremdlcn avatar arthurgeay avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.