Загрузка данных


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");
});