passesBackend/index.js
2024-06-10 02:50:43 +03:00

2155 lines
67 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const cors = require("cors");
const bcrypt = require("bcrypt");
const path = require("path");
const jwt = require("jsonwebtoken");
const fs = require("fs");
const sql = require("mssql");
const multer = require("multer");
const { DateTime } = require("luxon");
const express = require("express");
const app = express();
require("dotenv").config();
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
res.header("Access-Control-Allow-Headers", "Authorization");
res.header("Access-Control-Allow-Methods", "POST");
next();
});
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cors());
const dbConfig = {
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
server: process.env.DB_HOST,
database: process.env.DB_NAME,
port: parseInt(process.env.DB_PORT),
options: {
trustServerCertificate: true, // Разрешить доверять самоподписанным сертификатам
},
};
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });
async function executeQuery(query, params) {
console.log(params);
try {
// Create a connection pool
const pool = await new sql.ConnectionPool(dbConfig).connect();
// Create a new request
const request = pool.request();
// Add parameters to the request
for (const key in params) {
if (params.hasOwnProperty(key)) {
request.input(key, params[key]);
}
}
// Execute the query
const result = await request.query(query);
// Close the connection pool
pool.close();
return result.recordset;
} catch (err) {
throw err;
}
}
(async () => {
try {
const sqlQuery = await fs.readFileSync("create_tables.sql", "utf-8");
const result = await executeQuery(sqlQuery);
console.log("Tables created successfully");
} catch (err) {
console.error("Ошибка MSSQL", err);
}
})();
function generateToken(userId, role) {
return jwt.sign({ userId, role }, process.env.SECRET, {
expiresIn: "12h",
});
}
// Функция middleware для проверки токена
async function checkToken(req, res, next) {
const token = req.headers.authorization;
// const admins = await pool.query("SELECT * FROM users WHERE isadmin = true");
// if (admins.rows.length === 0) {
// return res.status(400).json({ message: "Необходима установка" });
// }
if (!token) {
console.log("Токен отсутствует");
return res.status(401).json({ message: "Токен отсутствует" });
}
try {
console.log(token, process.env.SECRET);
const decoded = jwt.verify(token, process.env.SECRET);
req.user = decoded;
res.set("Authorization", generateToken(decoded.userId, decoded.role));
next();
} catch (error) {
console.log("Неверный токен");
return res.status(401).json({ message: "Неверный токен" });
}
}
const saltRounds = 10;
// Обработка POST на регистрацию
app.post("/signup", upload.single("file"), async (req, res) => {
try {
const {
firstname,
surname,
secondname,
born,
name,
inn,
ogrn,
legaladdress,
address,
phone,
email,
contact,
password,
formrole,
} = req.body;
const hashedPassword = await bcrypt.hash(password, saltRounds);
const checkLegal = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE Email = @email",
{
email: email,
}
);
const checkPersons = await executeQuery(
"SELECT * FROM [Физические лица] WHERE Email = @email",
{
email: email,
}
);
if (checkPersons.length > 0 || checkLegal.length > 0) {
res.status(400).json({
message: "Такой Email уже зарегистрирован",
});
return;
}
if (formrole === "legal") {
const addResult = await executeQuery(
`INSERT INTO [Юридические лица] (Наименование, ИНН, ОГРН, Юридический_адрес, Фактический_адрес, Телефон, Email, Контактное_лицо, Пароль)
OUTPUT inserted.*
VALUES (@name, @inn, @ogrn, @legaladdress, @address, @phone, @email, @contact, @hashedPassword)
`,
{
name: name,
inn: inn,
ogrn: ogrn,
legaladdress: legaladdress,
address: address,
phone: phone,
email: email,
contact: contact,
hashedPassword: hashedPassword,
}
);
const userId = addResult[0].id;
const role = "legal";
const token = jwt.sign({ userId, role }, process.env.SECRET, {
expiresIn: "12h",
});
res.status(201).json({
message: "Юридическое лицо успешно добавлено",
token: token,
});
} else {
const addResult = await executeQuery(
`INSERT INTO [Физические лица] (Имя, Фамилия, Отчество, Дата_рождения, Телефон, Email, Пароль)
OUTPUT inserted.*
VALUES (@firstname, @surname, @secondname, @born, @phone, @email, @hashedPassword)
`,
{
firstname: firstname,
surname: surname,
secondname: secondname,
born: born,
phone: phone,
email: email,
hashedPassword: hashedPassword,
}
);
const userId = addResult[0].id;
const role = "guest";
const token = jwt.sign({ userId, role }, process.env.SECRET, {
expiresIn: "12h",
});
res.status(201).json({
message: "Физическое лицо успешно добавлено",
token: token,
});
}
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка DELETE запроса для удаления строки с определенным ID из таблицы "Юридические лица"
app.delete("/legal/delete", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const result = await executeQuery(
"DELETE FROM [Юридические лица] WHERE id = @id",
{
id: id,
}
);
res.status(200).json({ message: "Строка успешно удалена" });
} catch (error) {
console.error("Ошибка при обработке DELETE запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка DELETE запроса для удаления строки с определенным ID из таблицы "Юридические лица"
app.delete("/user/delete", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const result = await executeQuery(
"SELECT id FROM [Трудоустройство] WHERE Работник = @id",
{
id: id,
}
);
if (result.length > 0) {
const secondDelete = await executeQuery(
"DELETE FROM [Трудоустройство] WHERE id = @id",
{
id: result[0].id,
}
);
}
const firstDelete = await executeQuery(
"DELETE FROM [Физические лица] WHERE id = @id",
{
id: id,
}
);
res.status(200).json({ message: "Строка успешно удалена" });
} catch (error) {
console.error("Ошибка при обработке DELETE запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка запроса на авторизацию и генерация JWT токена при успешной аутентификации
app.post("/login", upload.single("file"), async (req, res) => {
const { email, password } = req.body;
const checkResult = await executeQuery(
"SELECT * FROM [Физические лица] WHERE Email = @email",
{
email: email,
}
);
if (checkResult.length > 0) {
console.log(checkResult[0].Пароль);
const checkUser = await executeQuery(
"SELECT * FROM [Трудоустройство] WHERE Работник = @id",
{
id: checkResult[0].id,
}
);
const storedHashedPassword = checkResult[0].Пароль;
const userId = checkResult[0].id;
var role;
if (!checkUser[0]) {
role = "guest";
} else {
role = checkUser[0].Должность;
}
const passwordMatch = await bcrypt.compare(password, storedHashedPassword);
if (!passwordMatch) {
return res.status(401).json({ message: "Неверные учетные данные" });
}
const token = jwt.sign({ userId, role }, process.env.SECRET, {
expiresIn: "12h",
});
console.log("LOGIN", token);
res.json({ token });
} else {
const checkLegals = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE Email = @email",
{
email: email,
}
);
if (checkLegals.length > 0) {
const storedHashedPassword = checkLegals[0].Пароль;
const userId = checkLegals[0].id;
const role = "legal";
const passwordMatch = await bcrypt.compare(
password,
storedHashedPassword
);
if (!passwordMatch) {
return res.status(401).json({ message: "Неверные учетные данные" });
}
const token = jwt.sign({ userId, role }, process.env.SECRET, {
expiresIn: "12h",
});
console.log("LOGIN", token);
res.set("Token", token).json({ token });
res.json({ token });
} else {
return res.status(401).json({ message: "Пользователь не найден" });
}
}
});
// Обработка запроса на получение данных для личного кабинета
app.get("/account", checkToken, async (req, res) => {
try {
const userId = req.user.userId;
const userRole = req.user.role;
console.log(userId, userRole);
if (userRole === "legal") {
const result = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE id = @id",
{
id: userId,
}
);
res.status(200).json({
data: result[0],
role: userRole,
});
} else {
const result = await executeQuery(
"SELECT * FROM [Физические лица] WHERE id = @id",
{
id: userId,
}
);
res.status(200).json({
data: result[0],
role: userRole,
});
}
} catch (error) {
console.error("Ошибка при получении данных пользователя:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка POST на новую заявку
app.post(
"/passes/newform",
upload.single("file"),
checkToken,
async (req, res) => {
try {
const {
formrole,
passtext,
type,
fullnames,
legalname,
date,
carnumber,
carbrand,
carmodel,
carcolor,
tmcname,
tmcunit,
tmcquantity,
} = req.body;
var who;
if (req.user.role === "legal") {
const result = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
who = result[0].Наименование;
} else {
const result = await executeQuery(
"SELECT * FROM [Физические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
who =
result[0].Фамилия + " " + result[0].Имя + " " + result[0].Отчество;
}
const currentDate = new Date();
const formattedDate = currentDate.toISOString();
for (const name of fullnames) {
if (name && name.trim().length > 0) {
await executeQuery(
`INSERT INTO [Заявки] (Статус, Вид_заявки, Работник, Датааявки, Дополнение, Организация, Автоодель, Автоарка, Авто_цвет, Авто_госомер, Наименование, Единица_измерения, Количество, Автор)
OUTPUT inserted.*
VALUES (@status, @type, @fullname, @added, @passtext, @legalname, @carmodel, @carbrand, @carcolor, @carnumber, @tmcname, @tmcunit, @tmcquantity, @who)
`,
{
status: "Новая",
type: type,
fullname: name,
added: formattedDate,
passtext: passtext,
legalname: legalname,
carmodel: JSON.stringify(carmodel),
carbrand: JSON.stringify(carbrand),
carcolor: JSON.stringify(carcolor),
carnumber: JSON.stringify(carnumber),
tmcname: JSON.stringify(tmcname),
tmcunit: JSON.stringify(tmcunit),
tmcquantity: JSON.stringify(tmcquantity),
who: who,
}
);
}
}
res.status(201).json({
message: "Заявка успешно отправлена",
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на регистрацию
app.post(
"/passes/newtso",
upload.single("file"),
checkToken,
async (req, res) => {
try {
const { type, object, fabula, fullname } = req.body;
if (req.user.role === "guest") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const id = req.user.id;
const currentDate = new Date();
const formattedDate = currentDate.toISOString();
const addResult = await executeQuery(
`INSERT INTO [Заявки_ТСО] (Вид_неисправности, Объект, Фабула, Дата_подачи, Состояние, Кто_подал, Дата_изменения)
OUTPUT inserted.*
VALUES (@type, @object, @fabula, @formattedDate, @status, @fullname, @formattedDate)
`,
{
status: "Новая",
type: type,
object: object,
fabula: fabula,
formattedDate: formattedDate,
id: id,
fullname: fullname,
}
);
res.status(201).json({
message: "Заявка успешно отправлена",
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка PUT запроса с новыми данными пользователя
app.put(
"/account/update",
upload.single("file"),
checkToken,
async (req, res) => {
const {
firstname,
surname,
secondname,
born,
name,
inn,
ogrn,
legaladdress,
address,
phone,
contactphone,
email,
contact,
password,
formrole,
bornplace,
passport,
citizenship,
regaddress,
realaddress,
dms,
} = req.body;
const id = req.user.userId;
const role = req.user.role;
try {
if (role === "legal") {
const params = {};
let query = `UPDATE [Юридические лица] SET`;
if (password) {
const hashedPassword = await bcrypt.hash(password, saltRounds);
query += ` Пароль = @password,`;
params.password = hashedPassword;
}
if (inn) {
query += ` ИНН = @inn,`;
params.inn = inn;
}
if (ogrn) {
query += ` ОГРН = @ogrn,`;
params.ogrn = ogrn;
}
if (legaladdress) {
query += ` Юридический_адрес = @legaladdress,`;
params.legaladdress = legaladdress;
}
if (address) {
query += ` Фактический_адрес = @address,`;
params.address = address;
}
if (contact) {
query += ` Контактное_лицо = @contact,`;
params.contact = contact;
}
if (contactphone) {
query += ` Телефон = @contactphone,`;
params.contactphone = contactphone;
}
if (name) {
query += ` Наименование = @name`;
params.name = name;
}
query += ` OUTPUT inserted.*`;
query += ` WHERE id = @id`;
console.log(query);
const result = await executeQuery(query, {
...params,
id,
});
res.status(201).json({
message: "Данные пользователя успешно обновлены",
data: result,
});
} else {
const params = {};
let query = `UPDATE [Физические лица] SET`;
if (password) {
const hashedPassword = await bcrypt.hash(password, saltRounds);
query += ` Пароль = @password,`;
params.password = hashedPassword;
}
if (surname) {
query += ` Фамилия = @surname,`;
params.surname = surname;
}
if (secondname) {
query += ` Отчество = @secondname,`;
params.secondname = secondname;
}
if (born) {
query += ` Дата_рождения = @born,`;
params.born = born;
}
if (bornplace) {
query += ` Место_рождения = @bornplace,`;
params.bornplace = bornplace;
}
if (passport) {
query += ` Паспорт = @passport,`;
params.passport = passport;
}
if (citizenship) {
query += ` Гражданство = @citizenship,`;
params.citizenship = citizenship;
}
if (regaddress) {
query += ` Место_регистрации = @regaddress,`;
params.regaddress = regaddress;
}
if (realaddress) {
query += ` Место_жительства = @realaddress,`;
params.realaddress = realaddress;
}
if (dms) {
query += ` ПолисМС = @dms,`;
params.dms = dms;
}
if (phone) {
query += ` Телефон = @phone,`;
params.phone = phone;
}
if (firstname) {
query += ` Имя = @firstname`;
params.firstname = firstname;
}
query += ` OUTPUT inserted.*`;
query += ` WHERE id = @id`;
console.log(query);
const result = await executeQuery(query, {
...params,
id,
});
res.status(201).json({
message: "Данные пользователя успешно обновлены",
data: result,
});
}
} catch (error) {
console.error("Ошибка при обработке PUT запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на добавление работника из аккаунта гостя
app.post("/users/makeworker", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const addResult = await executeQuery(
`INSERT INTO [Трудоустройство] (Работник, Должность)
OUTPUT inserted.*
VALUES (@id, @position)
`,
{
id: id,
position: "Работник",
}
);
res.status(201).json({
message: "Работник успешно добавлен",
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка PUT запроса с новыми данными другого пользователя
app.put(
"/users/update",
upload.single("file"),
checkToken,
async (req, res) => {
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const {
firstname,
surname,
secondname,
oldsurname,
born,
name,
inn,
ogrn,
legaladdress,
address,
phone,
contactphone,
contact,
password,
formrole,
bornplace,
passport,
citizenship,
regaddress,
realaddress,
tabel,
dms,
block,
organization,
sub,
department,
migration,
permit,
contract,
contractdate,
lastjob,
fire,
reason,
role,
id,
additional,
} = req.body;
try {
if (formrole === "legal") {
const params = {};
let query = `UPDATE [Юридические лица] SET`;
if (password) {
const hashedPassword = await bcrypt.hash(password, saltRounds);
query += ` Пароль = @password,`;
params.password = hashedPassword;
}
if (inn) {
query += ` ИНН = @inn,`;
params.inn = inn;
}
if (ogrn) {
query += ` ОГРН = @ogrn,`;
params.ogrn = ogrn;
}
if (legaladdress) {
query += ` Юридический_адрес = @legaladdress,`;
params.legaladdress = legaladdress;
}
if (address) {
query += ` Фактический_адрес = @address,`;
params.address = address;
}
if (contact) {
query += ` Контактное_лицо = @contact,`;
params.contact = contact;
}
if (contactphone) {
query += ` Телефон = @contactphone,`;
params.contactphone = contactphone;
}
if (additional) {
query += ` Дополнительно = @additional,`;
params.additional = additional;
}
if (name) {
query += ` Наименование = @name`;
params.name = name;
}
query += ` OUTPUT inserted.*`;
query += ` WHERE id = @id`;
console.log(query);
const result = await executeQuery(query, {
...params,
id,
});
res.status(201).json({
message: "Данные пользователя успешно обновлены",
data: result,
});
} else {
const params = {};
let query = `UPDATE [Физические лица] SET`;
if (password) {
const hashedPassword = await bcrypt.hash(password, saltRounds);
query += ` Пароль = @password,`;
params.password = hashedPassword;
}
if (surname) {
query += ` Фамилия = @surname,`;
params.surname = surname;
}
if (secondname) {
query += ` Отчество = @secondname,`;
params.secondname = secondname;
}
if (oldsurname) {
query += ` Фамилия_старая = @oldsurname,`;
params.oldsurname = oldsurname;
}
if (born) {
query += ` Дата_рождения = @born,`;
params.born = born;
}
if (bornplace) {
query += ` Место_рождения = @bornplace,`;
params.bornplace = bornplace;
}
if (passport) {
query += ` Паспорт = @passport,`;
params.passport = passport;
}
if (citizenship) {
query += ` Гражданство = @citizenship,`;
params.citizenship = citizenship;
}
if (regaddress) {
query += ` Место_регистрации = @regaddress,`;
params.regaddress = regaddress;
}
if (realaddress) {
query += ` Место_жительства = @realaddress,`;
params.realaddress = realaddress;
}
if (tabel) {
query += ` Табельный_номер = @tabel,`;
params.tabel = tabel;
}
if (dms) {
query += ` ПолисМС = @dms,`;
params.dms = dms;
}
if (block) {
query += ` Черный_список = @block,`;
params.block = block;
}
if (phone) {
query += ` Телефон = @phone,`;
params.phone = phone;
}
if (firstname) {
query += ` Имя = @firstname`;
params.firstname = firstname;
}
query += ` OUTPUT inserted.*`;
query += ` WHERE id = @id`;
var result = await executeQuery(query, {
...params,
id,
});
var workresult;
if (role) {
const workparams = {};
let workquery = `UPDATE [Трудоустройство] SET`;
if (organization) {
workquery += ` Организация = @organization,`;
workparams.organization = organization;
}
if (sub) {
workquery += ` Субподряд = @sub,`;
workparams.sub = sub;
}
if (department) {
workquery += ` Цех = @department,`;
workparams.department = department;
}
if (migration) {
workquery += ` Миграционная_карта = @migration,`;
workparams.migration = migration;
}
if (permit) {
workquery += ` Разрешениеа_работуо = @permit,`;
workparams.permit = permit;
}
if (contract) {
workquery += ` Трудовой_договор = @contract,`;
workparams.contract = contract;
}
if (contractdate) {
workquery += ` Датаоговора = @contractdate,`;
workparams.contractdate = contractdate;
}
if (lastjob) {
workquery += ` Последнееесто_работы = @lastjob,`;
workparams.lastjob = lastjob;
}
if (fire) {
workquery += ` Увольнение = @fire,`;
workparams.fire = fire;
}
if (reason) {
workquery += ` Причина_увольнения = @reason,`;
workparams.reason = reason;
}
if (role) {
workquery += ` Должность = @role`;
workparams.role = role;
}
workquery += ` OUTPUT inserted.*`;
workquery += ` WHERE Работник = @id`;
workresult = await executeQuery(workquery, {
...workparams,
id,
});
}
res.status(201).json({
message: "Данные пользователя успешно обновлены",
});
}
} catch (error) {
console.error("Ошибка при обработке PUT запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на получение списка пользователей
app.post(
"/users/getusers",
upload.single("file"),
checkToken,
async (req, res) => {
try {
var { page, searchText } = req.body;
if (req.user.role !== "Дирекция" && req.user.role !== "КПП") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
if (!page) {
page = 1;
}
const pageSize = 15;
const offset = (page - 1) * pageSize;
let physicalPersonsQuery = `
SELECT pp.*, emp.id AS emp_id, emp.[Организация], emp.[Субподряд], emp.[Цех], emp.[Должность], emp.[Миграционная_карта], emp.[Разрешениеа_работуо], emp.[Трудовой_договор], emp.[Датаоговора], emp.[Последнееесто_работы], emp.[Увольнение], emp.[Причина_увольнения]
FROM [Физические лица] pp
LEFT JOIN [Трудоустройство] emp ON pp.id = emp.Работник
`;
let legalPersonsQuery = `
SELECT *
FROM [Юридические лица]
`;
var totalCountQuery;
if (searchText) {
totalCountQuery = `
SELECT
(SELECT COUNT(*)
FROM [Физические лица] pp
LEFT JOIN [Трудоустройство] emp ON pp.id = emp.Работник
WHERE CONCAT(
pp.[Фамилия] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Имя] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Отчество] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Место_рождения] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Паспорт], ' ',
pp.[Табельный_номер] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Гражданство] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Место_регистрации] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Место_жительства] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[ПолисМС] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Табельный_номер] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Телефон], ' ',
pp.[Email] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
) AS PhysicalCount,
(SELECT COUNT(*)
FROM [Юридические лица]
WHERE CONCAT(
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[ИНН] COLLATE Cyrillic_General_CI_AS, ' ',
[ОГРН] COLLATE Cyrillic_General_CI_AS, ' ',
ридический_адрес] COLLATE Cyrillic_General_CI_AS, ' ',
актический_адрес] COLLATE Cyrillic_General_CI_AS, ' ',
[Телефон], ' ',
[Email] COLLATE Cyrillic_General_CI_AS, ' ',
[Контактное_лицо] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
) AS LegalCount
`;
physicalPersonsQuery += `
WHERE CONCAT(
pp.[Фамилия] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Имя] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Отчество] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Место_рождения] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Паспорт], ' ',
pp.[Табельный_номер] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Гражданство] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Место_регистрации] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Место_жительства] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[ПолисМС] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Табельный_номер] COLLATE Cyrillic_General_CI_AS, ' ',
pp.[Телефон], ' ',
pp.[Email] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
`;
legalPersonsQuery += `
WHERE CONCAT(
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[ИНН] COLLATE Cyrillic_General_CI_AS, ' ',
[ОГРН] COLLATE Cyrillic_General_CI_AS, ' ',
ридический_адрес] COLLATE Cyrillic_General_CI_AS, ' ',
актический_адрес] COLLATE Cyrillic_General_CI_AS, ' ',
[Телефон], ' ',
[Email] COLLATE Cyrillic_General_CI_AS, ' ',
[Контактное_лицо] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
`;
} else {
totalCountQuery = `
SELECT
(SELECT COUNT(*)
FROM [Физические лица] pp
LEFT JOIN [Трудоустройство] emp ON pp.id = emp.Работник
) AS PhysicalCount,
(SELECT COUNT(*)
FROM [Юридические лица]
) AS LegalCount
`;
}
physicalPersonsQuery += `
ORDER BY pp.id DESC
OFFSET ${offset} ROWS
FETCH NEXT ${pageSize} ROWS ONLY
`;
legalPersonsQuery += `
ORDER BY id DESC
OFFSET ${offset} ROWS
FETCH NEXT ${pageSize} ROWS ONLY
`;
const people = await executeQuery(physicalPersonsQuery);
const legals = await executeQuery(legalPersonsQuery);
const totalCounts = await executeQuery(totalCountQuery);
const totalCount =
totalCounts[0].PhysicalCount + totalCounts[0].LegalCount;
const totalCountPeople = totalCounts[0].PhysicalCount;
const totalCountLegal = totalCounts[0].LegalCount;
var userData;
if (req.user.role === "legal") {
userData = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
} else {
userData = await executeQuery(
"SELECT * FROM [Физические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
}
res.status(201).json({
people: people,
legals: legals,
totalCountPeople: totalCountPeople,
totalCountLegal: totalCountLegal,
totalCount: totalCount,
userData: userData[0],
role: req.user.role,
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на получение списка Заявок ТСО
app.post(
"/passes/gettso",
upload.single("file"),
checkToken,
async (req, res) => {
try {
var { page } = req.body;
if (req.user.role === "guest") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
if (!page) {
page = 1;
}
const pageSize = 15;
const offset = (page - 1) * pageSize;
let tsoQuery = `
SELECT *
FROM [Заявки_ТСО]
`;
tsoQuery += `
ORDER BY id DESC
OFFSET ${offset} ROWS
FETCH NEXT ${pageSize} ROWS ONLY
`;
totalCountQuery = `
SELECT
(SELECT COUNT(*)
FROM [Заявки_ТСО]
) AS TotalCount
`;
const tso = await executeQuery(tsoQuery);
const totalCounts = await executeQuery(totalCountQuery);
console.log(tso);
const totalCount = totalCounts[0].TotalCount;
console.log(totalCount);
var userData;
userData = await executeQuery(
"SELECT * FROM [Физические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
res.status(201).json({
passes: tso,
totalCount: totalCount,
userData: userData[0],
role: req.user.role,
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка GET запроса на получение данных конкретного физ лица
app.get("/users/getuser", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция" && req.user.role !== "КПП") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
let physicalPersonsQuery = `
SELECT pp.*, emp.id AS emp_id, emp.[Организация], emp.[Субподряд], emp.[Цех], emp.[Должность], emp.[Миграционная_карта], emp.[Разрешениеа_работуо], emp.[Трудовой_договор], emp.[Датаоговора], emp.[Последнееесто_работы], emp.[Увольнение], emp.[Причина_увольнения]
FROM [Физические лица] pp
LEFT JOIN [Трудоустройство] emp ON pp.id = emp.Работник
WHERE pp.id = @id
`;
const result = await executeQuery(physicalPersonsQuery, { id });
res.status(201).json({
data: result[0],
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка GET запроса на получение данных конкретного юр лица
app.get("/legals/getlegal", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция" && req.user.role !== "КПП") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
let legalsQuery = `
SELECT * FROM [Юридические лица] WHERE id = @id
`;
const result = await executeQuery(legalsQuery, { id });
res.status(201).json({
data: result[0],
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка POST на получение списка заявок
app.post(
"/forms/getapplications",
upload.single("file"),
checkToken,
async (req, res) => {
try {
var { page, searchText } = req.body;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
if (!page) {
page = 1;
}
const pageSize = 15;
const offset = (page - 1) * pageSize;
let applicationsQuery = `
SELECT *
FROM [Заявки]
`;
var totalCountQuery;
if (searchText) {
totalCountQuery = `
SELECT COUNT(*) AS total
FROM [Заявки]
WHERE CONCAT(
[Статус] COLLATE Cyrillic_General_CI_AS, ' ',
[Работник] COLLATE Cyrillic_General_CI_AS, ' ',
[Вид_заявки] COLLATE Cyrillic_General_CI_AS, ' ',
атааявки], ' ',
ата_принятия], ' ',
[Решение] COLLATE Cyrillic_General_CI_AS, ' ',
ата_решения], ' ',
[Дополнение] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоодель] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоарка] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_госомер] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ',
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[Организация] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
`;
applicationsQuery += `
WHERE CONCAT(
[Статус] COLLATE Cyrillic_General_CI_AS, ' ',
[Работник] COLLATE Cyrillic_General_CI_AS, ' ',
[Вид_заявки] COLLATE Cyrillic_General_CI_AS, ' ',
атааявки], ' ',
ата_принятия], ' ',
[Решение] COLLATE Cyrillic_General_CI_AS, ' ',
ата_решения], ' ',
[Дополнение] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоодель] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоарка] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_госомер] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ',
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[Организация] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
`;
} else {
totalCountQuery = `
SELECT COUNT(*) AS total FROM [Заявки]
`;
}
applicationsQuery += `
ORDER BY id DESC
OFFSET ${offset} ROWS
FETCH NEXT ${pageSize} ROWS ONLY
`;
const applications = await executeQuery(applicationsQuery);
const totalCount = await executeQuery(totalCountQuery);
var userData;
if (req.user.role === "legal") {
userData = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
} else {
userData = await executeQuery(
"SELECT * FROM [Физические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
}
res.status(201).json({
applications: applications,
totalCount: totalCount[0].total,
userData: userData[0],
role: req.user.role,
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на получение списка заявок
app.post(
"/forms/getmyapplications",
upload.single("file"),
checkToken,
async (req, res) => {
try {
var { page, searchText } = req.body;
if (!page) {
page = 1;
}
const pageSize = 15;
const offset = (page - 1) * pageSize;
var userData;
var fullname;
if (req.user.role === "legal") {
userData = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
fullname = userData[0].Наименование;
} else {
userData = await executeQuery(
"SELECT * FROM [Физические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
fullname = `${userData[0].Фамилия} ${userData[0].Имя} ${userData[0].Отчество}`;
}
let applicationsQuery = `
SELECT *
FROM [Заявки]
WHERE [Автор] = N'${fullname}' COLLATE Cyrillic_General_CI_AS
`;
let totalCountQuery = `
SELECT COUNT(*) AS total
FROM [Заявки]
WHERE [Автор] = N'${fullname}' COLLATE Cyrillic_General_CI_AS
`;
if (searchText) {
totalCountQuery += ` AND CONCAT(
[Статус] COLLATE Cyrillic_General_CI_AS, ' ',
[Работник] COLLATE Cyrillic_General_CI_AS, ' ',
[Вид_заявки] COLLATE Cyrillic_General_CI_AS, ' ',
атааявки], ' ',
ата_принятия], ' ',
[Решение] COLLATE Cyrillic_General_CI_AS, ' ',
ата_решения], ' ',
[Дополнение] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоодель] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоарка] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_госомер] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ',
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[Организация] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS`;
applicationsQuery += ` AND CONCAT(
[Статус] COLLATE Cyrillic_General_CI_AS, ' ',
[Работник] COLLATE Cyrillic_General_CI_AS, ' ',
[Вид_заявки] COLLATE Cyrillic_General_CI_AS, ' ',
атааявки], ' ',
ата_принятия], ' ',
[Решение] COLLATE Cyrillic_General_CI_AS, ' ',
ата_решения], ' ',
[Дополнение] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоодель] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоарка] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_госомер] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ',
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[Организация] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS`;
}
applicationsQuery += `
ORDER BY id DESC
OFFSET ${offset} ROWS
FETCH NEXT ${pageSize} ROWS ONLY
`;
const applications = await executeQuery(applicationsQuery);
const totalCount = await executeQuery(totalCountQuery);
res.status(201).json({
applications: applications,
totalCount: totalCount[0].total,
userData: userData[0],
role: req.user.role,
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка GET запроса на получение данных конкретной заявки
app.get("/forms/application", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция" && req.user.role !== "Пропуска") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
let legalsQuery = `
SELECT * FROM [Заявки] WHERE id = @id
`;
const result = await executeQuery(legalsQuery, { id });
res.status(201).json({
data: result[0],
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка DELETE запроса для удаления строки с определенным ID из таблицы "Заявки"
app.delete("/forms/delete", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция" && req.user.role !== "Пропуска") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const result = await executeQuery("DELETE FROM [Заявки] WHERE id = @id", {
id: id,
});
res.status(200).json({ message: "Строка успешно удалена" });
} catch (error) {
console.error("Ошибка при обработке DELETE запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка PUT запроса с новыми данными заявки
app.put(
"/forms/update",
upload.single("file"),
checkToken,
async (req, res) => {
const {
id,
name,
legal,
status,
decision,
carnumber,
carbrand,
carmodel,
carcolor,
tmcname,
tmcunit,
tmcquantity,
date,
todate,
finaldate,
additional,
} = req.body;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
try {
const updateResult = await executeQuery(
`UPDATE [Заявки] SET Статус = @status, Работник = @name, Датааявки = @date, Действиео = @todate, Дата_решения = @finaldate, Организация = @legal, Решение = @decision, Дополнение = @additional, Автоодель = @carmodel, Автоарка = @carbrand, Авто_цвет = @carcolor, Авто_госомер = @carnumber, Наименование = @tmcname, Единица_измерения = @tmcunit, Количество = @tmcquantity
OUTPUT inserted.*
WHERE id = @id
`,
{
status: status,
name: name,
date: date,
todate: todate,
finaldate: finaldate,
legal: legal,
decision: decision,
additional: additional,
carmodel: carmodel,
carbrand: carbrand,
carcolor: carcolor,
carnumber: carnumber,
tmcname: tmcname,
tmcunit: tmcunit,
tmcquantity: tmcquantity,
id: id,
}
);
res.status(201).json({
message: "Данные заявки успешно обновлены",
data: updateResult[0],
});
} catch (error) {
console.error("Ошибка при обработке PUT запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на добавление работника из аккаунта гостя
app.post(
"/forms/makepass",
upload.single("file"),
checkToken,
async (req, res) => {
const {
id,
name,
legal,
status,
decision,
carnumber,
carbrand,
carmodel,
carcolor,
tmcname,
tmcunit,
tmcquantity,
date,
todate,
finaldate,
additional,
type,
} = req.body;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
try {
const updateResult = await executeQuery(
`UPDATE [Заявки] SET Статус = @status, Работник = @name, Датааявки = @date, Дата_решения = @finaldate, Организация = @legal, Решение = @decision, Дополнение = @additional, Автоодель = @carmodel, Автоарка = @carbrand, Авто_цвет = @carcolor, Авто_госомер = @carnumber, Наименование = @tmcname, Единица_измерения = @tmcunit, Количество = @tmcquantity
OUTPUT inserted.*
WHERE id = @id
`,
{
status: "Утверждено",
name: name,
date: date,
finaldate: finaldate,
legal: legal,
decision: decision,
additional: additional,
carmodel: carmodel,
carbrand: carbrand,
carcolor: carcolor,
carnumber: carnumber,
tmcname: tmcname,
tmcunit: tmcunit,
tmcquantity: tmcquantity,
id: id,
}
);
const addResult = await executeQuery(
`INSERT INTO [Пропуска] (Состояние, Работник, Заявка, Дата_выдачи, Действиео, Автоодель, Автоарка, Авто_цвет, Авто_госомер, Организация, Наименование, Единица_измерения, Количество, Дополнительно, Вид_пропуска)
OUTPUT inserted.*
VALUES (@status, @name, @id, @date, @todate, @carmodel, @carbrand, @carcolor, @carnumber, @legal, @tmcname, @tmcunit, @tmcquantity, @additional, @type)
`,
{
status: "Заказан",
name: name,
date: date,
todate: todate,
finaldate: finaldate,
legal: legal,
decision: decision,
additional: additional,
carmodel: carmodel,
carbrand: carbrand,
carcolor: carcolor,
carnumber: carnumber,
tmcname: tmcname,
tmcunit: tmcunit,
tmcquantity: tmcquantity,
id: id,
type: type,
}
);
res.status(201).json({
message: "Данные пользователя успешно обновлены",
data: addResult[0],
});
} catch (error) {
console.error("Ошибка при обработке PUT запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на получение списка заявок
app.post(
"/passes/getpasses",
upload.single("file"),
checkToken,
async (req, res) => {
try {
var { page, searchText } = req.body;
if (
req.user.role !== "Дирекция" &&
req.user.role !== "Пропуска" &&
req.user.role !== "КПП"
) {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
if (!page) {
page = 1;
}
const pageSize = 15;
const offset = (page - 1) * pageSize;
let passesQuery = `
SELECT *
FROM [Пропуска]
`;
var totalCountQuery;
if (searchText) {
totalCountQuery = `
SELECT COUNT(*) AS total
FROM [Пропуска]
WHERE CONCAT(
[Состояние] COLLATE Cyrillic_General_CI_AS, ' ',
[Работник] COLLATE Cyrillic_General_CI_AS, ' ',
[Организация] COLLATE Cyrillic_General_CI_AS, ' ',
ата_выдачи], ' ',
ействиео], ' ',
[Вид_пропуска] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоодель], ' ',
[Автоарка] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_госомер] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ',
[Дополнительно] COLLATE Cyrillic_General_CI_AS, ' ',
[Зонаоступа] COLLATE Cyrillic_General_CI_AS, ' ',
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[Согласование] COLLATE Cyrillic_General_CI_AS, ' ',
ель_выдачи] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
`;
passesQuery += `
WHERE CONCAT(
[Состояние] COLLATE Cyrillic_General_CI_AS, ' ',
[Работник] COLLATE Cyrillic_General_CI_AS, ' ',
[Организация] COLLATE Cyrillic_General_CI_AS, ' ',
ата_выдачи], ' ',
ействиео], ' ',
[Вид_пропуска] COLLATE Cyrillic_General_CI_AS, ' ',
[Автоодель], ' ',
[Автоарка] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_госомер] COLLATE Cyrillic_General_CI_AS, ' ',
[Авто_цвет] COLLATE Cyrillic_General_CI_AS, ' ',
[Дополнительно] COLLATE Cyrillic_General_CI_AS, ' ',
[Зонаоступа] COLLATE Cyrillic_General_CI_AS, ' ',
[Наименование] COLLATE Cyrillic_General_CI_AS, ' ',
[Согласование] COLLATE Cyrillic_General_CI_AS, ' ',
ель_выдачи] COLLATE Cyrillic_General_CI_AS
) LIKE N'%${searchText}%' COLLATE Cyrillic_General_CI_AS
`;
} else {
totalCountQuery = `
SELECT COUNT(*) AS total FROM [Пропуска]
`;
}
passesQuery += `
ORDER BY id DESC
OFFSET ${offset} ROWS
FETCH NEXT ${pageSize} ROWS ONLY
`;
const passes = await executeQuery(passesQuery);
const totalCount = await executeQuery(totalCountQuery);
var userData;
if (req.user.role === "legal") {
userData = await executeQuery(
"SELECT * FROM [Юридические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
} else {
userData = await executeQuery(
"SELECT * FROM [Физические лица] WHERE id = @id",
{
id: req.user.userId,
}
);
}
res.status(201).json({
passes: passes,
totalCount: totalCount[0].total,
userData: userData[0],
role: req.user.role,
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка POST на добавление нового пропуска
app.post(
"/passes/newpass",
upload.single("file"),
checkToken,
async (req, res) => {
const {
type,
status,
name,
date,
todate,
phone,
email,
legal,
purpose,
address,
additional,
carnumber,
carbrand,
carmodel,
carcolor,
tmcname,
tmcunit,
tmcquantity,
} = req.body;
if (req.user.role !== "Дирекция" && req.user.role !== "Пропуска") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
try {
const addResult = await executeQuery(
`INSERT INTO [Пропуска] (Состояние, Работник, Дата_выдачи, Действиео, Автоодель, Автоарка, Авто_цвет, Авто_госомер, Организация, Наименование, Единица_измерения, Количество, Дополнительно, Вид_пропуска, Email, Телефон, Цель_выдачи, Зонаоступа)
OUTPUT inserted.*
VALUES (@status, @name, @date, @todate, @carmodel, @carbrand, @carcolor, @carnumber, @legal, @tmcname, @tmcunit, @tmcquantity, @additional, @type, @email, @phone, @purpose, @address)
`,
{
status: status,
name: name,
date: date,
todate: todate,
legal: legal,
additional: additional,
carmodel: JSON.stringify(carmodel),
carbrand: JSON.stringify(carbrand),
carcolor: JSON.stringify(carcolor),
carnumber: JSON.stringify(carnumber),
tmcname: JSON.stringify(tmcname),
tmcunit: JSON.stringify(tmcunit),
tmcquantity: JSON.stringify(tmcquantity),
type: type,
email: email,
phone: phone,
purpose: purpose,
address: address,
}
);
res.status(201).json({
message: "Данные на пропуск успешно добавлены",
data: addResult[0],
});
} catch (error) {
console.error("Ошибка при обработке PUT запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
}
);
// Обработка GET запроса на получение данных конкретной заявки
app.get("/passes/pass", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция" && req.user.role !== "Пропуска") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
let passQuery = `
SELECT * FROM [Пропуска] WHERE id = @id
`;
const result = await executeQuery(passQuery, { id });
res.status(201).json({
data: result[0],
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка POST на обновление данных пропуска
app.put(
"/passes/update",
upload.single("file"),
checkToken,
async (req, res) => {
const {
type,
status,
name,
date,
todate,
phone,
email,
legal,
purpose,
address,
additional,
carnumber,
carbrand,
carmodel,
carcolor,
tmcname,
tmcunit,
tmcquantity,
factsValues,
id,
} = req.body;
if (req.user.role !== "Дирекция" && req.user.role !== "Пропуска") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
try {
const updateResult = await executeQuery(
`UPDATE [Пропуска]
SET Состояние = @status,
Работник = @name,
Дата_выдачи = @date,
Действиео = @todate,
Автоодель = @carmodel,
Автоарка = @carbrand,
Авто_цвет = @carcolor,
Авто_госомер = @carnumber,
Организация = @legal,
Наименование = @tmcname,
Единица_измерения = @tmcunit,
Количество = @tmcquantity,
Дополнительно = @additional,
Вид_пропуска = @type,
Email = @email,
Телефон = @phone,
Цель_выдачи = @purpose,
Отметка = @fact,
Зонаоступа = @address
OUTPUT inserted.*
WHERE id = @id
`,
{
status: status,
name: name,
date: date,
todate: todate,
legal: legal,
additional: additional,
carmodel: carmodel,
carbrand: carbrand,
carcolor: carcolor,
carnumber: carnumber,
tmcname: tmcname,
tmcunit: tmcunit,
tmcquantity: tmcquantity,
type: type,
email: email,
phone: phone,
purpose: purpose,
fact: JSON.stringify(factsValues),
address: address,
id: id,
}
);
if (updateResult.length === 0) {
res.status(404).json({ message: "Пропуск не найден" });
return;
}
res.status(200).json({
message: "Данные пропуска успешно обновлены",
data: updateResult[0],
});
} catch (error) {
console.error("Ошибка при обновлении данных пропуска:", error);
res
.status(500)
.json({ message: "Произошла ошибка при обновлении данных" });
}
}
);
// Обработка DELETE запроса для удаления строки с определенным ID из таблицы "Заявки"
app.delete("/passes/delete", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция" && req.user.role !== "Пропуска") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const result = await executeQuery("DELETE FROM [Пропуска] WHERE id = @id", {
id: id,
});
res.status(200).json({ message: "Строка успешно удалена" });
} catch (error) {
console.error("Ошибка при обработке DELETE запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка GET запроса на получение данных конкретной заявки ТСО
app.get("/passes/tso", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
let passQuery = `
SELECT * FROM [Заявки_ТСО] WHERE id = @id
`;
const result = await executeQuery(passQuery, { id });
res.status(201).json({
data: result[0],
});
} catch (error) {
console.error("Ошибка при обработке POST запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
// Обработка POST на обновление данных заявки ТСО
app.put(
"/passes/tso/update",
upload.single("file"),
checkToken,
async (req, res) => {
const { type, status, object, fabula, executor, events, id } = req.body;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const currentDate = new Date();
const formattedDate = currentDate.toISOString();
try {
const updateResult = await executeQuery(
`UPDATE [Заявки_ТСО]
SET Состояние = @status,
Вид_неисправности = @type,
Объект = @object,
Фабула = @fabula,
Дата_изменения = @editdate,
Исполнитель = @executor,
Мероприятия = @events
OUTPUT inserted.*
WHERE id = @id
`,
{
status: status,
type: type,
object: object,
fabula: fabula,
editdate: formattedDate,
executor: executor,
events: events,
id: id,
}
);
if (updateResult.length === 0) {
res.status(404).json({ message: "Заявка не найдена" });
return;
}
res.status(200).json({
message: "Данные заявки успешно обновлены",
data: updateResult[0],
});
} catch (error) {
console.error("Ошибка при обновлении данных пропуска:", error);
res
.status(500)
.json({ message: "Произошла ошибка при обновлении данных" });
}
}
);
// Обработка DELETE запроса для удаления строки с определенным ID из таблицы "Заявки_ТСО"
app.delete("/passes/tso/delete", checkToken, async (req, res) => {
try {
const id = req.query.id;
if (req.user.role !== "Дирекция") {
res.status(403).json({ message: "Недостаточно прав" });
return;
}
const result = await executeQuery(
"DELETE FROM [Заявки_ТСО] WHERE id = @id",
{
id: id,
}
);
res.status(200).json({ message: "Строка успешно удалена" });
} catch (error) {
console.error("Ошибка при обработке DELETE запроса:", error);
res.status(500).json({ message: "Произошла ошибка" });
}
});
app.get("/secure", upload.single("file"), checkToken, (req, res) => {
res.json({
message: "Защищенный ресурс",
user: req.user.userId,
role: req.user.role,
});
});
const port = 8080;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});