216 lines
5.8 KiB
JavaScript
216 lines
5.8 KiB
JavaScript
const express = require("express");
|
|
const { createRestaurant } = require("../services/dataPrepServices.js");
|
|
const {
|
|
addRestaurantToUser,
|
|
fetchRestaurant,
|
|
fetchAllDishesForRestaurant,
|
|
removeRestaurant,
|
|
changeCategory,
|
|
changeLunchMenu,
|
|
changeLunchMenuSet,
|
|
fetchUser,
|
|
renewSubscription,
|
|
setRestaurantVisibility,
|
|
startTrial
|
|
} = require("../services/databaseServices.js");
|
|
const {
|
|
decodeAndSanitize,
|
|
validateRestaurant,
|
|
handleError,
|
|
validateUserToken,
|
|
verifyRestaurantAccess,
|
|
newError,
|
|
checkPassword,
|
|
} = require("../services/services.js");
|
|
const Restaurant = require("../models/restaurant.js");
|
|
const { validateRestaurant } = require("../services/validations.js");
|
|
|
|
var router = express.Router();
|
|
|
|
// GET RESTAURANT BY ID
|
|
|
|
router.get("/", async (req, res) => {
|
|
try {
|
|
const query = decodeAndSanitize(req.query.restaurantId);
|
|
await validateRestaurant(query);
|
|
Restaurant.findById(query).then((data) => res.send(data));
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// ADD NEW RESTAURANT
|
|
|
|
router.post("/", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = validateUserToken(token);
|
|
validateRestaurant(req.body);
|
|
const restaurant = await createRestaurant(req.body).catch((err) => {
|
|
throw newError("Nie udało się zapisać zdjęcia.", 500);
|
|
});
|
|
await restaurant.save();
|
|
await addRestaurantToUser(user, restaurant);
|
|
res.sendStatus(201);
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// UPDATE RESTAURANT
|
|
|
|
router.put("/", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = validateUserToken(token);
|
|
const oldRestaurant = await fetchRestaurant(req.body.restaurantId);
|
|
const newRestaurant = await createRestaurant(req.body, oldRestaurant);
|
|
await verifyRestaurantAccess(req.body.restaurantId, user);
|
|
await Restaurant.replaceOne({ _id: req.body.restaurantId }, newRestaurant);
|
|
res.send(newRestaurant);
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// GET ALL DISHES FROM A RESTAURANT ID
|
|
|
|
router.get("/dishes", async (req, res) => {
|
|
try {
|
|
const query = decodeAndSanitize(req.query.restaurantId);
|
|
await validateRestaurant(query);
|
|
let restaurant = await fetchRestaurant(query);
|
|
let dishes = await fetchAllDishesForRestaurant(restaurant);
|
|
res.send(dishes);
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// CHANGE CATEGORY
|
|
|
|
router.post("/category", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = validateUserToken(token);
|
|
await validateRestaurant(req.body.restaurantId);
|
|
await verifyRestaurantAccess(req.body.restaurantId, user);
|
|
await changeCategory(
|
|
req.body.restaurantId,
|
|
req.body.category,
|
|
req.body.action
|
|
);
|
|
const restaurant = await fetchRestaurant(req.body.restaurantId);
|
|
res.send(restaurant);
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// CHANGE LUNCH MENU
|
|
|
|
router.post("/lunchSet", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = validateUserToken(token);
|
|
await validateRestaurant(req.body.restaurantId);
|
|
await verifyRestaurantAccess(req.body.restaurantId, user);
|
|
await changeLunchMenuSet(
|
|
req.body.restaurantId,
|
|
req.body.action,
|
|
req.body.set
|
|
);
|
|
res.sendStatus(200);
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
router.post("/lunch", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = validateUserToken(token);
|
|
await validateRestaurant(req.body.restaurantId);
|
|
await verifyRestaurantAccess(req.body.restaurantId, user);
|
|
await changeLunchMenu(
|
|
req.body.restaurantId,
|
|
req.body.setName,
|
|
req.body.dishId,
|
|
req.body.quantity,
|
|
req.body.action
|
|
);
|
|
res.sendStatus(200);
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// DELETE RESTAURANT
|
|
|
|
router.post("/delete", async (req, res) => {
|
|
try {
|
|
if (!req.body.password) {
|
|
throw newError("Niepełne dane.", 204);
|
|
}
|
|
const token = req.headers["x-auth-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);
|
|
res.send("Restauracja została pomyślnie usunięta.");
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// SET RESTAURANT VISIBILITY
|
|
|
|
router.post("/visibility", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = await validateUserToken(token);
|
|
await validateRestaurant(req.body.restaurantId);
|
|
await verifyRestaurantAccess(req.body.restaurantId, user);
|
|
await setRestaurantVisibility(req.body.restaurantId, req.body.visible);
|
|
res.send("Widoczność restauracji została zmieniona.");
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
})
|
|
|
|
// ACTIVATE SUBSCRIPTION
|
|
|
|
router.post("/subscription", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = validateUserToken(token);
|
|
await validateRestaurant(req.body.restaurantId);
|
|
/* const response = await initializePayment(
|
|
req.body.restaurantId,
|
|
req.body.userData,
|
|
req.body.type
|
|
); */
|
|
await renewSubscription(req.body.restaurantId, req.body.type);
|
|
res.sendStatus(200);
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
// ACTIVATE TRIAL
|
|
|
|
router.post("/trial", async (req, res) => {
|
|
try {
|
|
const token = req.headers["x-auth-token"];
|
|
const user = validateUserToken(token);
|
|
await startTrial(req.body.restaurantId, user);
|
|
res.send("Okres próbny aktywowany.");
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
})
|
|
|
|
module.exports = router;
|