v0.0.1
This commit is contained in:
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();
|
||||
Reference in New Issue
Block a user