106 lines
6.1 KiB
JavaScript
106 lines
6.1 KiB
JavaScript
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(); |