149 lines
3.8 KiB
JavaScript
149 lines
3.8 KiB
JavaScript
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({ test: "test" });
|
|
});
|
|
// ### GET ALL RECIPES ###
|
|
app.get("/backend/recipes", async (req, res) => {
|
|
try {
|
|
const recipes = await db("recipes").select("id", "name", "cuisine");
|
|
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");
|
|
|
|
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) => {
|
|
const { name, author, cuisine, stars, ingredients, steps } = req.body;
|
|
try {
|
|
const [id] = await db("recipes").insert(
|
|
{
|
|
name: name,
|
|
author: author,
|
|
cuisine: cuisine,
|
|
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) => {
|
|
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) => {
|
|
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);
|
|
});
|