From 062a9adf041e580e7a622379bdec659afdaffd33 Mon Sep 17 00:00:00 2001 From: GamerBoss101 Date: Sun, 15 Sep 2024 04:43:05 -0400 Subject: [PATCH] Sign In Prompt --- server.zip | Bin 0 -> 5873 bytes server/ai.js | 2 +- server/api/recipes.js | 8 +- server/api/users.js | 32 -------- server/storage/Mongo.js | 2 - server/storage/collections/recipes.js | 14 +++- server/storage/collections/users.js | 74 ------------------ src/lib/components/Navbar.svelte | 7 +- src/lib/components/form/QuestionSelect.svelte | 9 ++- src/lib/components/form/SignIn.svelte | 6 ++ src/lib/components/form/Survey.svelte | 43 ++++++++-- src/lib/food.css | 18 +++++ src/lib/survey.css | 2 +- src/routes/+layout.js | 25 +++--- src/routes/food/[id]/+page.svelte | 44 ++++++++++- src/routes/survey/+page.svelte | 8 +- 16 files changed, 149 insertions(+), 145 deletions(-) create mode 100644 server.zip delete mode 100644 server/api/users.js delete mode 100644 server/storage/collections/users.js create mode 100644 src/lib/components/form/SignIn.svelte create mode 100644 src/lib/food.css diff --git a/server.zip b/server.zip new file mode 100644 index 0000000000000000000000000000000000000000..61f2290d941575d6e8b9bf89bfdb64f9840a6da3 GIT binary patch literal 5873 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 O-#@M2Z9N4!`srU<25&0> literal 0 HcmV?d00001 diff --git a/server/ai.js b/server/ai.js index 8968128..99c92ac 100644 --- a/server/ai.js +++ b/server/ai.js @@ -72,7 +72,7 @@ export default class FDAI { } const response = await ollama.generate({ - model: 'meta-llama-3-1-8b-1', + model: 'llama3:latest', format: "json", prompt: `Give one food suggestion for these question answers and then generate a recipe. diff --git a/server/api/recipes.js b/server/api/recipes.js index 0ceec9f..b8c1700 100644 --- a/server/api/recipes.js +++ b/server/api/recipes.js @@ -28,9 +28,8 @@ export default class RecipeAPI extends APIRoute { let aiResult = await ai.suggestFood(recipe.currentQuestion, recipe.answers, recipe.restrictions); - console.log(aiResult); - let suggestFood = JSON.parse(aiResult.response); + suggestFood.userID = recipe.userID; let result = await db.create(suggestFood); @@ -38,6 +37,7 @@ export default class RecipeAPI extends APIRoute { } async rate(req, res) { + let db = req.app.get('mongo').recipes; let recipe = await db.get(req.params.id); @@ -54,9 +54,7 @@ export default class RecipeAPI extends APIRoute { return; } - recipe.rating = rating; - - let result = await db.update(req.params.id, { rating: rating }); + let result = await db.update(req.params.id, { rating: recipe.rating + parseInt(rating), ratingCount: recipe.ratingCount + 1 }); res.send(result); } diff --git a/server/api/users.js b/server/api/users.js deleted file mode 100644 index 37950cd..0000000 --- a/server/api/users.js +++ /dev/null @@ -1,32 +0,0 @@ -import APIRoute from "../APIRoute.js"; - -export default class UsersAPI extends APIRoute { - constructor() { - super('/users'); - - this.addSubRoute('/create', 'post', this.createUser); - } - - async get(req, res) { - res.send('GET request'); - } - - async post(req, res) { - res.send('POST request'); - } - - async createUser(req, res) { - let user = req.body; - - let db = req.app.get('mongo').users; - - let result = await db.create({ - recipes: [], - dietaryRestrictions: [], - firstName: "String", - lastName: "OtherString", - email: "" - }); - - } -} \ No newline at end of file diff --git a/server/storage/Mongo.js b/server/storage/Mongo.js index b222827..2b2777a 100644 --- a/server/storage/Mongo.js +++ b/server/storage/Mongo.js @@ -1,11 +1,9 @@ import mongoose from "mongoose"; -import Users from "./collections/users.js"; import Recipes from "./collections/recipes.js"; export default class Mongo { constructor(uri) { this.connect(uri); - this.users = new Users(); this.recipes = new Recipes(); } diff --git a/server/storage/collections/recipes.js b/server/storage/collections/recipes.js index 570d847..dc5a576 100644 --- a/server/storage/collections/recipes.js +++ b/server/storage/collections/recipes.js @@ -19,7 +19,8 @@ const recipesSchema = new mongoose.Schema({ rating: Number, cuisine: String, expense: Number, - mealType: Object + mealType: Object, + ratingCount: Number }, { timestamps: true }); export default class Recipes { @@ -43,7 +44,9 @@ export default class Recipes { cuisine: recipe.cuisine, expense: recipe.expense, mealType: recipe.mealType, - instructions: recipe.instructions + instructions: recipe.instructions, + ratingCount: 0, + rating: 0 }, this.upsert); return await this.get(Id); } @@ -63,6 +66,13 @@ export default class Recipes { return await this.get(Id); } + async increment(Id, field, amount) { + let result = await this.get(Id); + if(!result) return null; + + return await this.get(Id); + } + async delete(Id) { let result = await this.get(Id); if(!result) return false; diff --git a/server/storage/collections/users.js b/server/storage/collections/users.js deleted file mode 100644 index 874eee3..0000000 --- a/server/storage/collections/users.js +++ /dev/null @@ -1,74 +0,0 @@ -import mongoose from "mongoose"; -import { v4 as uuidv4 } from 'uuid'; - -const reqString = { - type: String, - required: true -} - -const UserSchema = new mongoose.Schema({ - id: reqString, - recipes: Array, - dietaryRestrictions: Array, - firstName: String, - lastName: String, - email: String -}, { timestamps: true }); - -export default class Users { - constructor() { - this.model = mongoose.model('users', UserSchema); - this.upsert = { upsert: true }; - } - - - async create(user) { - if(await this.model.findOne({ username: user.username }) || await this.model.findOne({ email: user.email })) return null; - - let Id = uuidv4(); - - - await this.model.findOneAndUpdate({ id: Id }, { - id: Id, - recipes: user.recipes, - dietaryRestrictions: user.dietaryRestrictions, - firstName: user.firstName, - lastName: user.lastName, - email: user.Email - }, this.upsert); - return await this.get(user.id); - } - - async get(Id) { - let data = await this.model.findOne({ id: Id }); - if(data) data.password = undefined; - return data; - } - - async getByUsername(username) { - let data = await this.model.findOne({ username: username }) || await this.model.findOne({ email: username }); - if(data) data.password = undefined; - return data; - } - - async getAll(query) { - let data = await this.model.find(query); - data.forEach(user => { - user.password = undefined; - }); - return data - } - - async update(Id, data) { - if(!(await this.get(Id))) return null; - await this.model.findOneAndUpdate({ id: Id }, data, this.upsert); - return await this.get(Id); - } - - async delete(Id) { - let result = await this.get(Id); - if(!result) return false; - await this.model.deleteOne({ id: Id }) - return true; - } -} \ No newline at end of file diff --git a/src/lib/components/Navbar.svelte b/src/lib/components/Navbar.svelte index 58b3f99..09e8365 100644 --- a/src/lib/components/Navbar.svelte +++ b/src/lib/components/Navbar.svelte @@ -3,10 +3,9 @@