server v1.0.7

This commit is contained in:
2020-10-01 20:21:01 +02:00
parent 5d6c7d5e3f
commit 63c2fb88e0
6 changed files with 33 additions and 37 deletions

View File

@@ -2,6 +2,7 @@ import express from "express";
import { createDish } from "../services/dataPrepServices.js"; import { createDish } from "../services/dataPrepServices.js";
import { import {
removeDish, removeDish,
fetchDish,
addDishToRestaurant, addDishToRestaurant,
setDishVisibility, setDishVisibility,
} from "../services/databaseServices.js"; } from "../services/databaseServices.js";
@@ -33,7 +34,7 @@ router.post("/", async (req, res) => {
await validateRestaurant(req.body.restaurantId); await validateRestaurant(req.body.restaurantId);
const token = req.headers["x-auth-token"]; const token = req.headers["x-auth-token"];
validateUserToken(token); validateUserToken(token);
const dish = await createDish(req.body, req.body.restaurantId, true); const dish = await createDish(req.body, req.body.restaurantId);
await dish.save(); await dish.save();
await addDishToRestaurant(req.body.restaurantId, dish._id); await addDishToRestaurant(req.body.restaurantId, dish._id);
res.status(201).send(dish._id); res.status(201).send(dish._id);
@@ -77,10 +78,12 @@ router.put("/", async (req, res) => {
try { try {
await validateDishId(req.body.dishId); await validateDishId(req.body.dishId);
const token = req.headers["x-auth-token"]; const token = req.headers["x-auth-token"];
validateUserToken(token); const decodedToken = validateUserToken(token);
const dish = createDish(req.body.dish, req.body.restaurantId, false); await verifyDishAccess(req.body.dishId, decodedToken);
const oldDish = await fetchDish(req.body.dishId);
const dish = await createDish(req.body, req.body.restaurantId, oldDish);
await Dish.replaceOne({ _id: req.body.dishId }, dish); await Dish.replaceOne({ _id: req.body.dishId }, dish);
res.sendStatus(200); res.send(dish);
} catch (error) { } catch (error) {
handleError(error, res); handleError(error, res);
} }

View File

@@ -59,6 +59,7 @@ router.put("/", async (req, res) => {
const user = validateUserToken(token); const user = validateUserToken(token);
const oldRestaurant = await fetchRestaurant(req.body.restaurantId); const oldRestaurant = await fetchRestaurant(req.body.restaurantId);
const newRestaurant = await createRestaurant(req.body, oldRestaurant); const newRestaurant = await createRestaurant(req.body, oldRestaurant);
await verifyRestaurantAccess(req.body.restaurantId, user);
await Restaurant.replaceOne({ _id: req.body.restaurantId }, newRestaurant); await Restaurant.replaceOne({ _id: req.body.restaurantId }, newRestaurant);
res.send(newRestaurant); res.send(newRestaurant);
} catch (error) { } catch (error) {

View File

@@ -1,4 +1,5 @@
import azureBlob from "@azure/storage-blob"; import azureBlob from "@azure/storage-blob";
import e from "express";
import getStream from "into-stream"; import getStream from "into-stream";
import { newError } from "./services.js"; import { newError } from "./services.js";
@@ -77,10 +78,18 @@ export function setDeleteTempBlobTimer(blobName, containerClient, minutes) {
} }
export async function deleteImage(url) { export async function deleteImage(url) {
if (!url || url === "" || url === "empty") {
return;
} else {
try {
const containerClient = blobServiceClient.getContainerClient(container); const containerClient = blobServiceClient.getContainerClient(container);
const containerUrl = containerClient.url + "/"; const containerUrl = containerClient.url + "/";
const blobName = url.replace(containerUrl, ""); const blobName = url.replace(containerUrl, "");
console.log(`BLOB NAME = ${blobName}`); console.log(`BLOB NAME = ${blobName}`);
const blob = containerClient.getBlobClient(blobName); const blob = containerClient.getBlobClient(blobName);
await blob.delete(); await blob.delete();
} catch (error) {
console.log(error);
}
}
} }

View File

@@ -113,9 +113,9 @@ export async function prepareSafeUser(user) {
return safeUser; return safeUser;
} }
export async function createDish(dish, restaurantId, generateId) { export async function createDish(dish, restaurantId, oldDish) {
try { try {
if (generateId) { if (!oldDish) {
const img = await handleImageUpdate(dish); const img = await handleImageUpdate(dish);
const newDish = new Dish({ const newDish = new Dish({
_id: new mongoose.Types.ObjectId(), _id: new mongoose.Types.ObjectId(),
@@ -126,15 +126,7 @@ export async function createDish(dish, restaurantId, generateId) {
notes: sanitizer.sanitize.keepUnicode(dish.notes), notes: sanitizer.sanitize.keepUnicode(dish.notes),
imgUrl: img, imgUrl: img,
weight: dish.weight, weight: dish.weight,
allergens: { allergens: dish.allergens,
gluten: dish.allergens.gluten,
lactose: dish.allergens.lactose,
soy: dish.allergens.soy,
eggs: dish.allergens.eggs,
seaFood: dish.allergens.seaFood,
peanuts: dish.allergens.peanuts,
sesame: dish.allergens.sesame,
},
ingredients: dish.ingredients, ingredients: dish.ingredients,
glicemicIndex: dish.glicemicIndex, glicemicIndex: dish.glicemicIndex,
kCal: dish.kCal, kCal: dish.kCal,
@@ -143,24 +135,16 @@ export async function createDish(dish, restaurantId, generateId) {
}); });
return newDish; return newDish;
} else { } else {
const img = ""; const img = await handleImageUpdate(dish, oldDish);
const newDish = new Dish({ const newDish = new Dish({
restaurantId: restaurantId, restaurantId: oldDish.restaurantId,
name: sanitizer.sanitize.keepUnicode(dish.name), name: sanitizer.sanitize.keepUnicode(dish.name),
category: dish.category, category: dish.category,
price: dish.price, price: dish.price,
notes: sanitizer.sanitize.keepUnicode(dish.notes), notes: sanitizer.sanitize.keepUnicode(dish.notes),
imgUrl: img, imgUrl: img,
weight: dish.weight, weight: dish.weight,
allergens: { allergens: dish.allergens,
gluten: dish.allergens.gluten,
lactose: dish.allergens.lactose,
soy: dish.allergens.soy,
eggs: dish.allergens.eggs,
seaFood: dish.allergens.seaFood,
peanuts: dish.allergens.peanuts,
sesame: dish.allergens.sesame,
},
ingredients: dish.ingredients, ingredients: dish.ingredients,
glicemicIndex: dish.glicemicIndex, glicemicIndex: dish.glicemicIndex,
kCal: dish.kCal, kCal: dish.kCal,

View File

@@ -14,6 +14,7 @@ export async function removeDish(dishId) {
const deletedDoc = await Dish.findByIdAndDelete(dishId).catch((e) => { const deletedDoc = await Dish.findByIdAndDelete(dishId).catch((e) => {
throw newError("Usunięcie dania nie powiodło się.", 500); throw newError("Usunięcie dania nie powiodło się.", 500);
}); });
await deleteImage(deletedDoc.imgUrl);
await Restaurant.findByIdAndUpdate(deletedDoc.restaurantId, { await Restaurant.findByIdAndUpdate(deletedDoc.restaurantId, {
$pull: { dishes: dishId }, $pull: { dishes: dishId },
}).catch((error) => { }).catch((error) => {

View File

@@ -112,11 +112,9 @@ export async function verifyDishAccess(dishId, decodedToken) {
} }
); );
const restaurants = fetch.restaurants; const restaurants = fetch.restaurants;
const restaurantId = await Dish.findById(dishId, "restaurantId").catch( const restaurantId = await Dish.findById(dishId).catch((error) => {
(error) => {
throw newError("Nie znaleziono dania.", 404); throw newError("Nie znaleziono dania.", 404);
} });
);
const valid = restaurants.includes(restaurantId.restaurantId); const valid = restaurants.includes(restaurantId.restaurantId);
if (!valid) throw newError("Nie masz dostępu do tego dania.", 401); if (!valid) throw newError("Nie masz dostępu do tego dania.", 401);
} }