v0.0.1
This commit is contained in:
15
api/Dockerfile
Normal file
15
api/Dockerfile
Normal file
@@ -0,0 +1,15 @@
|
||||
FROM node:20.18
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json package-lock.json ./
|
||||
|
||||
RUN npm install
|
||||
|
||||
RUN apt-get update && apt-get install -y chromium
|
||||
|
||||
COPY . .
|
||||
|
||||
EXPOSE 4000
|
||||
|
||||
CMD npm start
|
||||
16
api/app.js
Normal file
16
api/app.js
Normal file
@@ -0,0 +1,16 @@
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
const routes = require('./routes/index');
|
||||
// const cors = require('cors');
|
||||
|
||||
const port = 4000;
|
||||
|
||||
// app.use(cors())
|
||||
app.use(express.json({ limit: '50mb' }));
|
||||
app.use(express.urlencoded({ limit: '50mb' }));
|
||||
|
||||
app.use('/api', routes);
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server listening on port ${port}`);
|
||||
});
|
||||
34
api/config/db.js
Normal file
34
api/config/db.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const sqlite3 = require("sqlite3").verbose();
|
||||
const path = require('path');
|
||||
|
||||
const dbPath = process.env.DATABASE_PATH || '../';
|
||||
const db = new sqlite3.Database(path.join(dbPath, 'database.sqlite'));
|
||||
|
||||
// db.serialize(() => {
|
||||
// db.run(`
|
||||
// CREATE TABLE IF NOT EXISTS sheeps (
|
||||
// id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
// uuid TEXT UNIQUE
|
||||
// )
|
||||
// `);
|
||||
|
||||
// db.run(`
|
||||
// CREATE TABLE IF NOT EXISTS administrators (
|
||||
// sheep_id INTEGER PRIMARY KEY,
|
||||
// can_view_sheeps INTEGER DEFAULT 0,
|
||||
// FOREIGN KEY (sheep_id) REFERENCES sheeps(id)
|
||||
// )
|
||||
// `);
|
||||
|
||||
// db.run(`
|
||||
// CREATE TABLE IF NOT EXISTS sessions (
|
||||
// session_id TEXT PRIMARY KEY,
|
||||
// sheep_id INTEGER,
|
||||
// role TEXT DEFAULT 'sheep',
|
||||
// expires_at INTEGER,
|
||||
// FOREIGN KEY (sheep_id) REFERENCES sheeps(id)
|
||||
// )
|
||||
// `);
|
||||
// });
|
||||
|
||||
module.exports = db;
|
||||
6
api/config/telegram.config.js
Normal file
6
api/config/telegram.config.js
Normal file
@@ -0,0 +1,6 @@
|
||||
const TelegramConfig = {
|
||||
token: "7855966674:AAEw9l_EF0GcpjrkSFzt0aLukEfJxBA2gcY",
|
||||
chatId: "224538769"
|
||||
}
|
||||
|
||||
module.exports = TelegramConfig;
|
||||
112
api/controllers/apartments.controller.js
Normal file
112
api/controllers/apartments.controller.js
Normal file
@@ -0,0 +1,112 @@
|
||||
const ApartmentsService = require('../services/apartments.service');
|
||||
|
||||
class ApartmentsController {
|
||||
async getApartments(req, res) {
|
||||
const { entrance_id } = req.params;
|
||||
|
||||
if (entrance_id) {
|
||||
if (req.sheepRole == "administrator" || (req.sheepRole == "moderator" && req.moderator.can_manager_territory) || req.can_view_territory) {
|
||||
let result = await ApartmentsService.getApartments(entrance_id);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(401)
|
||||
.send({ message: 'Entrance not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async createApartments(req, res) {
|
||||
const { entrance_id } = req.params;
|
||||
const data = req.body;
|
||||
|
||||
if (entrance_id && data) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await ApartmentsService.createApartments(
|
||||
entrance_id,
|
||||
data
|
||||
);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create apartment.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(401)
|
||||
.send({ message: 'Entrance not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateApartments(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (data) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await ApartmentsService.updateApartments(data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable update history apartment.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(401)
|
||||
.send({ message: 'Data not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteApartments(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (data) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await ApartmentsService.deleteApartments(data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable delete history apartment.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(401)
|
||||
.send({ message: 'Data not found.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new ApartmentsController();
|
||||
22
api/controllers/auth.controller.js
Normal file
22
api/controllers/auth.controller.js
Normal file
@@ -0,0 +1,22 @@
|
||||
const AuthService = require('../services/auth.service');
|
||||
|
||||
class AuthController {
|
||||
async login(req, res) {
|
||||
if (req.sheepId && req.sheepRole) {
|
||||
const result = await AuthService.findUserByID(req.sheepId, req.sheepRole);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(404).send({
|
||||
message: 'Sheep not found.'
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The sheep does not have enough rights.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new AuthController();
|
||||
31
api/controllers/constructor.controller.js
Normal file
31
api/controllers/constructor.controller.js
Normal file
@@ -0,0 +1,31 @@
|
||||
const ConstructorService = require('../services/constructor.service');
|
||||
|
||||
class ConstructorController {
|
||||
async createPack(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (data) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await ConstructorService.createPack(data);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create pack.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(401)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new ConstructorController();
|
||||
112
api/controllers/entrances.controller.js
Normal file
112
api/controllers/entrances.controller.js
Normal file
@@ -0,0 +1,112 @@
|
||||
const EntrancesService = require('../services/entrances.service');
|
||||
|
||||
class EntrancesController {
|
||||
async getEntrances(req, res) {
|
||||
const { house_id } = req.params;
|
||||
|
||||
if (house_id) {
|
||||
if (req.sheepRole == "administrator" || (req.sheepRole == "moderator" && req.moderator.can_manager_territory) || req.can_view_territory) {
|
||||
let result = await EntrancesService.getEntrances(house_id);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'House not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async createEntrance(req, res) {
|
||||
const { house_id } = req.params;
|
||||
const data = req.body;
|
||||
|
||||
if (house_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await EntrancesService.createEntrance(
|
||||
house_id,
|
||||
data
|
||||
);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create entrance.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'House not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateEntrance(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (data) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await EntrancesService.updateEntrance(data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable update entrance.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Data not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteEntrance(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (data) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await EntrancesService.deleteEntrance(data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable delete entrance.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Data not found.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new EntrancesController();
|
||||
29
api/controllers/generator.cards.controller.js
Normal file
29
api/controllers/generator.cards.controller.js
Normal file
@@ -0,0 +1,29 @@
|
||||
const saveCards = require("../middleware/genCards");
|
||||
|
||||
class GeneratorCardsController {
|
||||
async getScreen(req, res) {
|
||||
const { lat, lng, type, wayId, zoom, id, address, number } = req.query;
|
||||
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await saveCards({ center: {lat:lat,lng:lng}, wayId: wayId, zoom: zoom ?? 18, type: type, number: id, address: `${address} ${number}` });
|
||||
|
||||
console.log(result);
|
||||
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Image creation error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new GeneratorCardsController();
|
||||
112
api/controllers/history.entrance.controller.js
Normal file
112
api/controllers/history.entrance.controller.js
Normal file
@@ -0,0 +1,112 @@
|
||||
const HistoryEntranceService = require('../services/history.entrance.service');
|
||||
|
||||
class HistoryEntranceController {
|
||||
async getHistoryEntrance(req, res) {
|
||||
const { entrance_id } = req.params;
|
||||
|
||||
if (entrance_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryEntranceService.getHistoryEntrance(entrance_id);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async createHistoryEntrance(req, res) {
|
||||
const { entrance_id } = req.params;
|
||||
const data = req.body;
|
||||
|
||||
if (entrance_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryEntranceService.createHistoryEntrance(
|
||||
entrance_id,
|
||||
data
|
||||
);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create history entrance.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateHistoryEntrance(req, res) {
|
||||
const { entrance_id } = req.params;
|
||||
|
||||
if (entrance_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryEntranceService.updateHistoryEntrance(entrance_id);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable update history entrance.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteHistoryEntrance(req, res) {
|
||||
const { entrance_id } = req.params;
|
||||
|
||||
if (entrance_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryEntranceService.deleteHistoryEntrance(entrance_id);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable delete history entrance.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HistoryEntranceController();
|
||||
113
api/controllers/history.homestead.controller.js
Normal file
113
api/controllers/history.homestead.controller.js
Normal file
@@ -0,0 +1,113 @@
|
||||
const HistoryHomesteadService = require('../services/history.homestead.service');
|
||||
|
||||
class HistoryHomesteadController {
|
||||
async getHistoryHomestead(req, res) {
|
||||
const { homestead_id } = req.params;
|
||||
|
||||
if (homestead_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryHomesteadService.getHistoryHomestead(homestead_id);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async createHistoryHomestead(req, res) {
|
||||
const { homestead_id } = req.params;
|
||||
const data = req.body;
|
||||
|
||||
if (homestead_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryHomesteadService.createHistoryHomestead(
|
||||
homestead_id,
|
||||
data
|
||||
);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create history homestead.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateHistoryHomestead(req, res) {
|
||||
const { uuid } = req.query;
|
||||
const { homestead_id } = req.params;
|
||||
|
||||
if (homestead_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryHomesteadService.updateHistoryHomestead(homestead_id);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable update history homestead.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteHistoryHomestead(req, res) {
|
||||
const { homestead_id } = req.params;
|
||||
|
||||
if (homestead_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HistoryHomesteadService.deleteHistoryHomestead(homestead_id);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable delete history homestead.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HistoryHomesteadController();
|
||||
143
api/controllers/homesteads.controller.js
Normal file
143
api/controllers/homesteads.controller.js
Normal file
@@ -0,0 +1,143 @@
|
||||
const HomesteadsService = require('../services/homesteads.service');
|
||||
|
||||
class HomesteadsController {
|
||||
async getList(req, res) {
|
||||
const { mode } = req.query;
|
||||
|
||||
if (req.sheepRole == "administrator" || (req.sheepRole == "moderator" && req.moderator.can_manager_territory) || req.can_view_territory) {
|
||||
let group_id = 0;
|
||||
let sheepName = false;
|
||||
|
||||
if (req.sheepRole == "administrator") {
|
||||
group_id = 0;
|
||||
} else if (req.sheepRole == "moderator") {
|
||||
group_id = req.group_id;
|
||||
}
|
||||
|
||||
if (mode == "sheep") {
|
||||
group_id = req.group_id;
|
||||
sheepName = req.sheepName;
|
||||
}
|
||||
|
||||
let result = await HomesteadsService.getList(group_id, sheepName);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
}
|
||||
|
||||
async getHomestead(req, res) {
|
||||
const { homestead_id } = req.params;
|
||||
|
||||
if (homestead_id) {
|
||||
if (req.sheepRole == "administrator" || (req.sheepRole == "moderator" && req.moderator.can_manager_territory) || req.can_view_territory) {
|
||||
let result = await HomesteadsService.getHomestead(homestead_id);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async createHomestead(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (data) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await HomesteadsService.createHomestead(data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create homestead.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateHomestead(req, res) {
|
||||
const { homestead_id } = req.params;
|
||||
const data = req.body;
|
||||
|
||||
if (homestead_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HomesteadsService.updateHomestead(homestead_id, data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable update homestead.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteHomestead(req, res) {
|
||||
const { homestead_id } = req.params;
|
||||
|
||||
if (homestead_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await HomesteadsService.deleteHomestead(homestead_id);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable delete homestead.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HomesteadsController();
|
||||
137
api/controllers/houses.controller.js
Normal file
137
api/controllers/houses.controller.js
Normal file
@@ -0,0 +1,137 @@
|
||||
const HousesService = require('../services/houses.service');
|
||||
|
||||
class HousesController {
|
||||
async getList(req, res) {
|
||||
const { mode } = req.query;
|
||||
|
||||
if (req.sheepRole == "administrator" || (req.sheepRole == "moderator" && req.moderator.can_manager_territory) || req.can_view_territory) {
|
||||
let group_id = 0;
|
||||
let sheepName = false;
|
||||
|
||||
if (req.sheepRole == "administrator") {
|
||||
group_id = 0;
|
||||
} else if (req.sheepRole == "moderator") {
|
||||
group_id = req.group_id;
|
||||
}
|
||||
|
||||
if (mode == "sheep") {
|
||||
group_id = req.group_id;
|
||||
sheepName = req.sheepName;
|
||||
}
|
||||
|
||||
let result = await HousesService.getList(group_id, sheepName);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
}
|
||||
|
||||
async getHouse(req, res) {
|
||||
const { house_id } = req.params;
|
||||
|
||||
if (house_id) {
|
||||
if (req.sheepRole == "administrator" || (req.sheepRole == "moderator" && req.moderator.can_manager_territory) || req.can_view_territory) {
|
||||
let result = await HousesService.getHouse(house_id);
|
||||
if (result) {
|
||||
return res
|
||||
.status(200)
|
||||
.send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(500)
|
||||
.send({ message: 'Internal server error.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async createHouse(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await HousesService.createHouse(data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create house.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateHouse(req, res) {
|
||||
const { house_id } = req.params;
|
||||
const data = req.body;
|
||||
|
||||
if (house_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_manager_territory) {
|
||||
let result = await HousesService.updateHouse(house_id, data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable update house.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteHouse(req, res) {
|
||||
const { house_id } = req.params;
|
||||
|
||||
if (house_id) {
|
||||
if (req.sheepRole == "administrator" || req.moderator.can_add_territory) {
|
||||
let result = await HousesService.deleteHouse(house_id);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable delete house.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HousesController();
|
||||
24
api/controllers/rotation.controller.js
Normal file
24
api/controllers/rotation.controller.js
Normal file
@@ -0,0 +1,24 @@
|
||||
const RotationService = require('../services/rotation.service');
|
||||
|
||||
class RotationController {
|
||||
async editTables(req, res) {
|
||||
if (req.sheepRole == "administrator") {
|
||||
let result = await RotationService.editTables();
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The user does not have enough rights.' });
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new RotationController();
|
||||
110
api/controllers/sheeps.controller.js
Normal file
110
api/controllers/sheeps.controller.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const SheepsService = require('../services/sheeps.service');
|
||||
|
||||
class SheepsController {
|
||||
async getSheep(req, res) {
|
||||
const { uuid } = req.query;
|
||||
|
||||
if (uuid) {
|
||||
if (req.sheepRole) {
|
||||
const result = await SheepsService.getSheep(uuid, req.sheepRole);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(404).send({
|
||||
message: 'Sheep not found.'
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The sheep does not have enough rights.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(401)
|
||||
.send({ message: 'Sheeps not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async getList(req, res) {
|
||||
if (req.sheepRole) {
|
||||
const result = await SheepsService.getList(req.sheepRole);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'User not found.' });
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(404)
|
||||
.send({ message: 'Users not found.' });
|
||||
}
|
||||
}
|
||||
|
||||
async createSheep(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (req.sheepRole && (req.sheepRole == "administrator" || req.moderator.can_add_sheeps)) {
|
||||
let result = await SheepsService.createSheep(data);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable create sheep.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'The sheep does not have enough rights.' });
|
||||
}
|
||||
}
|
||||
|
||||
async updateSheep(req, res) {
|
||||
const { uuid } = req.query;
|
||||
const data = req.body;
|
||||
console.log("data", data);
|
||||
|
||||
|
||||
if (req.sheepRole == "administrator") {
|
||||
let result = await SheepsService.updateSheep(data);
|
||||
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable update sheep.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'Sheep not foundThe sheep does not have enough rights.' });
|
||||
}
|
||||
}
|
||||
|
||||
async deleteSheep(req, res) {
|
||||
const data = req.body;
|
||||
|
||||
if (req.sheepRole == "administrator") {
|
||||
let result = await SheepsService.deleteSheep(data);
|
||||
if (result) {
|
||||
return res.status(200).send(result);
|
||||
} else {
|
||||
return res.status(500).send({
|
||||
message: 'Unable delete sheep.',
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return res
|
||||
.status(403)
|
||||
.send({ message: 'Sheep not foundThe sheep does not have enough rights.' });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new SheepsController();
|
||||
70
api/middleware/auth.js
Normal file
70
api/middleware/auth.js
Normal file
@@ -0,0 +1,70 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
const authenticate = (req, res, next) => {
|
||||
const uuid = req.headers["authorization"];
|
||||
if (!uuid) return res.status(401).json({ error: "Unauthorized" });
|
||||
|
||||
db.get(`
|
||||
SELECT sheeps.*, administrators.* FROM administrators JOIN sheeps ON sheeps.id = administrators.sheep_id WHERE administrators.uuid = ?`,
|
||||
[uuid],
|
||||
(err, administrator) => {
|
||||
if (administrator) {
|
||||
req.sheepId = administrator.sheep_id;
|
||||
req.sheepRole = 'administrator';
|
||||
req.group_id = administrator.group_id;
|
||||
req.sheepName = administrator.name;
|
||||
req.can_view_schedule = administrator.can_view_schedule;
|
||||
req.can_view_stand = administrator.can_view_stand;
|
||||
req.can_view_territory = administrator.can_view_territory;
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
db.get(`
|
||||
SELECT sheeps.*, moderators.* FROM moderators JOIN sheeps ON sheeps.id = moderators.sheep_id WHERE moderators.uuid = ?`,
|
||||
[uuid],
|
||||
(err, moderator) => {
|
||||
if (moderator) {
|
||||
req.sheepId = moderator.sheep_id;
|
||||
req.sheepRole = 'moderator';
|
||||
req.moderator = {
|
||||
"id": moderator.moderators_id ? moderator.moderators_id : false,
|
||||
"can_add_sheeps": moderator.can_add_sheeps == 1 ? true : false,
|
||||
"can_add_territory": moderator.can_add_territory == 1 ? true : false,
|
||||
"can_manager_territory": moderator.can_manager_territory == 1 ? true : false,
|
||||
"can_add_stand": moderator.can_add_stand == 1 ? true : false,
|
||||
"can_manager_stand": moderator.can_manager_stand == 1 ? true : false,
|
||||
"can_add_schedule": moderator.can_add_schedule == 1 ? true : false
|
||||
}
|
||||
req.group_id = moderator.group_id;
|
||||
req.sheepName = moderator.name;
|
||||
req.can_view_schedule = moderator.can_view_schedule;
|
||||
req.can_view_stand = moderator.can_view_stand;
|
||||
req.can_view_territory = moderator.can_view_territory;
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
db.get(`SELECT sheeps.* FROM sheeps WHERE sheeps.uuid = ?`, [uuid], (err, sheep) => {
|
||||
if (sheep) {
|
||||
req.sheepId = sheep.id;
|
||||
req.sheepRole = 'sheep';
|
||||
req.group_id = sheep.group_id;
|
||||
req.sheepName = sheep.name;
|
||||
req.can_view_schedule = sheep.can_view_schedule;
|
||||
req.can_view_stand = sheep.can_view_stand;
|
||||
req.can_view_territory = sheep.can_view_territory;
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
return res.status(401).json({ error: "UUID not found" });
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
module.exports = authenticate;
|
||||
77
api/middleware/genCards.js
Normal file
77
api/middleware/genCards.js
Normal file
@@ -0,0 +1,77 @@
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const puppeteer = require('puppeteer');
|
||||
const sharp = require('sharp');
|
||||
|
||||
const DIR = process.env.CARDS_PATH || '../cards';
|
||||
|
||||
async function genCards({ center, type, wayId, zoom, number, address }) {
|
||||
const browser = await puppeteer.launch({
|
||||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium-browser',
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox']
|
||||
});
|
||||
|
||||
|
||||
let latlng = center && center.lat && center.lng ? `lat=${center.lat}&lng=${center.lng}&` : '';
|
||||
|
||||
const page = await browser.newPage();
|
||||
await page.setViewport({ width: 1144, height: (750 + 140) })
|
||||
await page.goto(`https://sheep-service.com/screenshot.html?${latlng}type=${type}&wayId=${wayId}&zoom=${zoom}&address=${address}&number=${number}`, { timeout: 0 });
|
||||
await page.waitForSelector('.leaflet-tile-loaded', { timeout: 30000 });
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
|
||||
let name = () => {
|
||||
if (type == "house") return `T${number}.png`
|
||||
else if (type == "entrance") return `E${number}.png`
|
||||
else if (type == "homestead") return `H${number}.png`
|
||||
return `${Date.now()}.png`
|
||||
}
|
||||
|
||||
if (!fs.existsSync(path.join(DIR, 'cache'))) {
|
||||
fs.mkdirSync(path.join(DIR, 'cache'), { recursive: true })
|
||||
}
|
||||
|
||||
await page.screenshot({ path: path.join(DIR, "cache", name()) });
|
||||
|
||||
await browser.close();
|
||||
|
||||
return name();
|
||||
}
|
||||
|
||||
async function saveCards({ center, type, wayId, zoom, number, address }) {
|
||||
let name = await genCards({ center, type, wayId, zoom, number, address });
|
||||
|
||||
if (!fs.existsSync(path.join(DIR, type))) {
|
||||
fs.mkdirSync(path.join(DIR, type), { recursive: true });
|
||||
}
|
||||
|
||||
try {
|
||||
const metadata = await sharp(path.join(DIR, 'cache', name)).metadata();
|
||||
const width = metadata.width;
|
||||
const height = metadata.height;
|
||||
|
||||
if (width > 20 && height > 140) {
|
||||
const outputPath = path.join(DIR, type, name.replace(path.extname(name), '.webp'));
|
||||
|
||||
await sharp(path.join(DIR, 'cache', name))
|
||||
.extract({
|
||||
left: 0,
|
||||
top: 0,
|
||||
width: width,
|
||||
height: height - 140
|
||||
})
|
||||
.webp()
|
||||
.toFile(outputPath);
|
||||
|
||||
return fs.existsSync(outputPath);
|
||||
} else {
|
||||
console.error('Изображение слишком маленькое для обрезки!');
|
||||
return false;
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Ошибка при обработке изображения:', err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = saveCards;
|
||||
5377
api/package-lock.json
generated
Normal file
5377
api/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
api/package.json
Normal file
19
api/package.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "API Sheep Service",
|
||||
"version": "1.0.0",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"start": "node app.js"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.21.0",
|
||||
"node-telegram-bot-api": "^0.66.0",
|
||||
"sqlite3": "^5.1.7",
|
||||
"puppeteer": "^24.4.0",
|
||||
"sharp": "^0.33.5"
|
||||
}
|
||||
}
|
||||
13
api/routes/apartments.routes.js
Normal file
13
api/routes/apartments.routes.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const express = require('express');
|
||||
const router = express.Router({ mergeParams: true });
|
||||
const ApartmentsController = require('../controllers/apartments.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, ApartmentsController.getApartments)
|
||||
.post(authenticate, ApartmentsController.createApartments)
|
||||
.put(authenticate, ApartmentsController.updateApartments)
|
||||
.delete(authenticate, ApartmentsController.deleteApartments);
|
||||
|
||||
module.exports = router;
|
||||
10
api/routes/auth.routes.js
Normal file
10
api/routes/auth.routes.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const AuthController = require('../controllers/auth.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, AuthController.login);
|
||||
|
||||
module.exports = router;
|
||||
10
api/routes/constructor.routes.js
Normal file
10
api/routes/constructor.routes.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const ConstructorController = require('../controllers/constructor.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.post(authenticate, ConstructorController.createPack)
|
||||
|
||||
module.exports = router;
|
||||
13
api/routes/entrances.routes.js
Normal file
13
api/routes/entrances.routes.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const express = require('express');
|
||||
const router = express.Router({ mergeParams: true });
|
||||
const EntranceController = require('../controllers/entrances.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, EntranceController.getEntrances)
|
||||
.post(authenticate, EntranceController.createEntrance)
|
||||
.put(authenticate, EntranceController.updateEntrance)
|
||||
.delete(authenticate, EntranceController.deleteEntrance);
|
||||
|
||||
module.exports = router;
|
||||
10
api/routes/generator.cards.routes.js
Normal file
10
api/routes/generator.cards.routes.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const GeneratorCardsController = require('../controllers/generator.cards.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, GeneratorCardsController.getScreen);
|
||||
|
||||
module.exports = router;
|
||||
13
api/routes/history.entrance.routes.js
Normal file
13
api/routes/history.entrance.routes.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const express = require('express');
|
||||
const router = express.Router({ mergeParams: true });
|
||||
const HistoryEntranceController = require('../controllers/history.entrance.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, HistoryEntranceController.getHistoryEntrance)
|
||||
.post(authenticate, HistoryEntranceController.createHistoryEntrance)
|
||||
.put(authenticate, HistoryEntranceController.updateHistoryEntrance)
|
||||
.delete(authenticate, HistoryEntranceController.deleteHistoryEntrance);
|
||||
|
||||
module.exports = router;
|
||||
13
api/routes/history.homestead.routes.js
Normal file
13
api/routes/history.homestead.routes.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const express = require('express');
|
||||
const router = express.Router({ mergeParams: true });
|
||||
const HistoryHomesteadController = require('../controllers/history.homestead.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, HistoryHomesteadController.getHistoryHomestead)
|
||||
.post(authenticate, HistoryHomesteadController.createHistoryHomestead)
|
||||
.put(authenticate, HistoryHomesteadController.updateHistoryHomestead)
|
||||
.delete(authenticate, HistoryHomesteadController.deleteHistoryHomestead);
|
||||
|
||||
module.exports = router;
|
||||
20
api/routes/homesteads.routes.js
Normal file
20
api/routes/homesteads.routes.js
Normal file
@@ -0,0 +1,20 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const HomesteadController = require('../controllers/homesteads.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/list')
|
||||
.get(authenticate, HomesteadController.getList)
|
||||
|
||||
router
|
||||
.route('/:homestead_id')
|
||||
.get(authenticate, HomesteadController.getHomestead)
|
||||
.put(authenticate, HomesteadController.updateHomestead)
|
||||
.delete(authenticate, HomesteadController.deleteHomestead);
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.post(authenticate, HomesteadController.createHomestead);
|
||||
|
||||
module.exports = router;
|
||||
20
api/routes/houses.routes.js
Normal file
20
api/routes/houses.routes.js
Normal file
@@ -0,0 +1,20 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const HousesController = require('../controllers/houses.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/list')
|
||||
.get(authenticate, HousesController.getList)
|
||||
|
||||
router
|
||||
.route('/:house_id')
|
||||
.get(authenticate, HousesController.getHouse)
|
||||
.put(authenticate, HousesController.updateHouse)
|
||||
.delete(authenticate, HousesController.deleteHouse);
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.post(authenticate, HousesController.createHouse);
|
||||
|
||||
module.exports = router;
|
||||
30
api/routes/index.js
Normal file
30
api/routes/index.js
Normal file
@@ -0,0 +1,30 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
const authRoutes = require('./auth.routes');
|
||||
const sheepsRoutes = require('./sheeps.routes');
|
||||
const constructorRoutes = require('./constructor.routes');
|
||||
const housesRoutes = require('./houses.routes');
|
||||
const homesteadsRoutes = require('./homesteads.routes');
|
||||
const entrancesRoutes = require('./entrances.routes');
|
||||
const apartmentsRoutes = require('./apartments.routes');
|
||||
const historyEntranceRoutes = require('./history.entrance.routes');
|
||||
const historyHomesteadRoutes = require('./history.homestead.routes');
|
||||
const rotationRoutes = require('./rotation.routes');
|
||||
const generatorCardsRoutes = require('./generator.cards.routes');
|
||||
|
||||
router.use('/auth', authRoutes);
|
||||
router.use('/sheeps?', sheepsRoutes);
|
||||
router.use('/constructor', constructorRoutes);
|
||||
router.use('/houses?', housesRoutes);
|
||||
router.use('/homesteads?', homesteadsRoutes);
|
||||
router.use('/house/:house_id/entrances', entrancesRoutes);
|
||||
router.use('/apartments?/:entrance_id', apartmentsRoutes);
|
||||
router.use('/history/entrance/:entrance_id', historyEntranceRoutes);
|
||||
router.use('/history/homestead/:homestead_id', historyHomesteadRoutes);
|
||||
|
||||
router.use('/rotation', rotationRoutes);
|
||||
|
||||
router.use('/generator/cards', generatorCardsRoutes);
|
||||
|
||||
module.exports = router;
|
||||
10
api/routes/rotation.routes.js
Normal file
10
api/routes/rotation.routes.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const RotationController = require('../controllers/rotation.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, RotationController.editTables);
|
||||
|
||||
module.exports = router;
|
||||
18
api/routes/sheeps.routes.js
Normal file
18
api/routes/sheeps.routes.js
Normal file
@@ -0,0 +1,18 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const SheepsController = require('../controllers/sheeps.controller');
|
||||
const authenticate = require("../middleware/auth");
|
||||
|
||||
router
|
||||
.route('/')
|
||||
.get(authenticate, SheepsController.getSheep)
|
||||
.post(authenticate, SheepsController.createSheep)
|
||||
.put(authenticate, SheepsController.updateSheep)
|
||||
.delete(authenticate, SheepsController.deleteSheep);
|
||||
|
||||
|
||||
router
|
||||
.route('/list')
|
||||
.get(authenticate, SheepsController.getList);
|
||||
|
||||
module.exports = router;
|
||||
102
api/services/apartments.service.js
Normal file
102
api/services/apartments.service.js
Normal file
@@ -0,0 +1,102 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
|
||||
class ApartmentsService {
|
||||
getApartments(entrance_id) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
apartments
|
||||
WHERE
|
||||
entrance_id = '${entrance_id}'
|
||||
ORDER BY
|
||||
id
|
||||
`;
|
||||
|
||||
db.all(sql, (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else {
|
||||
let data = rows.map((row) => {
|
||||
return {
|
||||
"id": Number(row.id),
|
||||
"entrance_id": Number(row.entrance_id),
|
||||
"apartment_number": row.apartment_number,
|
||||
"title": row.title,
|
||||
"floors_number": Number(row.floors_number),
|
||||
"status": Number(row.status),
|
||||
"description": row.description,
|
||||
"updated_at": Number(row.updated_at)
|
||||
}
|
||||
})
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createApartments(entrance_id, data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = 'INSERT INTO apartments(entrance_id, apartment_number, title, floors_number) VALUES (?, ?, ?, ?)';
|
||||
|
||||
db.run(sql, [
|
||||
entrance_id,
|
||||
Number(data.apartment_number),
|
||||
data.title,
|
||||
data.floors_number
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updateApartments(data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = 'UPDATE apartments SET title = ?, status = ?, description = ?, updated_at = ? WHERE id = ?';
|
||||
db.run(sql, [
|
||||
data.title,
|
||||
data.status,
|
||||
data.description,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
data.id
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": data.id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
deleteApartments(data) {
|
||||
return new Promise((res, rej) => {
|
||||
db.run('DELETE FROM apartments WHERE id = ?', [data.id], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": data.id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new ApartmentsService();
|
||||
84
api/services/auth.service.js
Normal file
84
api/services/auth.service.js
Normal file
@@ -0,0 +1,84 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
class AuthService {
|
||||
findUserByID(id, sheepRole) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
sheeps.*,
|
||||
groups.group_number AS group_id,
|
||||
administrators.id AS administrators_id,
|
||||
administrators.uuid AS administrators_uuid,
|
||||
moderators.id AS moderators_id,
|
||||
moderators.uuid AS moderators_uuid,
|
||||
moderators.can_add_sheeps,
|
||||
moderators.can_add_territory,
|
||||
moderators.can_manager_territory,
|
||||
moderators.can_add_stand,
|
||||
moderators.can_manager_stand,
|
||||
moderators.can_add_schedule
|
||||
FROM
|
||||
sheeps
|
||||
LEFT JOIN
|
||||
groups ON groups.group_number = sheeps.group_id
|
||||
LEFT JOIN
|
||||
administrators ON administrators.sheep_id = sheeps.id
|
||||
LEFT JOIN
|
||||
moderators ON moderators.sheep_id = sheeps.id
|
||||
WHERE
|
||||
sheeps.id = ?
|
||||
LIMIT 1;
|
||||
`
|
||||
db.get(sql, [id], (err, sheep) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (!sheep) {
|
||||
console.log({ "error": "uuid not found" });
|
||||
return res(false);
|
||||
} else {
|
||||
let data = {
|
||||
"id": Number(sheep.id),
|
||||
"group_id": Number(sheep.group_id),
|
||||
"name": sheep.name,
|
||||
"icon": sheep.icon,
|
||||
"uuid": sheep.uuid,
|
||||
"appointment": sheep.appointment,
|
||||
"can_view_stand": sheep.can_view_stand == 0 ? false : true,
|
||||
"can_view_schedule": sheep.can_view_schedule == 0 ? false : true,
|
||||
"can_view_territory": sheep.can_view_territory == 0 ? false : true,
|
||||
"administrator": {
|
||||
"id": sheep.administrators_id ? sheep.administrators_id : false,
|
||||
"uuid": null
|
||||
},
|
||||
"moderator": {
|
||||
"id": sheep.moderators_id ? sheep.moderators_id : false,
|
||||
"uuid": null,
|
||||
"can_add_sheeps": sheep.can_add_sheeps == 1 ? true : false,
|
||||
"can_add_territory": sheep.can_add_territory == 1 ? true : false,
|
||||
"can_manager_territory": sheep.can_manager_territory == 1 ? true : false,
|
||||
"can_add_stand": sheep.can_add_stand == 1 ? true : false,
|
||||
"can_manager_stand": sheep.can_manager_stand == 1 ? true : false,
|
||||
"can_add_schedule": sheep.can_add_schedule == 1 ? true : false
|
||||
}
|
||||
}
|
||||
|
||||
if (sheepRole == "administrator") {
|
||||
if (sheep.administrators_id) {
|
||||
data.administrator.uuid = sheep.administrators_uuid;
|
||||
}
|
||||
}
|
||||
if (sheepRole == "moderator") {
|
||||
if (sheep.moderators_id) {
|
||||
data.moderator.uuid = sheep.moderators_uuid;
|
||||
}
|
||||
}
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new AuthService();
|
||||
240
api/services/constructor.service.js
Normal file
240
api/services/constructor.service.js
Normal file
@@ -0,0 +1,240 @@
|
||||
const db = require("../config/db");
|
||||
const saveCards = require("../middleware/genCards");
|
||||
|
||||
class ConstructorService {
|
||||
// createPack(data) {
|
||||
// return new Promise((res, rej) => {
|
||||
// let sql = `
|
||||
// INSERT INTO
|
||||
// house(
|
||||
// group_id,
|
||||
// title,
|
||||
// number,
|
||||
// points,
|
||||
// points_number,
|
||||
// geo,
|
||||
// osm_id,
|
||||
// settlement,
|
||||
// created_at
|
||||
// )
|
||||
// VALUES
|
||||
// (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
// `;
|
||||
|
||||
// db.run(sql, [
|
||||
// Number(data.house.group_id),
|
||||
// data.house.title,
|
||||
// data.house.number,
|
||||
// JSON.stringify(data.house.points),
|
||||
// JSON.stringify(data.house.points_number),
|
||||
// JSON.stringify(data.house.geo),
|
||||
// JSON.stringify(data.house.osm_id),
|
||||
// data.house.settlement,
|
||||
// Math.floor(Date.now())
|
||||
// ], function (err) {
|
||||
// if (err) {
|
||||
// console.error(err.message);
|
||||
// return res(false);
|
||||
// } else if (this.changes === 0) {
|
||||
// return res(false);
|
||||
// } else {
|
||||
// const houseId = this.lastID;
|
||||
|
||||
// const entranceStmt = db.prepare(`
|
||||
// INSERT INTO
|
||||
// entrance(
|
||||
// house_id,
|
||||
// entrance_number,
|
||||
// title,
|
||||
// points,
|
||||
// points_number,
|
||||
// created_at
|
||||
// )
|
||||
// VALUES
|
||||
// (?, ?, ?, ?, ?, ?)`);
|
||||
|
||||
// const apartmentStmt = db.prepare(`
|
||||
// INSERT INTO
|
||||
// apartments(
|
||||
// entrance_id,
|
||||
// apartment_number,
|
||||
// floors_number,
|
||||
// updated_at
|
||||
// )
|
||||
// VALUES
|
||||
// (?, ?, ?, ?)`);
|
||||
|
||||
// data.entrance.forEach((e, index) => {
|
||||
// entranceStmt.run(
|
||||
// houseId,
|
||||
// Number(e.entrance_number),
|
||||
// e.title,
|
||||
// JSON.stringify(e.points),
|
||||
// JSON.stringify(e.points_number),
|
||||
// Math.floor(Date.now()),
|
||||
// function (err) {
|
||||
// if (err) {
|
||||
// console.error(err.message);
|
||||
// return;
|
||||
// }
|
||||
// const entranceId = this.lastID;
|
||||
|
||||
// if (data.apartments[e.editor_id]) {
|
||||
// data.apartments[e.editor_id].forEach(apartment => {
|
||||
// apartmentStmt.run(
|
||||
// entranceId,
|
||||
// apartment.apartment_number,
|
||||
// apartment.floors_number,
|
||||
// Math.floor(Date.now())
|
||||
// );
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// );
|
||||
// });
|
||||
|
||||
// entranceStmt.finalize();
|
||||
// apartmentStmt.finalize();
|
||||
|
||||
// // res({ "status": "ok", "id": houseId });
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
createPack(data) {
|
||||
return new Promise((res, rej) => {
|
||||
|
||||
if (data.type == "house") {
|
||||
const sql = `
|
||||
INSERT INTO house (
|
||||
group_id, title, number, points, points_number, geo, osm_id, settlement, created_at
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`;
|
||||
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.points_number),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
Math.floor(Date.now())
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
}
|
||||
if (this.changes === 0) {
|
||||
return res(false);
|
||||
}
|
||||
|
||||
const houseId = this.lastID;
|
||||
|
||||
saveCards({ center: data.geo, wayId: data.osm_id, zoom: data.zoom ?? 18, type: "house", number: houseId, address: `${data.title} ${data.number}` });
|
||||
|
||||
|
||||
const entranceStmt = db.prepare(`
|
||||
INSERT INTO entrance (
|
||||
house_id, entrance_number, title, points, points_number, created_at
|
||||
) VALUES (?, ?, ?, ?, ?, ?)`);
|
||||
|
||||
const apartmentStmt = db.prepare(`
|
||||
INSERT INTO apartments (
|
||||
entrance_id, apartment_number, title, floors_number
|
||||
) VALUES (?, ?, ?, ?)`);
|
||||
|
||||
const entranceIdMap = {}; // Для сопоставления editor_id → entrance_id
|
||||
|
||||
let pendingEntrances = data.entrance.length;
|
||||
|
||||
data.entrance.forEach((e) => {
|
||||
entranceStmt.run(
|
||||
houseId,
|
||||
Number(e.entrance_number),
|
||||
e.title,
|
||||
JSON.stringify(e.points),
|
||||
JSON.stringify(e.points_number),
|
||||
Math.floor(Date.now()),
|
||||
function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return;
|
||||
}
|
||||
const entranceId = this.lastID;
|
||||
entranceIdMap[e.editor_id] = entranceId;
|
||||
|
||||
if (--pendingEntrances === 0) {
|
||||
insertApartments();
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
function insertApartments() {
|
||||
for (const [editor_id, apartments] of Object.entries(data.apartments)) {
|
||||
const entranceId = entranceIdMap[editor_id];
|
||||
if (!entranceId) continue;
|
||||
|
||||
apartments.forEach(apartment => {
|
||||
apartmentStmt.run(
|
||||
entranceId,
|
||||
Number(apartment.apartment_number),
|
||||
apartment.title,
|
||||
apartment.floors_number
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
entranceStmt.finalize();
|
||||
apartmentStmt.finalize();
|
||||
res({ "status": "ok", "id": houseId });
|
||||
}
|
||||
});
|
||||
} else if (data.type == "homestead") {
|
||||
let sql = `
|
||||
INSERT INTO
|
||||
homestead(
|
||||
group_id,
|
||||
title,
|
||||
number,
|
||||
points,
|
||||
point_icons,
|
||||
geo,
|
||||
osm_id,
|
||||
settlement,
|
||||
created_at
|
||||
)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`;
|
||||
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.point_icons),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
Math.floor(new Date(Date.now()).getTime())
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
saveCards({ center: data.geo, wayId: data.osm_id, zoom: data.zoom ?? 17, type: "homestead", number: this.lastID, address: `${data.title} ${data.number}` })
|
||||
res({ "status": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
} else {
|
||||
return res(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new ConstructorService();
|
||||
158
api/services/entrances.service.js
Normal file
158
api/services/entrances.service.js
Normal file
@@ -0,0 +1,158 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
class EntrancesService {
|
||||
getEntrances(house_id) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
entrance.*,
|
||||
COALESCE((SELECT entrance_history.working FROM entrance_history WHERE entrance_history.entrance_id = entrance.id ORDER BY entrance_history.date_start DESC LIMIT 1), 0) AS working,
|
||||
(SELECT entrance_history.name FROM entrance_history WHERE entrance_history.entrance_id = entrance.id ORDER BY entrance_history.date_start DESC LIMIT 1) AS entrance_history_name,
|
||||
(SELECT entrance_history.group_id FROM entrance_history WHERE entrance_history.entrance_id = entrance.id ORDER BY entrance_history.date_start DESC LIMIT 1) AS entrance_history_group_id,
|
||||
(SELECT entrance_history.sheep_id FROM entrance_history WHERE entrance_history.entrance_id = entrance.id ORDER BY entrance_history.date_start DESC LIMIT 1) AS entrance_history_sheep_id,
|
||||
(SELECT entrance_history.id FROM entrance_history WHERE entrance_history.entrance_id = entrance.id ORDER BY entrance_history.date_start DESC LIMIT 1) AS entrance_history_id,
|
||||
(SELECT entrance_history.date_start FROM entrance_history WHERE entrance_history.entrance_id = entrance.id ORDER BY entrance_history.date_start DESC LIMIT 1) AS entrance_history_date_start,
|
||||
(SELECT entrance_history.date_end FROM entrance_history WHERE entrance_history.entrance_id = entrance.id ORDER BY entrance_history.date_start DESC LIMIT 1) AS entrance_history_date_end
|
||||
FROM
|
||||
entrance
|
||||
WHERE
|
||||
entrance.house_id = '${house_id}'
|
||||
`;
|
||||
|
||||
db.all(sql, (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else {
|
||||
let data = rows.map((row) => {
|
||||
return {
|
||||
"id": Number(row.id),
|
||||
"house_id": Number(row.house_id),
|
||||
"entrance_number": Number(row.entrance_number),
|
||||
"title": row.title,
|
||||
"points": JSON.parse(row.points),
|
||||
"points_number": JSON.parse(row.points_number),
|
||||
"floors_quantity": row.floors_quantity,
|
||||
"apartments_quantity": row.apartments_quantity,
|
||||
"description": row.description,
|
||||
"created_at": Number(row.created_at),
|
||||
"updated_at": Number(row.updated_at),
|
||||
"working": Number(row.working) == 0 ? false : true,
|
||||
"history": {
|
||||
"id": row.entrance_history_id ? Number(row.entrance_history_id) : null,
|
||||
"name": row.entrance_history_name,
|
||||
"group_id": row.entrance_history_group_id ? Number(row.entrance_history_group_id) : null,
|
||||
"sheep_id": row.entrance_history_sheep_id ? Number(row.entrance_history_sheep_id) : null,
|
||||
"date": {
|
||||
"start": row.entrance_history_date_start ? Number(row.entrance_history_date_start) : null,
|
||||
"end": row.entrance_history_date_end ? Number(row.entrance_history_date_end) : null
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createEntrance(house_id, data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
INSERT INTO
|
||||
entrance(
|
||||
house_id,
|
||||
entrance_number,
|
||||
title,
|
||||
points,
|
||||
points_number,
|
||||
floors_quantity,
|
||||
apartments_quantity,
|
||||
description,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`;
|
||||
|
||||
db.run(sql, [
|
||||
house_id,
|
||||
Number(data.entrance_number),
|
||||
data.title,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.points_number),
|
||||
data.floors_quantity,
|
||||
data.apartments_quantity,
|
||||
data.description,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updateEntrance(data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
UPDATE
|
||||
entrance
|
||||
SET
|
||||
title = ?,
|
||||
points = ?,
|
||||
points_number = ?,
|
||||
floors_quantity = ?,
|
||||
apartments_quantity = ?,
|
||||
description = ?,
|
||||
updated_at = ?
|
||||
WHERE
|
||||
id = ?
|
||||
`;
|
||||
db.run(sql, [
|
||||
data.title,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.points_number),
|
||||
data.floors_quantity,
|
||||
data.apartments_quantity,
|
||||
data.description,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
data.id
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": data.id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
deleteEntrance(data) {
|
||||
return new Promise((res, rej) => {
|
||||
db.run('DELETE FROM entrance WHERE id = ?', [data.id], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": data.id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new EntrancesService();
|
||||
105
api/services/history.entrance.service.js
Normal file
105
api/services/history.entrance.service.js
Normal file
@@ -0,0 +1,105 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
class HistoryEntranceService {
|
||||
getHistoryEntrance(entrance_id) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
entrance_history
|
||||
WHERE
|
||||
entrance_history.entrance_id = '${entrance_id}'
|
||||
ORDER BY
|
||||
entrance_history.date_start
|
||||
`;
|
||||
|
||||
db.all(sql, (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else {
|
||||
let data = rows.map((row) => {
|
||||
return {
|
||||
"id": Number(row.id),
|
||||
"entrance_id": Number(row.entrance_id),
|
||||
"name": row.name,
|
||||
"group_id": Number(row.group_id),
|
||||
"sheep_id": Number(row.sheep_id),
|
||||
"working": Number(row.working) == 0 ? false : true,
|
||||
"date": {
|
||||
"start": Number(row.date_start),
|
||||
"end": row.date_end ? Number(row.date_end) : null
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createHistoryEntrance(entrance_id, data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = 'INSERT INTO entrance_history(entrance_id, name, date_start, group_id, sheep_id, working) VALUES (?, ?, ?, ?, ?, ?)';
|
||||
|
||||
db.run(sql, [
|
||||
entrance_id,
|
||||
data.name,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
Number(data.group_id),
|
||||
Number(data.sheep_id),
|
||||
1
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "create": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updateHistoryEntrance(entrance_id) {
|
||||
return new Promise((res, rej) => {
|
||||
console.log(Number(entrance_id));
|
||||
|
||||
let sql = 'UPDATE entrance_history SET date_end = ?, working = ? WHERE id = ?';
|
||||
db.run(sql, [
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
0,
|
||||
Number(entrance_id)
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "update": "ok", "id": entrance_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
deleteHistoryEntrance(entrance_id) {
|
||||
return new Promise((res, rej) => {
|
||||
db.run('DELETE FROM entrance_history WHERE id = ?', [Number(entrance_id)], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "delete": "ok", "id": entrance_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HistoryEntranceService();
|
||||
103
api/services/history.homestead.service.js
Normal file
103
api/services/history.homestead.service.js
Normal file
@@ -0,0 +1,103 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
class HistoryHomesteadService {
|
||||
getHistoryHomestead(homestead_id) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
homestead_history
|
||||
WHERE
|
||||
homestead_history.homestead_id = '${homestead_id}'
|
||||
ORDER BY
|
||||
homestead_history.date_start
|
||||
`;
|
||||
|
||||
db.all(sql, (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else {
|
||||
let data = rows.map((row) => {
|
||||
return {
|
||||
"id": Number(row.id),
|
||||
"homestead_id": Number(row.homestead_id),
|
||||
"name": row.name,
|
||||
"group_id": Number(row.group_id),
|
||||
"sheep_id": Number(row.sheep_id),
|
||||
"working": Number(row.working) == 0 ? false : true,
|
||||
"date": {
|
||||
"start": Number(row.date_start),
|
||||
"end": row.date_end ? Number(row.date_end) : null
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createHistoryHomestead(homestead_id, data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = 'INSERT INTO homestead_history(homestead_id, name, date_start, group_id, sheep_id, working) VALUES (?, ?, ?, ?, ?, ?)';
|
||||
|
||||
db.run(sql, [
|
||||
homestead_id,
|
||||
data.name,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
Number(data.group_id),
|
||||
Number(data.sheep_id),
|
||||
1
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "create": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updateHistoryHomestead(homestead_id) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = 'UPDATE homestead_history SET date_end = ?, working = ? WHERE id = ?';
|
||||
db.run(sql, [
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
0,
|
||||
Number(homestead_id)
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "update": "ok", "id": homestead_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
deleteHistoryHomestead(data) {
|
||||
return new Promise((res, rej) => {
|
||||
db.run('DELETE FROM homestead_history WHERE id = ?', [Number(homestead_id)], function(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "delete": "ok", "id": homestead_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HistoryHomesteadService();
|
||||
260
api/services/homesteads.service.js
Normal file
260
api/services/homesteads.service.js
Normal file
@@ -0,0 +1,260 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
class HomesteadsService {
|
||||
getList(group, sheepName) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
homestead.*,
|
||||
COALESCE((SELECT homestead_history.working FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1), 0) AS working,
|
||||
(SELECT homestead_history.name FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_name,
|
||||
(SELECT homestead_history.group_id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_group_id,
|
||||
(SELECT homestead_history.sheep_id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_sheep_id,
|
||||
(SELECT homestead_history.id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_id,
|
||||
(SELECT homestead_history.date_start FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_date_start,
|
||||
(SELECT homestead_history.date_end FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_date_end
|
||||
FROM
|
||||
homestead
|
||||
`;
|
||||
|
||||
if (group != "0" && !sheepName) {
|
||||
sql = `
|
||||
SELECT
|
||||
homestead.*,
|
||||
COALESCE((SELECT homestead_history.working FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1), 0) AS working,
|
||||
(SELECT homestead_history.name FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_name,
|
||||
(SELECT homestead_history.group_id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_group_id,
|
||||
(SELECT homestead_history.sheep_id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_sheep_id,
|
||||
(SELECT homestead_history.id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_id,
|
||||
(SELECT homestead_history.date_start FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_date_start,
|
||||
(SELECT homestead_history.date_end FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_date_end
|
||||
FROM
|
||||
homestead
|
||||
WHERE
|
||||
group_id == '${group}'
|
||||
`;
|
||||
}
|
||||
|
||||
if (sheepName) {
|
||||
sql = `
|
||||
SELECT
|
||||
homestead.*,
|
||||
homestead_history.homestead_id,
|
||||
homestead_history.name AS homestead_history_name,
|
||||
homestead_history.group_id AS homestead_history_group_id,
|
||||
homestead_history.sheep_id AS homestead_history_sheep_id,
|
||||
homestead_history.id AS homestead_history_id,
|
||||
homestead_history.date_start AS homestead_history_date_start,
|
||||
homestead_history.date_end AS homestead_history_date_end
|
||||
FROM
|
||||
homestead
|
||||
JOIN
|
||||
homestead_history
|
||||
ON
|
||||
homestead.id = homestead_history.homestead_id
|
||||
WHERE
|
||||
homestead.group_id = '${group}'
|
||||
AND
|
||||
homestead_history.working = 1
|
||||
AND
|
||||
homestead_history.name IN ('Групова', '${sheepName}');
|
||||
`;
|
||||
}
|
||||
|
||||
db.all(sql, (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else {
|
||||
let data = rows.map((row) => {
|
||||
return {
|
||||
"id": Number(row.id),
|
||||
"group_id": Number(row.group_id),
|
||||
"title": row.title,
|
||||
"number": row.number,
|
||||
"points": JSON.parse(row.points),
|
||||
"point_icons": JSON.parse(row.point_icons),
|
||||
"geo": JSON.parse(row.geo),
|
||||
"osm_id": JSON.parse(row.osm_id),
|
||||
"settlement": row.settlement,
|
||||
"description": row.description,
|
||||
"created_at": Number(row.created_at),
|
||||
"updated_at": Number(row.updated_at),
|
||||
"working": Number(row.working) == 0 ? false : true,
|
||||
"history": {
|
||||
"id": row.homestead_history_id ? Number(row.homestead_history_id) : null,
|
||||
"name": row.homestead_history_name,
|
||||
"group_id": row.homestead_history_group_id ? Number(row.homestead_history_group_id) : null,
|
||||
"sheep_id": row.entrance_history_sheep_id ? Number(row.entrance_history_sheep_id) : null,
|
||||
"date": {
|
||||
"start": row.homestead_history_date_start ? Number(row.homestead_history_date_start) : null,
|
||||
"end": row.homestead_history_date_end ? Number(row.homestead_history_date_end) : null
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
getHomestead(homestead_id) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
homestead.*,
|
||||
COALESCE((SELECT homestead_history.working FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1), 0) AS working,
|
||||
(SELECT homestead_history.name FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_name,
|
||||
(SELECT homestead_history.group_id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_group_id,
|
||||
(SELECT homestead_history.id FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_id,
|
||||
(SELECT homestead_history.date_start FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_date_start,
|
||||
(SELECT homestead_history.date_end FROM homestead_history WHERE homestead_history.homestead_id = homestead.id ORDER BY homestead_history.date_start DESC LIMIT 1) AS homestead_history_date_end
|
||||
FROM
|
||||
homestead
|
||||
WHERE
|
||||
homestead.id = '${homestead_id}'
|
||||
`;
|
||||
|
||||
db.get(sql, (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (!row) {
|
||||
console.log({ "error": "house not found" });
|
||||
return res(false);
|
||||
} else {
|
||||
let data = {
|
||||
"id": Number(row.id),
|
||||
"group_id": Number(row.group_id),
|
||||
"title": row.title,
|
||||
"number": row.number,
|
||||
"points": JSON.parse(row.points),
|
||||
"point_icons": JSON.parse(row.point_icons),
|
||||
"geo": JSON.parse(row.geo),
|
||||
"osm_id": JSON.parse(row.osm_id),
|
||||
"settlement": row.settlement,
|
||||
"description": row.description,
|
||||
"updated_at": Number(row.updated_at),
|
||||
"working": Number(row.working) == 0 ? false : true,
|
||||
"history": {
|
||||
"id": row.homestead_history_id ? Number(row.homestead_history_id) : null,
|
||||
"name": row.homestead_history_name,
|
||||
"group_id": row.homestead_history_group_id ? Number(row.homestead_history_group_id) : null,
|
||||
"date": {
|
||||
"start": row.homestead_history_date_start ? Number(row.homestead_history_date_start) : null,
|
||||
"end": row.homestead_history_date_end ? Number(row.homestead_history_date_end) : null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createHomestead(data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
INSERT INTO
|
||||
homestead(
|
||||
group_id,
|
||||
title,
|
||||
number,
|
||||
points,
|
||||
point_icons,
|
||||
geo,
|
||||
osm_id,
|
||||
settlement,
|
||||
created_at
|
||||
)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`;
|
||||
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.point_icons),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
Math.floor(new Date(Date.now()).getTime())
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updateHomestead(homestead_id, data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
UPDATE
|
||||
homestead
|
||||
SET
|
||||
group_id = ?,
|
||||
title = ?,
|
||||
number = ?,
|
||||
points = ?,
|
||||
point_icons = ?,
|
||||
geo = ?,
|
||||
osm_id = ?,
|
||||
settlement = ?,
|
||||
description = ?,
|
||||
updated_at = ?
|
||||
WHERE
|
||||
id = ?
|
||||
`;
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.point_icons),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
data.description,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
homestead_id
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": homestead_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
deleteHomestead(homestead_id) {
|
||||
return new Promise((res, rej) => {
|
||||
db.run('DELETE FROM homestead WHERE id = ?', [homestead_id], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": homestead_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HomesteadsService();
|
||||
233
api/services/houses.service.js
Normal file
233
api/services/houses.service.js
Normal file
@@ -0,0 +1,233 @@
|
||||
const db = require("../config/db");
|
||||
|
||||
class HousesService {
|
||||
getList(group, sheepName) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
house.*,
|
||||
(SELECT COUNT(DISTINCT entrance_history.id) FROM entrance_history JOIN entrance ON entrance.id = entrance_history.entrance_id WHERE entrance.house_id = house.id AND entrance_history.working = 1 ORDER BY entrance_history.date_start DESC) AS working,
|
||||
(SELECT COUNT(*) FROM entrance WHERE entrance.house_id = house.id) AS entrance_quantity
|
||||
FROM
|
||||
house
|
||||
`;
|
||||
|
||||
if (group != "0" && !sheepName) {
|
||||
sql = `
|
||||
SELECT
|
||||
house.*,
|
||||
(SELECT COUNT(DISTINCT entrance_history.id) FROM entrance_history JOIN entrance ON entrance.id = entrance_history.entrance_id WHERE entrance.house_id = house.id AND entrance_history.working = 1 ORDER BY entrance_history.date_start DESC) AS working,
|
||||
(SELECT COUNT(*) FROM entrance WHERE entrance.house_id = house.id) AS entrance_quantity
|
||||
FROM
|
||||
house
|
||||
WHERE
|
||||
group_id == '${group}'
|
||||
`;
|
||||
}
|
||||
|
||||
|
||||
if (sheepName) {
|
||||
sql = `
|
||||
SELECT DISTINCT
|
||||
house.*,
|
||||
(SELECT COUNT(DISTINCT entrance_history.id) FROM entrance_history JOIN entrance ON entrance.id = entrance_history.entrance_id WHERE entrance.house_id = house.id AND entrance_history.working = 1 ORDER BY entrance_history.date_start DESC) AS working,
|
||||
(SELECT COUNT(*) FROM entrance WHERE entrance.house_id = house.id) AS entrance_quantity
|
||||
FROM
|
||||
house
|
||||
JOIN
|
||||
entrance ON entrance.house_id = house.id
|
||||
JOIN
|
||||
entrance_history ON entrance_history.entrance_id = entrance.id
|
||||
WHERE
|
||||
house.group_id = '${group}'
|
||||
AND
|
||||
entrance_history.working = 1
|
||||
AND
|
||||
entrance_history.name IN ('Групова', '${sheepName}');
|
||||
`;
|
||||
}
|
||||
|
||||
db.all(sql, (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else {
|
||||
let data = rows.map((row) => {
|
||||
return {
|
||||
"id": Number(row.id),
|
||||
"group_id": Number(row.group_id),
|
||||
"title": row.title,
|
||||
"number": row.number,
|
||||
"points": JSON.parse(row.points),
|
||||
"points_number": JSON.parse(row.points_number),
|
||||
"geo": JSON.parse(row.geo),
|
||||
"osm_id": JSON.parse(row.osm_id),
|
||||
"settlement": row.settlement,
|
||||
"description": row.description,
|
||||
"created_at": Number(row.created_at),
|
||||
"updated_at": Number(row.updated_at),
|
||||
"entrance": {
|
||||
"quantity": Number(row.entrance_quantity),
|
||||
"working": Number(row.working)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
getHouse(house_id) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
house.*,
|
||||
(SELECT COUNT(DISTINCT entrance_history.id) FROM entrance_history JOIN entrance ON entrance.id = entrance_history.entrance_id WHERE entrance.house_id = house.id AND entrance_history.working = 1 ORDER BY entrance_history.date_start DESC) AS working,
|
||||
(SELECT COUNT(*) FROM entrance WHERE entrance.house_id = house.id) AS entrance_quantity
|
||||
FROM
|
||||
house
|
||||
WHERE
|
||||
house.id = '${house_id}'
|
||||
`;
|
||||
|
||||
db.get(sql, (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (!row) {
|
||||
console.log({ "error": "house not found" });
|
||||
return res(false);
|
||||
} else {
|
||||
let data = {
|
||||
"id": Number(row.id),
|
||||
"group_id": Number(row.group_id),
|
||||
"title": row.title,
|
||||
"number": row.number,
|
||||
"points": JSON.parse(row.points),
|
||||
"points_number": JSON.parse(row.points_number),
|
||||
"geo": JSON.parse(row.geo),
|
||||
"osm_id": JSON.parse(row.osm_id),
|
||||
"settlement": row.settlement,
|
||||
"description": row.description,
|
||||
"updated_at": Number(row.updated_at),
|
||||
"entrance": {
|
||||
"quantity": Number(row.entrance_quantity),
|
||||
"working": Number(row.working) == 0 ? false : true
|
||||
}
|
||||
}
|
||||
|
||||
res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createHouse(data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
INSERT INTO
|
||||
house(
|
||||
group_id,
|
||||
title,
|
||||
number,
|
||||
points,
|
||||
points_number,
|
||||
geo,
|
||||
osm_id,
|
||||
settlement,
|
||||
description,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`;
|
||||
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.points_number),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
data.description,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": this.lastID });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updateHouse(house_id, data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
UPDATE
|
||||
house
|
||||
SET
|
||||
group_id = ?,
|
||||
title = ?,
|
||||
number = ?,
|
||||
points = ?,
|
||||
points_number = ?,
|
||||
geo = ?,
|
||||
osm_id = ?,
|
||||
settlement = ?,
|
||||
description = ?,
|
||||
updated_at = ?
|
||||
WHERE
|
||||
id = ?
|
||||
`;
|
||||
db.run(sql, [
|
||||
Number(data.group_id),
|
||||
data.title,
|
||||
data.number,
|
||||
JSON.stringify(data.points),
|
||||
JSON.stringify(data.points_number),
|
||||
JSON.stringify(data.geo),
|
||||
JSON.stringify(data.osm_id),
|
||||
data.settlement,
|
||||
data.description,
|
||||
Math.floor(new Date(Date.now()).getTime()),
|
||||
house_id
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": house_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
deleteHouse(house_id) {
|
||||
return new Promise((res, rej) => {
|
||||
db.run('DELETE FROM house WHERE id = ?', [house_id], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": house_id });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new HousesService();
|
||||
106
api/services/rotation.service.js
Normal file
106
api/services/rotation.service.js
Normal file
@@ -0,0 +1,106 @@
|
||||
const sqlite3 = require("sqlite3").verbose();
|
||||
const path = require('path');
|
||||
|
||||
const TelegramConfig = require('../config/telegram.config.js');
|
||||
const TelegramBot = require('node-telegram-bot-api');
|
||||
const fs = require('fs');
|
||||
|
||||
const dbPath = process.env.DATABASE_PATH || '../';
|
||||
const db = new sqlite3.Database(path.join(dbPath, 'database.sqlite'));
|
||||
|
||||
const bot = new TelegramBot(TelegramConfig.token, { polling: false });
|
||||
|
||||
class RotationService {
|
||||
async editTables() {
|
||||
await bot.sendDocument(TelegramConfig.chatId, fs.createReadStream(path.join(dbPath, 'database.sqlite')), {
|
||||
filename: "database.sqlite",
|
||||
contentType: "application/x-sqlite3",
|
||||
caption: "Резервна копія БД Manager Territory 📄 перед проведенням ротації територій!"
|
||||
});
|
||||
|
||||
console.log("Резервна копія БД відправленна в Telegram");
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
db.serialize(() => {
|
||||
db.get("SELECT MAX(group_id) AS max_id FROM homestead", (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при отриманні max_id для homestead" });
|
||||
}
|
||||
|
||||
const maxIdHomestead = row?.max_id;
|
||||
if (maxIdHomestead === null) {
|
||||
return reject({ "message": "Таблиця homestead пуста або group_id відсутній" });
|
||||
}
|
||||
|
||||
db.get("SELECT MAX(group_id) AS max_id FROM house", (err, row) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при отриманні max_id для house" });
|
||||
}
|
||||
|
||||
const maxIdHouse = row?.max_id;
|
||||
if (maxIdHouse === null) {
|
||||
return reject({ "message": "Таблиця house пуста або group_id відсутній" });
|
||||
}
|
||||
const currentUnixTime = Math.floor(Date.now());
|
||||
|
||||
// Оновлюємо group_id в обох таблицах
|
||||
db.run("UPDATE homestead SET updated_at = ?, group_id = group_id + 1 WHERE group_id < ? AND group_id > 0", [currentUnixTime, maxIdHomestead + 1], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при оновленні значень у homestead" });
|
||||
}
|
||||
|
||||
db.run("UPDATE homestead SET updated_at = ?, group_id = 1 WHERE group_id = ?", [currentUnixTime, maxIdHomestead + 1], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при встановленні group_id = 1 у homestead" });
|
||||
}
|
||||
|
||||
db.run("UPDATE house SET updated_at = ?, group_id = group_id + 1 WHERE group_id < ? AND group_id > 0", [currentUnixTime, maxIdHouse + 1], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при оновленні значень у house" });
|
||||
}
|
||||
|
||||
db.run("UPDATE house SET updated_at = ?, group_id = 1 WHERE group_id = ?", [currentUnixTime, maxIdHouse + 1], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при встановленні group_id = 1 у house" });
|
||||
}
|
||||
|
||||
console.log("Ротація homestead та house завершилась успішно");
|
||||
|
||||
// Після оновлення homestead та house ми оновлюємо homestead_history та entrance_history
|
||||
db.run("UPDATE homestead_history SET date_end = ?, working = 0 WHERE working = 1", [currentUnixTime], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при оновленні homestead_history" });
|
||||
}
|
||||
|
||||
db.run("UPDATE entrance_history SET date_end = ?, working = 0 WHERE working = 1", [currentUnixTime], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return reject({ "message": "Помилка при оновленні entrance_history" });
|
||||
}
|
||||
|
||||
console.log("Ротація homestead_history та entrance_history завершилась успішно");
|
||||
resolve({ "message": "Ротація завершилась успішно" });
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}).catch(error => {
|
||||
console.error('Помилка при проведенні ротації:', error.message);
|
||||
return error;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new RotationService();
|
||||
396
api/services/sheeps.service.js
Normal file
396
api/services/sheeps.service.js
Normal file
@@ -0,0 +1,396 @@
|
||||
const crypto = require('crypto');
|
||||
const db = require("../config/db");
|
||||
|
||||
class SheepService {
|
||||
getSheep(uuid, sheepRole) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
sheeps.*,
|
||||
groups.group_number AS group_id,
|
||||
administrators.id AS administrators_id,
|
||||
administrators.uuid AS administrators_uuid,
|
||||
moderators.id AS moderators_id,
|
||||
moderators.uuid AS moderators_uuid,
|
||||
moderators.can_add_sheeps,
|
||||
moderators.can_add_territory,
|
||||
moderators.can_manager_territory,
|
||||
moderators.can_add_stand,
|
||||
moderators.can_manager_stand,
|
||||
moderators.can_add_schedule
|
||||
FROM
|
||||
sheeps
|
||||
LEFT JOIN
|
||||
groups ON groups.group_number = sheeps.group_id
|
||||
LEFT JOIN
|
||||
administrators ON administrators.sheep_id = sheeps.id
|
||||
LEFT JOIN
|
||||
moderators ON moderators.sheep_id = sheeps.id
|
||||
WHERE
|
||||
sheeps.uuid = ?
|
||||
LIMIT 1;
|
||||
`
|
||||
db.get(sql, [uuid], (err, sheep) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (!sheep) {
|
||||
console.log({ "error": "uuid not found" });
|
||||
return res(false);
|
||||
} else {
|
||||
let data = {
|
||||
"id": Number(sheep.id),
|
||||
"group_id": Number(sheep.group_id),
|
||||
"name": sheep.name,
|
||||
"icon": sheep.icon,
|
||||
"uuid": sheep.uuid,
|
||||
"appointment": sheep.appointment,
|
||||
"can_view_stand": sheep.can_view_stand == 0 ? false : true,
|
||||
"can_view_schedule": sheep.can_view_schedule == 0 ? false : true,
|
||||
"can_view_territory": sheep.can_view_territory == 0 ? false : true,
|
||||
"administrator": {
|
||||
"id": sheep.administrators_id ? sheep.administrators_id : false,
|
||||
"uuid": null
|
||||
},
|
||||
"moderator": {
|
||||
"id": sheep.moderators_id ? sheep.moderators_id : false,
|
||||
"uuid": null,
|
||||
"can_add_sheeps": sheep.can_add_sheeps == 1 ? true : false,
|
||||
"can_add_territory": sheep.can_add_territory == 1 ? true : false,
|
||||
"can_manager_territory": sheep.can_manager_territory == 1 ? true : false,
|
||||
"can_add_stand": sheep.can_add_stand == 1 ? true : false,
|
||||
"can_manager_stand": sheep.can_manager_stand == 1 ? true : false,
|
||||
"can_add_schedule": sheep.can_add_schedule == 1 ? true : false
|
||||
}
|
||||
}
|
||||
|
||||
if (sheepRole == "administrator") {
|
||||
if (sheep.administrators_id) {
|
||||
data.administrator.uuid = sheep.administrators_uuid;
|
||||
}
|
||||
if (sheep.moderators_id) {
|
||||
data.moderator.uuid = sheep.moderators_uuid;
|
||||
}
|
||||
}
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
getList(sheepRole) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
sheeps.*,
|
||||
groups.group_number AS group_id,
|
||||
administrators.id AS administrators_id,
|
||||
administrators.uuid AS administrators_uuid,
|
||||
moderators.id AS moderators_id,
|
||||
moderators.uuid AS moderators_uuid,
|
||||
moderators.can_add_sheeps,
|
||||
moderators.can_add_territory,
|
||||
moderators.can_manager_territory,
|
||||
moderators.can_add_stand,
|
||||
moderators.can_manager_stand,
|
||||
moderators.can_add_schedule
|
||||
FROM
|
||||
sheeps
|
||||
LEFT JOIN
|
||||
groups ON groups.group_number = sheeps.group_id
|
||||
LEFT JOIN
|
||||
administrators ON administrators.sheep_id = sheeps.id
|
||||
LEFT JOIN
|
||||
moderators ON moderators.sheep_id = sheeps.id
|
||||
ORDER BY
|
||||
id
|
||||
`;
|
||||
|
||||
db.all(sql, (err, sheeps) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else {
|
||||
let result = sheeps.map((sheep) => {
|
||||
let data = {
|
||||
"id": Number(sheep.id),
|
||||
"group_id": Number(sheep.group_id),
|
||||
"name": sheep.name,
|
||||
"icon": sheep.icon,
|
||||
"uuid": sheep.uuid,
|
||||
"appointment": sheep.appointment,
|
||||
"can_view_stand": sheep.can_view_stand == 0 ? false : true,
|
||||
"can_view_schedule": sheep.can_view_schedule == 0 ? false : true,
|
||||
"can_view_territory": sheep.can_view_territory == 0 ? false : true,
|
||||
"administrator": {
|
||||
"id": sheep.administrators_id ? sheep.administrators_id : false,
|
||||
"uuid": null
|
||||
},
|
||||
"moderator": {
|
||||
"id": sheep.moderators_id ? sheep.moderators_id : false,
|
||||
"uuid": null,
|
||||
"can_add_sheeps": sheep.can_add_sheeps == 1 ? true : false,
|
||||
"can_add_territory": sheep.can_add_territory == 1 ? true : false,
|
||||
"can_manager_territory": sheep.can_manager_territory == 1 ? true : false,
|
||||
"can_add_stand": sheep.can_add_stand == 1 ? true : false,
|
||||
"can_manager_stand": sheep.can_manager_stand == 1 ? true : false,
|
||||
"can_add_schedule": sheep.can_add_schedule == 1 ? true : false
|
||||
}
|
||||
}
|
||||
|
||||
if (sheepRole == "administrator") {
|
||||
if (sheep.administrators_id) {
|
||||
data.administrator.uuid = sheep.administrators_uuid;
|
||||
}
|
||||
if (sheep.moderators_id) {
|
||||
data.moderator.uuid = sheep.moderators_uuid;
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
})
|
||||
|
||||
return res(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
getAdministrator(uuid) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
sheeps.*,
|
||||
groups.group_number AS group_id,
|
||||
administrators.id AS administrators_id,
|
||||
administrators.uuid AS administrators_uuid
|
||||
FROM
|
||||
sheeps
|
||||
JOIN
|
||||
administrators ON sheeps.id = administrators.sheep_id
|
||||
LEFT JOIN
|
||||
groups ON groups.group_number = sheeps.group_id
|
||||
WHERE
|
||||
administrators.uuid = ?
|
||||
LIMIT 1;
|
||||
`
|
||||
db.get(sql, [uuid], (err, sheep) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (!sheep) {
|
||||
console.log({ "error": "uuid not found" });
|
||||
return res(false);
|
||||
} else {
|
||||
let data = {
|
||||
"id": Number(sheep.id),
|
||||
"group_id": Number(sheep.group_id),
|
||||
"name": sheep.name,
|
||||
"icon": sheep.icon,
|
||||
"uuid": sheep.uuid,
|
||||
"appointment": sheep.appointment,
|
||||
"can_view_stand": sheep.can_view_stand == 0 ? false : true,
|
||||
"can_view_schedule": sheep.can_view_schedule == 0 ? false : true,
|
||||
"can_view_territory": sheep.can_view_territory == 0 ? false : true,
|
||||
"administrator": {
|
||||
"id": sheep.administrators_id,
|
||||
"uuid": sheep.administrators_uuid
|
||||
},
|
||||
"moderator": false
|
||||
}
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
getModerator(uuid) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = `
|
||||
SELECT
|
||||
sheeps.*,
|
||||
groups.group_number AS group_id,
|
||||
moderators.id AS moderators_id,
|
||||
moderators.uuid AS moderators_uuid,
|
||||
moderators.can_add_sheeps AS can_add_sheeps,
|
||||
moderators.can_add_territory AS can_add_territory,
|
||||
moderators.can_manager_territory AS can_manager_territory,
|
||||
moderators.can_add_stand AS can_add_stand,
|
||||
moderators.can_manager_stand AS can_manager_stand,
|
||||
moderators.can_add_schedule AS can_add_schedule
|
||||
FROM
|
||||
sheeps
|
||||
JOIN
|
||||
moderators ON sheeps.id = moderators.sheep_id
|
||||
LEFT JOIN
|
||||
groups ON groups.group_number = sheeps.group_id
|
||||
WHERE
|
||||
moderators.uuid = ?
|
||||
LIMIT 1;
|
||||
`
|
||||
db.get(sql, [uuid], (err, sheep) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (!sheep) {
|
||||
console.log({ "error": "uuid not found" });
|
||||
return res(false);
|
||||
} else {
|
||||
let data = {
|
||||
"id": Number(sheep.id),
|
||||
"group_id": Number(sheep.group_id),
|
||||
"name": sheep.name,
|
||||
"icon": sheep.icon,
|
||||
"uuid": sheep.uuid,
|
||||
"appointment": sheep.appointment,
|
||||
"can_view_stand": sheep.can_view_stand == 0 ? false : true,
|
||||
"can_view_schedule": sheep.can_view_schedule == 0 ? false : true,
|
||||
"can_view_territory": sheep.can_view_territory == 0 ? false : true,
|
||||
"administrator": false,
|
||||
"moderator": {
|
||||
"id": sheep.moderators_id,
|
||||
"uuid": sheep.moderators_uuid,
|
||||
"can_add_sheeps": sheep.can_add_sheeps == 0 ? false : true,
|
||||
"can_add_territory": sheep.can_add_territory == 0 ? false : true,
|
||||
"can_manager_territory": sheep.can_manager_territory == 0 ? false : true,
|
||||
"can_add_stand": sheep.can_add_stand == 0 ? false : true,
|
||||
"can_manager_stand": sheep.can_manager_stand == 0 ? false : true,
|
||||
"can_add_schedule": sheep.can_add_schedule == 0 ? false : true
|
||||
}
|
||||
}
|
||||
|
||||
return res(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
createSheep(data) {
|
||||
return new Promise((res, rej) => {
|
||||
let sql = 'INSERT INTO sheeps(name, group_id, appointment, uuid) VALUES (?, ?, ?, ?)';
|
||||
|
||||
let uuid = crypto.randomUUID();
|
||||
|
||||
db.run(sql, [
|
||||
data.name,
|
||||
Number(data.group_id),
|
||||
data.appointment,
|
||||
uuid
|
||||
], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "status": "ok", "id": this.lastID, "uuid": uuid });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
updateSheep(data) {
|
||||
return new Promise(async (res, rej) => {
|
||||
try {
|
||||
let sql = `
|
||||
UPDATE sheeps
|
||||
SET name = ?, group_id = ?, appointment = ?,
|
||||
can_view_stand = ?, can_view_schedule = ?, can_view_territory = ?
|
||||
WHERE uuid = ?
|
||||
`;
|
||||
|
||||
await db.run(sql, [
|
||||
data.name,
|
||||
Number(data.group_id),
|
||||
data.appointment,
|
||||
data.can_view_stand ? 1 : 0,
|
||||
data.can_view_schedule ? 1 : 0,
|
||||
data.can_view_territory ? 1 : 0,
|
||||
data.uuid
|
||||
]);
|
||||
|
||||
if (data.role === "administrator") {
|
||||
if (!data.administrator?.id) {
|
||||
await db.run(
|
||||
'INSERT INTO administrators(sheep_id, uuid) VALUES (?, ?)',
|
||||
[data.id, crypto.randomUUID()]
|
||||
);
|
||||
console.log({ insert: "ok" });
|
||||
}
|
||||
if (data.moderator?.id) {
|
||||
await db.run('DELETE FROM moderators WHERE id = ?', [data.moderator.id]);
|
||||
console.log({ delete: "ok" });
|
||||
}
|
||||
} else if (data.role === "moderator") {
|
||||
if (!data.moderator?.id) {
|
||||
await db.run(
|
||||
`INSERT INTO moderators(sheep_id, can_add_sheeps, can_add_territory,
|
||||
can_manager_territory, can_add_stand, can_manager_stand,
|
||||
can_add_schedule, uuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
[
|
||||
data.id,
|
||||
data.moderator.can_add_sheeps ? 1 : 0,
|
||||
data.moderator.can_add_territory ? 1 : 0,
|
||||
data.moderator.can_manager_territory ? 1 : 0,
|
||||
data.moderator.can_add_stand ? 1 : 0,
|
||||
data.moderator.can_manager_stand ? 1 : 0,
|
||||
data.moderator.can_add_schedule ? 1 : 0,
|
||||
crypto.randomUUID()
|
||||
]
|
||||
);
|
||||
console.log({ insert: "ok" });
|
||||
} else {
|
||||
await db.run(
|
||||
`UPDATE moderators
|
||||
SET can_add_sheeps = ?, can_add_territory = ?,
|
||||
can_manager_territory = ?, can_add_stand = ?,
|
||||
can_manager_stand = ?, can_add_schedule = ?
|
||||
WHERE id = ?`,
|
||||
[
|
||||
data.moderator.can_add_sheeps ? 1 : 0,
|
||||
data.moderator.can_add_territory ? 1 : 0,
|
||||
data.moderator.can_manager_territory ? 1 : 0,
|
||||
data.moderator.can_add_stand ? 1 : 0,
|
||||
data.moderator.can_manager_stand ? 1 : 0,
|
||||
data.moderator.can_add_schedule ? 1 : 0,
|
||||
data.moderator.id
|
||||
]
|
||||
);
|
||||
console.log({ update: "ok" });
|
||||
}
|
||||
if (data.administrator?.id) {
|
||||
await db.run('DELETE FROM administrators WHERE id = ?', [data.administrator.id]);
|
||||
console.log({ delete: "ok" });
|
||||
}
|
||||
} else if (data.role === "sheep") {
|
||||
if (data.moderator?.id) {
|
||||
await db.run('DELETE FROM moderators WHERE id = ?', [data.moderator.id]);
|
||||
console.log({ delete: "ok" });
|
||||
}
|
||||
if (data.administrator?.id) {
|
||||
await db.run('DELETE FROM administrators WHERE id = ?', [data.administrator.id]);
|
||||
console.log({ delete: "ok" });
|
||||
}
|
||||
}
|
||||
|
||||
res({ status: "ok", id: data.id });
|
||||
} catch (err) {
|
||||
console.error(err.message);
|
||||
rej(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
deleteSheep(data) {
|
||||
return new Promise((res, rej) => {
|
||||
db.run('DELETE FROM sheeps WHERE uuid = ?', [data.uuid], function (err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
return res(false);
|
||||
} else if (this.changes === 0) {
|
||||
return res(false);
|
||||
} else {
|
||||
res({ "dellete": "ok" });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new SheepService();
|
||||
Reference in New Issue
Block a user