From ec4324c53ee6508bf72f8b3a342308740541403f Mon Sep 17 00:00:00 2001 From: fred <> Date: Fri, 15 Aug 2025 20:50:49 +0000 Subject: [PATCH] 'get prod ready for prisma' --- backend/backendServer.js | 154 ------------------ backend/db.js | 10 -- backend/knexfile.js | 60 ------- .../20250702165756_create_recipes_table.js | 21 --- ...20250708205938_create_ingredients_table.js | 43 ----- ...0250717181149_add_raw_ingredients_table.js | 24 --- ...50724163016_add_author_stars_to_recipes.js | 22 --- .../20250728174922_add_times_recipes.js | 22 --- backend/src/models/recipeModel.js | 2 +- backend/test.js | 14 -- docker-compose.yaml | 1 + 11 files changed, 2 insertions(+), 371 deletions(-) delete mode 100644 backend/backendServer.js delete mode 100644 backend/db.js delete mode 100644 backend/knexfile.js delete mode 100644 backend/migrations/20250702165756_create_recipes_table.js delete mode 100644 backend/migrations/20250708205938_create_ingredients_table.js delete mode 100644 backend/migrations/20250717181149_add_raw_ingredients_table.js delete mode 100644 backend/migrations/20250724163016_add_author_stars_to_recipes.js delete mode 100644 backend/migrations/20250728174922_add_times_recipes.js delete mode 100644 backend/test.js diff --git a/backend/backendServer.js b/backend/backendServer.js deleted file mode 100644 index 74f3ea6..0000000 --- a/backend/backendServer.js +++ /dev/null @@ -1,154 +0,0 @@ -const express = require("express"); -const db = require("./db"); -const port = 3000; -const cors = require("cors"); - -const app = express(); -app.use(cors()); -app.use(express.json()); - -// ####### ROUTES ####### -app.get("/backend/test", async (req, res) => { - console.log("test"); - res.json({ env: process.env.NODE_ENV }); -}); -// ### GET ALL RECIPES ### -app.get("/backend/recipes", async (req, res) => { - try { - const recipes = await db("recipes").select("id", "name", "cuisine", "stars", "prep_minutes", "cook_minutes"); - res.json(recipes); - } catch (err) { - console.log(err); - res.status(500).json({ error: err.message }); - } -}); -// ### GET ALL RECIPE_INGREDIENTS ### -app.get("/backend/recipe-ingredients", async (req, res) => { - try { - const recipe_ingredients = await db("recipe_ingredients").select("*"); - res.json(recipe_ingredients); - } catch (err) { - console.log(err); - res.status(500).json({ error: err.message }); - } -}); -// ### GET ALL RECIPE_STEPS ### -app.get("/backend/recipe-steps", async (req, res) => { - try { - const recipe_steps = await db("recipe_steps").select("*"); - res.json(recipe_steps); - } catch (err) { - console.log(err); - res.status(500).json({ error: err.message }); - } -}); - -// ### GET RECIPE ### -app.get("/backend/recipe/:id", async (req, res) => { - const id = req.params.id; - try { - const recipeQuery = db("recipes") - .where("id", "=", id) - .select("id", "name", "author", "cuisine", "stars", "prep_minutes", "cook_minutes"); - - const ingredientsQuery = db - .from("recipe_ingredients") - .where("recipe_id", "=", id) - .select("raw"); - - const stepsQuery = db("recipe_steps") - .where("recipe_id", id) - .select("step_number", "instruction"); - - const [recipe, ingredients, steps] = await Promise.all([ - recipeQuery, - ingredientsQuery, - stepsQuery, - ]); - - const result = { - details: recipe[0], - ingredients: ingredients, - steps: steps, - }; - - res.json(result); - } catch (err) { - console.log(err); - res.status(500).json({ error: err.message }); - } -}); - -// ### ADD RECIPE ### -app.post("/backend/add-recipe", async (req, res) => { - if (process.env.NODE_ENV === 'demo') { return; }; - const { name, author, cuisine, stars, ingredients, steps, prep_minutes, cook_minutes } = req.body; - try { - const [id] = await db("recipes").insert( - { - name: name, - author: author, - cuisine: cuisine, - prep_minutes: prep_minutes, - cook_minutes: cook_minutes, - stars: stars, - }, - ["id"], - ); - - const ingredientInserts = ingredients.map((ing) => ({ - recipe_id: id.id, - raw: ing, - })); - // - await db("recipe_ingredients").insert(ingredientInserts); - - const stepInserts = Object.keys(steps).map((stepNumber) => ({ - recipe_id: id.id, - step_number: parseInt(stepNumber), - instruction: steps[stepNumber], - })); - await db("recipe_steps").insert(stepInserts); - - res.status(200).send({ message: "Recipe added", id: id.id }); - } catch (err) { - console.log(err); - res.status(500).json({ error: err.message }); - } -}); - -// ### SET STARS ### -app.post("/backend/set-stars", async (req, res) => { - if (process.env.NODE_ENV === 'demo') { return; }; - const { id, stars } = req.body; - try { - await db("recipes").where({ id: id }).update({ stars: stars }); - res.status(200).send({ message: "stars updated" }); - } catch (err) { - console.log(err); - res.status(500).json({ error: err.message }); - } -}); - -// ### DELETE RECIPE ### -app.delete("/backend/delete-recipe", async (req, res) => { - if (process.env.NODE_ENV === 'demo') { return; }; - const { id } = req.body; - try { - await db("recipe_steps").where({ recipe_id: id }).del(); - await db("recipe_ingredients").where({ recipe_id: id }).del(); - await db("recipes").where({ id: id }).del(); - res.status(200).send({ message: "Recipe deleted" }); - } catch (err) { - console.log(err); - res.status(500).json({ error: err.message }); - } -}); - -app.listen(port, () => console.log(`Server has started on port: ${port}`)); - -process.on("SIGINT", async () => { - console.log("Closing database connection..."); - await db.destroy(); - process.exit(0); -}); diff --git a/backend/db.js b/backend/db.js deleted file mode 100644 index 0710f1a..0000000 --- a/backend/db.js +++ /dev/null @@ -1,10 +0,0 @@ -const knex = require('knex'); -const knexConfig = require('./knexfile.js'); - -const environment = process.env.NODE_ENV || 'dev'; -const config = knexConfig[environment]; - -const db = knex(config); - -module.exports = db; - diff --git a/backend/knexfile.js b/backend/knexfile.js deleted file mode 100644 index 78f22d8..0000000 --- a/backend/knexfile.js +++ /dev/null @@ -1,60 +0,0 @@ -require("dotenv").config(); - -module.exports = { - dev: { - client: "postgresql", - connection: { - host: "db", - port: 5432, - database: process.env.DB_NAME, - user: process.env.DB_USER, - password: process.env.DB_PASSWORD, - }, - pool: { - min: 2, - max: 10, - }, - migrations: { - tableName: "knex_migrations", - directory: "./migrations", - }, - }, - - demo: { - client: "postgresql", - connection: { - host: "db", - port: process.env.DB_PORT, - database: process.env.DB_NAME, - user: process.env.DB_USER, - password: process.env.DB_PASSWORD, - }, - pool: { - min: 2, - max: 10, - }, - migrations: { - tableName: "knex_migrations", - directory: "./migrations", - }, - }, - - production: { - client: "postgresql", - connection: { - host: "db", - port: process.env.DB_PORT, - database: process.env.DB_NAME, - user: process.env.DB_USER, - password: process.env.DB_PASSWORD, - }, - pool: { - min: 2, - max: 10, - }, - migrations: { - tableName: "knex_migrations", - directory: "./migrations", - }, - }, -}; diff --git a/backend/migrations/20250702165756_create_recipes_table.js b/backend/migrations/20250702165756_create_recipes_table.js deleted file mode 100644 index 657e7a7..0000000 --- a/backend/migrations/20250702165756_create_recipes_table.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { - return knex.schema.createTable('recipes', function (table) { - table.increments('id').primary(); - table.string('name').notNullable().unique(); - table.string('cuisine').notNullable(); - table.timestamps(true, true); - }) - -}; - -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { - return knex.schema.dropTable('users'); -}; diff --git a/backend/migrations/20250708205938_create_ingredients_table.js b/backend/migrations/20250708205938_create_ingredients_table.js deleted file mode 100644 index 55255ee..0000000 --- a/backend/migrations/20250708205938_create_ingredients_table.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { - return knex.schema.createTable('ingredients', function (table) { - table.increments('id').primary(); - table.string('name').notNullable().unique(); - table.string('type'); - table.string('notes'); - table.timestamps(true, true); - }). - createTable('recipe_ingredients', function (table) { - table.increments('id').primary(); - table.integer('recipe_id').notNullable(); - table.integer('ingredient_id').notNullable(); - table.string('quantity').notNullable(); - table.string('unit').notNullable(); - table.string('notes'); - table.index(['recipe_id']); - table.index(['ingredient_id']); - table.timestamps(true, true); - }). - createTable('recipe_steps', function (table) { - table.increments('id').primary(); - table.integer('recipe_id'); - table.integer('step_number'); - table.string('instruction'); - table.unique(['recipe_id', 'step_number']); - table.index(['recipe_id']) - table.timestamps(true, true); - }) -}; - -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { - return knex.schema.dropTableIfExists('ingredients') - .dropTableIfExists('recipe_ingredients') - .dropTableIfExists('recipe_steps') -}; diff --git a/backend/migrations/20250717181149_add_raw_ingredients_table.js b/backend/migrations/20250717181149_add_raw_ingredients_table.js deleted file mode 100644 index 7a15863..0000000 --- a/backend/migrations/20250717181149_add_raw_ingredients_table.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { - return knex.schema.table('recipe_ingredients', table => { - table.string('raw', 255).defaultTo(''); - table.integer('ingredient_id').nullable().alter(); - table.string('quantity').nullable().alter(); - table.string('unit').nullable().alter(); - }).table('recipe_steps', table => { - table.string('instruction', 510).alter(); - }); -}; - -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { - return knex.schema.table('recipe_ingredients', table => { - table.dropColumn('raw'); - }); -}; diff --git a/backend/migrations/20250724163016_add_author_stars_to_recipes.js b/backend/migrations/20250724163016_add_author_stars_to_recipes.js deleted file mode 100644 index 5c5aa10..0000000 --- a/backend/migrations/20250724163016_add_author_stars_to_recipes.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { - - return knex.schema.table('recipes', table => { - table.string('author'); - table.integer('stars'); - }) -}; - -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { - return knex.schema.table('recipes', table => { - table.dropColumn('author'); - table.dropColumn('stars') - }) -}; diff --git a/backend/migrations/20250728174922_add_times_recipes.js b/backend/migrations/20250728174922_add_times_recipes.js deleted file mode 100644 index 6ae9390..0000000 --- a/backend/migrations/20250728174922_add_times_recipes.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { - - return knex.schema.table('recipes', table => { - table.integer('prep_minutes'); - table.integer('cook_minutes'); - }) -}; - -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { - return knex.schema.table('recipes', table => { - table.dropColumn('prep_minutes'); - table.dropColumn('cook_minutes') - }) -}; diff --git a/backend/src/models/recipeModel.js b/backend/src/models/recipeModel.js index 9c93965..82a3159 100644 --- a/backend/src/models/recipeModel.js +++ b/backend/src/models/recipeModel.js @@ -38,7 +38,7 @@ class recipeModel { }, ingredients: recipe.recipeIngredients.map((ing) => ing.raw), steps: recipe.recipeSteps.map((step, idx) => ({ - step_idx: step.step_number, + step_number: step.step_number, instruction: step.instruction, })), }; diff --git a/backend/test.js b/backend/test.js deleted file mode 100644 index 0f381ca..0000000 --- a/backend/test.js +++ /dev/null @@ -1,14 +0,0 @@ -const db = require('./db'); - -async function testConnection() { - try { - await db.raw('SELECT 1+1 as result'); - console.log('Database connected successfully!'); - } catch (error) { - console.error('Database connection failed:', error); - } finally { - await db.destroy(); - } -} - -testConnection(); diff --git a/docker-compose.yaml b/docker-compose.yaml index 7bf2207..4e41fd9 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -30,6 +30,7 @@ services: - DB_USER=${DB_USER} - DB_PASSWORD=${DB_PASSWORD} - DB_NAME=${DB_NAME} + - DATABASE_URL=${PRISMA_DB_URL} frontend: image: recipes_frontend container_name: recipes_frontend_${ID}