diff --git a/routes/routeRestaurant.js b/routes/routeRestaurant.js index abd4535..cad5163 100644 --- a/routes/routeRestaurant.js +++ b/routes/routeRestaurant.js @@ -7,6 +7,7 @@ import { removeRestaurant, changeCategory, changeLunchMenu, + fetchUser, } from "../services/databaseServices.js"; import { decodeAndSanitize, @@ -15,6 +16,7 @@ import { validateUserToken, verifyRestaurantAccess, newError, + checkPassword, } from "../services/services.js"; import Restaurant from "../models/restaurant.js"; @@ -58,7 +60,7 @@ router.put("/", async (req, res) => { const oldRestaurant = await fetchRestaurant(req.body.restaurantId); const newRestaurant = await createRestaurant(req.body, oldRestaurant); await Restaurant.replaceOne({ _id: req.body.restaurantId }, newRestaurant); - res.send("Dane zostały zaktualizowane."); + res.send(newRestaurant); } catch (error) { handleError(error, res); } @@ -91,7 +93,8 @@ router.post("/category", async (req, res) => { req.body.category, req.body.action ); - res.send("Kategoria zmieniona pomyślnie"); + const restaurant = await fetchRestaurant(req.body.restaurantId); + res.send(restaurant); } catch (error) { handleError(error, res); } @@ -110,7 +113,8 @@ router.post("/lunch", async (req, res) => { req.body.dishId, req.body.action ); - res.send("Lunch menu zmienione pomyślnie."); + const restaurant = await fetchRestaurant(req.body.restaurantId); + res.send(restaurant); } catch (error) { handleError(error, res); } @@ -120,11 +124,16 @@ router.post("/lunch", async (req, res) => { router.post("/delete", async (req, res) => { try { + if (!req.body.password) { + throw newError("Niepełne dane.", 204); + } const token = req.headers["x-auth-token"]; - const user = validateUserToken(token); + validateUserToken(token); + const user = await fetchUser(req.body.email); + await checkPassword(req.body.password, user.password); await validateRestaurant(req.body.restaurantId); await verifyRestaurantAccess(req.body.restaurantId, user); - await removeRestaurant(req.body.restaurantId, user.id); + await removeRestaurant(req.body.restaurantId, user._id); res.send("Restauracja została pomyślnie usunięta."); } catch (error) { handleError(error, res); diff --git a/routes/routeUser.js b/routes/routeUser.js index 73ad5aa..43d481d 100644 --- a/routes/routeUser.js +++ b/routes/routeUser.js @@ -30,6 +30,19 @@ router.post("/login", async (req, res) => { } }); +// REFRESH +router.post("/refresh", async (req, res) => { + try { + const token = req.headers["x-auth-token"]; + const user = validateUserToken(token); + const freshUser = await fetchUser(user.email); + const safeUser = await prepareSafeUser(freshUser); + res.send(safeUser); + } catch (error) { + handleError(error, res); + } +}); + // REGISTER router.post("/register", async (req, res) => { try { diff --git a/services/azureServices.js b/services/azureServices.js index bfb5fe6..978bc25 100644 --- a/services/azureServices.js +++ b/services/azureServices.js @@ -75,3 +75,12 @@ export function setDeleteTempBlobTimer(blobName, containerClient, minutes) { blob.delete(); }, 1000 * 60 * minutes); } + +export async function deleteImage(url) { + const containerClient = blobServiceClient.getContainerClient(container); + const containerUrl = containerClient.url + "/"; + const blobName = url.replace(containerUrl, ""); + console.log(`BLOB NAME = ${blobName}`); + const blob = containerClient.getBlobClient(blobName); + await blob.delete(); +} diff --git a/services/dataPrepServices.js b/services/dataPrepServices.js index eb437f5..5a86f32 100644 --- a/services/dataPrepServices.js +++ b/services/dataPrepServices.js @@ -5,6 +5,7 @@ import Dish from "../models/dish.js"; import User from "../models/users.js"; import Restaurant from "../models/restaurant.js"; import { fetchMultipleRestaurants } from "./databaseServices.js"; +import { deleteImage } from "./azureServices.js"; export async function createUser(request) { const password = await hashPass(request.body.password); @@ -25,20 +26,21 @@ export async function createUser(request) { async function handleImageUpdate(request, previous) { if (!previous) { - if (!request.imgURL) { + if (!request.imgUrl) { return "empty"; } else { - const img = await saveImage(request.imgURL); + const img = await saveImage(request.imgUrl); return img; } } else { - if (request.imgURL == previous.imgUrl) { + if (request.imgUrl == previous.imgUrl) { return previous.imgUrl; } else { - if (!request.imgURL) { + if (!request.imgUrl) { return previous.imgUrl; } else { - const img = await saveImage(request.imgURL); + const img = await saveImage(request.imgUrl); + await deleteImage(previous.imgUrl); return img; } } diff --git a/services/databaseServices.js b/services/databaseServices.js index 48c7c2e..9161760 100644 --- a/services/databaseServices.js +++ b/services/databaseServices.js @@ -1,6 +1,7 @@ import Restaurant from "../models/restaurant.js"; import Dish from "../models/dish.js"; import User from "../models/users.js"; +import { deleteImage } from "./azureServices.js"; import { newError } from "./services.js"; export async function changeUserPass(userId, newPass) { @@ -26,6 +27,13 @@ export async function removeRestaurant(restaurantId, userId) { throw newError("Usunięcie nie powiodło się.", 500); } ); + await deleteImage(deletedDoc.imgUrl); + for (dishId of deletedDoc.dishes) { + const deletedDish = await Dish.findByIdAndDelete(dishId).catch((e) => + console.log(e) + ); + await deleteImage(deletedDish.imgUrl); + } await User.findByIdAndUpdate(userId, { $pull: { restaurants: restaurantId }, }).catch((e) => {