This commit is contained in:
2025-03-31 00:22:21 +03:00
commit 38f2a05107
146 changed files with 66771 additions and 0 deletions

View 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();