ehrhart / foodbyte Goto Github PK
View Code? Open in Web Editor NEWProgrammable Web project 2019
Home Page: https://foodbyte-app.herokuapp.com/
Programmable Web project 2019
Home Page: https://foodbyte-app.herokuapp.com/
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)
Tâches
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
L'utilisateur doit pouvoir donner une note aux recettes (entre 1 et 5)
ratings
sur le modèle RecipeavgRating
sur le modèle RecipeRoutes :
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)
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
Proposition de schéma
Shop
_id (ObjectID)
name (String)
location (GeoJSON)
createdAt (Date, default: now)
updatedAt (Date, default: now)
Vue détails d'une recette, qui doit comprendre :
Vue listing magasins, qui doit comprendre une liste paginée de magasins.
Sur Firefox 65.0, lorsque je clique sur le bouton détails d'une recette, rien ne se passe (la popup de détails ne s'affiche pas). Aucune erreur dans la console.
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)
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)
Il est indiqué que nous devons assigner un score (une note) à chaque produit, en fonction de critères que nous devons définir.
update-openfoodfacts-products.js
? dynamiquement lors de l'affichage de la vue ?)Vue listing recette, qui doit comprendre une liste paginée de produits.
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)
Le fichier swagger.json doit être mis à jour avec la dernière version des routes disponibles.
Réfléchir à la possibilité d'utiliser :
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)
Vue détails d'une magasin, qui doit comprendre :
La propriété images
est toujours vide après exécution du script d'import des produits d'OFF.
Schéma :
Lorsque l'utilisateur clique sur le bouton "Ajouter un prix", une vue s'affiche avec un formulaire contenant les champs suivants :
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)
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 sur la vue détail d'une recette :
Vue détails d'une recette, qui doit comprendre :
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
Le projet requiert que des tests unitaires soient effectués sur le backend.
Pour tester : Mocha
Vue création d'un nouveau compte, comprenant un formulaire avec :
Voir #30 pour les appels à l'API.
Modifier le modèle User :
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
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
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
Lorsque l'utilisateur poste une nouvelle recette, l'application doit pouvoir analyser le texte de la recette, et enregistrer les produits qu'il aura détecté.
Pistes :
Vue création d'un nouveau compte, comprenant un formulaire avec :
Voir #30 pour les appels à l'API.
À définir...
Fait suite à #8
Vue listing recette, qui doit comprendre une liste paginée de recettes.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.