const express = require("express");
const { Pool } = require("pg");
const app = express();
app.use(express.json());
app.use(express.static("public"));
const db = new Pool({
user: "de-user10",
host: "de-db.ptk.itiscaf.ru",
database: "de-user10",
password: "fGz0uG18uK",
port: 5441
});
app.post("/register", async (req, res) => {
try {
const { login, password, name, surname, phone, email } = req.body;
await db.query(
`INSERT INTO users
(login,password,name,surname,phone,email,role)
VALUES ($1,$2,$3,$4,$5,$6,'user')`,
[login, password, name, surname, phone, email]
);
res.send("ok");
} catch {
res.send("error");
}
});
app.post("/login", async (req, res) => {
const { login, password } = req.body;
if (login === "admin" && password === "restaurant") {
return res.json({ role: "admin" });
}
const r = await db.query(
"SELECT * FROM users WHERE login=$1 AND password=$2",
[login, password]
);
res.json(r.rows[0] || {});
});
app.post("/book", async (req, res) => {
const { user_id, date_time, guests, phone } = req.body;
await db.query(
`INSERT INTO bookings
(user_id,date_time,guests,phone,status)
VALUES ($1,$2,$3,$4,'Новое')`,
[user_id, date_time, guests, phone]
);
res.send("ok");
});
app.get("/my/:id", async (req, res) => {
const r = await db.query(
"SELECT * FROM bookings WHERE user_id=$1",
[req.params.id]
);
res.json(r.rows);
});
app.get("/admin/bookings", async (_, res) => {
const r = await db.query("SELECT * FROM bookings");
res.json(r.rows);
});
app.post("/admin/status", async (req, res) => {
const { id, status } = req.body;
await db.query(
"UPDATE bookings SET status=$1 WHERE id=$2",
[status, id]
);
res.send("ok");
});
app.post("/admin/visit", async (req, res) => {
const { id } = req.body;
await db.query(
"UPDATE bookings SET status='Посещено' WHERE id=$1",
[id]
);
res.send("ok");
});
app.post("/review", async (req, res) => {
const { user_id, booking_id, text } = req.body;
const check = await db.query(
`SELECT * FROM bookings
WHERE id=$1 AND user_id=$2 AND status='Посещено'`,
[booking_id, user_id]
);
if (check.rows.length === 0) {
return res.status(403).send("not allowed");
}
await db.query(
`INSERT INTO reviews (user_id, booking_id, text)
VALUES ($1,$2,$3)`,
[user_id, booking_id, text]
);
res.send("ok");
});
app.listen(3000, () => {
console.log("http://localhost:3000");
});