Code Monkey home page Code Monkey logo

foodbyte's People

Contributors

ehrhart avatar f-hajer avatar haroun3amri avatar

Watchers

 avatar  avatar

foodbyte's Issues

Créer le schéma pour les recettes

Proposition de schéma

Recipe

_id (ObjectID)
name (String)
user (User)
text (String) - recipe text
ingredients (Array[String])
createdAt (Date, default: now)
updatedAt (Date, default: now)

Créer les routes pour les produits

Tâches

  • GET /products
  • GET /products/:id

Proposition de routes

GET /products
  Description: Returns the list of all products.
  Query Parameters:
   - page: current page number (optional, default: 1)
   - per_page: number of results per page (optional, default: 20, max: 100)

GET /products/:id
  Description: Returns a specific product based on its identifier.
  Query Parameters: none

Évaluation des recettes

L'utilisateur doit pouvoir donner une note aux recettes (entre 1 et 5)

Frontend

  • Affichage de la note (sous forme d'étoiles ou autre)
  • Envoi de la nouvelle note (via PUT /recipes/:id/rating)

Backend

  • Ajout d'une propriété ratings sur le modèle Recipe
  • Ajout d'une propriété avgRating sur le modèle Recipe
  • Création de nouvelles routes

Routes :

PUT /recipes/:id/rating/:rating
  Description: Updates the rating of the current user for a recipe
  Authentication Required: YES
  Query Parameters:
   - id: the recipe id
   - rating: the rating (1 to 5)

  Example:
   - /recipe/187/rating/4 (rating of 4 for recipe 187)

Créer les routes pour les recettes

Proposition de routes

GET /recipes
  Description: Returns the list of all recipes.
  Query Parameters:
   - page: current page number (optional, default: 1)
   - per_page: number of results per page (optional, default: 20, max: 100)

GET /recipes/:id
  Description: Returns a specific recipe based on its identifier.
  Query Parameters: none

POST /recipes
  Adds a new recipe.
  Query Parameters: none
  Body Data:
   - name: recipe name (required)
   - text: recipe text (required)

PUT /recipes/:id
  Updates an existing recipe.
  Query Parameters:
   - id: recipe identifier
  Body Data:
   - name: recipe name (required)
   - text: recipe text (required)

DELETE /recipes/:id
  Deletes an existing recipe.
  Query Parameters:
   - id: recipe identifier

Créer le schéma pour les magasins

Proposition de schéma

Shop

_id (ObjectID)
name (String)
location (GeoJSON)
createdAt (Date, default: now)
updatedAt (Date, default: now)

Créer la vue détails d'un produit

Vue détails d'une recette, qui doit comprendre :

  • Nom du produit
  • Liste d'ingrédients
  • Liste de nutriments
  • Liste des prix qui auront été ajoutés par les utilisateurs
  • Bouton pour ajouter un prix (voir #15 pour la vue d'ajout de prix)
  • Photo(s)
  • etc...

Tri des produits

Tri des produits selon différents critères

Paramètres :

  • s (valeurs : name, created, updated, score)
  • o (valeurs : asc, desc)

Exemples :
/products?o=asc&s=name - Tri alphabétique ascendant (a-z)
/products?q=chocolat&o=desc&s=score - Tri par score descendant (le + élevé en premier)

Créer la route pour ajouter un prix sur un produit

Proposition de routes :

POST /products/:id/prices
  Adds a new price for a specific product.
  Query Parameters:
   - id: product id
  Body Data:
   - price: price amount (required)
   - shop: id of the shop (required)
   - date: date when the price was last seen (required)

PUT /products/:productId/prices/:priceId:
  Adds a new price for a specific product.
  Query Parameters:
   - productId: product id
   - priceId: price id
  Body Data:
   - price: price amount (required)
   - shop: id of the shop (required)
   - date: date when the price was last seen (required)

Assigner un score global au produits selon certains critères

Il est indiqué que nous devons assigner un score (une note) à chaque produit, en fonction de critères que nous devons définir.

  • Quels critères utiliser ?
  • Comment assigner le score ? (lors de l'import des produits via update-openfoodfacts-products.js ? dynamiquement lors de l'affichage de la vue ?)

Tri des recettes

Tri des recettes selon différents critères

Paramètres :

  • s (valeurs : name, created, updated, comments, rating)
  • o (valeurs : asc, desc)

Exemples :
/recipes?o=asc&s=name - Tri alphabétique ascendant (a-z)
/recipes?q=blanquette&o=desc&s=comments - Tri par nombre de commentaires descendant (le + grand nombre en premier)

Créer le schéma pour les utilisateurs

Proposition de schéma

Recipe

_id (ObjectID)
fullname (String, required)
email (String, required)
hashedPassword (String, required)
roles (Array[String])
createdAt (Date, default: now)
updatedAt (Date, default: now)

Créer la vue détails d'un magasin

Vue détails d'une magasin, qui doit comprendre :

  • Nom du magasin
  • Géolocalisation (carte Google Maps)
  • Liste des produits qui ont été répertoriés sur ce magasin (lorsque l'utilisateur a ajouté un prix à un produit, il a également identifié le magasin)

Créer le schéma pour les produits

Schéma :

  • _id (ObjectID)
  • off_id (String)
  • name (String, required)
  • nutrition_grade (String)
  • brands (Array[String])
  • ingredients_text (String)
  • ingredients (Array[Object])
  • nutriments (Array[Object])
  • images

Créer la vue d'ajout de prix sur un produit

Lorsque l'utilisateur clique sur le bouton "Ajouter un prix", une vue s'affiche avec un formulaire contenant les champs suivants :

  • Prix du produit
  • Magasin (liste des magasins disponibles)
  • Date où le prix a été constaté

La liste des magasins se récupère grâce à la route /shops (voir #21)
La soumission du formulaire envoie une requête POST /products/:id/prices (voir #25)

Erreur de dépendance manquante (BrowserAnimationsModule)

Lors du chargement de la vue Recettes, j'obtiens l'erreur suivante dans la console :

ERROR Error: "Found the synthetic property @animate. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application."
checkNoSyntheticProp11Angular	View_RecipeComponent_0 RecipeComponent.html:107
debugUpdateRenderer24Angular__tryOrUnsub5RxJSemit11Angular RecipeComponent.html:19:10
	View_RecipeComponent_0 RecipeComponent.html:19
proxyClass16Angular__tryOrUnsub5RxJSemit11Angular	emit
	checkStable
	onHasTask
	hasTask
	_updateTaskCount
	_updateTaskCount
	runTask
	drainMicroTaskQueue
	invokeTask
	invokeTask
	globalZoneAwareCallback

Ajouter un commentaire sur une recette

Frontend

Ajouter sur la vue détail d'une recette :

  • La liste des commentaires qui ont été postés
  • Un formulaire permettant d'ajouter un commentaire

Backend

  • Modifier le schéma Recette pour stocker les commentaires
  • Ajouter les routes permettant de retourner les commentaires existants, ou d'ajouter un nouveau commentaire

Créer la vue détails d'une recette

Vue détails d'une recette, qui doit comprendre :

  • Nom de la recette
  • Texte de la recette
  • Nom de l'utilisateur (avec lien vers son profile ?)
  • Date de création/mis à jour
  • Liste d'ingrédients qui auront été détectés dans le texte
    etc...

Créer les routes pour les utilisateurs

Proposition de routes

POST /login
  Description: Authenticates an user.
  Query Parameters: none
  Body Data:
   - email: user email (required)
   - password: user password (required)

POST /register
  Description: Creates a new account.
  Query Parameters: none
  Body Data:
   - fullname: user name (required)
   - email: user email (required)
   - password: user password (required)
   - repeatPassword: user password (required)

GET /me
  Description: Returns the logged user informations.
  Query Parameters: none
  Authentication Required: Yes

Tests backend

Le projet requiert que des tests unitaires soient effectués sur le backend.

Pour tester : Mocha

Backend - Mot de passe oublié

  • Modifier le modèle User :

    • Ajouter passwordResetToken et passwordResetAt
  • Créer les routes :

POST /password_reset
  Description: Sends an instruction email to the user to let him reset his password.
  Query Parameters: none
  Body Data:
   - email: user email (required)

POST /password_reset/:token
  Description: Resets the user password
  Query Parameters: none
  URL Parameters:
   - :token, the unique password reset token
  • Configurer Mailgun (addon Heroku disponible) pour l'envoi de mails

Template pour le mot de passe oublié :

We heard that you lost your foodByte password. Sorry about that!

But don’t worry! You can use the following link within the next day to reset your password:

https://foodbyte-app.herokuapp.com/password_reset/<password_reset_token>

If you don’t use this link within 24 hours, it will expire. To get a new password reset link, visit https://foodbyte-app.herokuapp.com/password_reset

Thanks,
Your friends at foodByte

Créer les routes pour les magasins

Proposition de routes

GET /shops
  Description: Returns the list of all shops.
  Query Parameters:
   - page: current page number (optional, default: 1)
   - per_page: number of results per page (optional, default: 20, max: 100)

GET /shops/:id
  Description: Returns a specific shop based on its identifier.
  Query Parameters: none

Schéma : voir #20

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.