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