Skip to content

Commit

Permalink
Refactor database initialization and message handling; add table crea…
Browse files Browse the repository at this point in the history
…tion for users, messages, and calendars
  • Loading branch information
qertis committed Feb 14, 2025
1 parent 0caf9c0 commit 95048f3
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 69 deletions.
12 changes: 12 additions & 0 deletions src/actions/private/text.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ function formatGoogleCalendarUrl({ text, details, start, end, location }) {
module.exports = async (bot, message, dialog) => {
await sendPrepareAction(bot, message, TYPING);
dialog.push(message);
dialog.saveMessage({
messageId: message.message_id,
chatId: message.chat.id,
text: message.text,
role: 'user',
});
const { credentialSubject } = await generateCalendar(dialog);
const { name, summary, location } = credentialSubject.object;
const time = new Intl.DateTimeFormat(dialog.language, {
Expand Down Expand Up @@ -76,6 +82,12 @@ module.exports = async (bot, message, dialog) => {
inline_keyboard: inlineKeyboard,
},
});
dialog.saveMessage({
messageId: myMessage.message_id,
chatId: message.chat.id,
text: data,
role: 'assistant',
});
await bot.sendMessage(message.chat.id, 'Все верно?', {
reply_to_message_id: myMessage.message_id,
disable_notification: true,
Expand Down
67 changes: 4 additions & 63 deletions src/libs/database.cjs
Original file line number Diff line number Diff line change
@@ -1,65 +1,6 @@
const sqlite = require('node:sqlite');
const { DatabaseSync } = require('node:sqlite');
const { DATABASE } = require('../environments/index.cjs');

const userDB = new sqlite.DatabaseSync(DATABASE.USERS);
const messageDB = new sqlite.DatabaseSync(':memory:');
const calendarsDB = new sqlite.DatabaseSync(DATABASE.CALENDARS);

module.exports.userDB = userDB;
module.exports.calendarsDB = calendarsDB;
module.exports.messageDB = messageDB;

function createMessagesTable() {
messageDB.exec(`
CREATE TABLE if not exists messages(
message_id INTEGER PRIMARY KEY,
chat_id INTEGER,
text TEXT,
role TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
) STRICT
`);
}

function createUsersTable() {
userDB.exec(`
CREATE TABLE if not exists users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
location TEXT NULL,
timezone TEXT DEFAULT 'UTC',
jwt TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
) STRICT
`);
}

function createCalendarsTable() {
calendarsDB.exec(`
CREATE TABLE if not exists calendars(
id INTEGER PRIMARY KEY,
message_id INTEGER,
title TEXT,
details TEXT NULL,
location TEXT NULL,
start INTEGER,
end INTEGER,
geo TEXT NULL
) STRICT
`);
}

try {
createMessagesTable();
} catch (error) {
console.warn(error);
}
try {
createUsersTable();
} catch (error) {
console.warn(error);
}
try {
createCalendarsTable();
} catch (error) {
console.warn(error);
}
module.exports.userDB = new DatabaseSync(DATABASE.USERS);
module.exports.calendarsDB = new DatabaseSync(DATABASE.CALENDARS);
module.exports.messageDB = new DatabaseSync(':memory:');
19 changes: 16 additions & 3 deletions src/libs/dialog.cjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const activitystreams = require('telegram-bot-activitystreams');
const { v1: uuidv1 } = require('uuid');
const { saveMessage, getMessages } = require('../models/messages.cjs');
const { saveMessage, getMessages, clearMessageById } = require('../models/messages.cjs');

/**
* @class
Expand All @@ -10,11 +10,12 @@ class Dialog {
* @param {object} user - Объект пользователя
*/
constructor(user) {
this._uid = uuidv1();
this.clear();
this.user = user;
this.clear();
const x = getMessages(user.id);
}
clear() {
clearMessageById(this.user.id);
this._activity = {
'@context': ['https://www.w3.org/ns/activitystreams'],
'summary': '',
Expand All @@ -29,6 +30,7 @@ class Dialog {
* @returns {object} - Возвращает объект активности.
*/
push(message) {
this._uid = uuidv1();
const activity = activitystreams(message);
activity.type = 'Activity';
this.language = message.from.language_code;
Expand Down Expand Up @@ -79,6 +81,17 @@ class Dialog {

return activity;
}
/**
* @param {object} message - объект сообщения
* @param {number} message.messageId - идентификатор сообщения
* @param {string} message.chatId - идентификатор чата
* @param {string} message.text - текст сообщения
* @param {'user' | 'assistant'} message.role - роль отправителя
* @returns {void}
*/
saveMessage(message) {
saveMessage(message);
}
get activity() {
return this._activity;
}
Expand Down
21 changes: 21 additions & 0 deletions src/models/calendars.cjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
const { calendarsDB } = require('../libs/database.cjs');

function createCalendarsTable() {
calendarsDB.exec(`
CREATE TABLE if not exists calendars(
id INTEGER PRIMARY KEY,
message_id INTEGER,
title TEXT,
details TEXT NULL,
location TEXT NULL,
start INTEGER,
end INTEGER,
geo TEXT NULL
) STRICT
`);
}

try {
createCalendarsTable();
} catch (error) {
console.warn(error);
}

module.exports.getCalendarMessage = (id) => {
const query = calendarsDB.prepare(`SELECT * FROM calendars WHERE message_id == ${id}`);
const events = query.all();
Expand Down
34 changes: 31 additions & 3 deletions src/models/messages.cjs
Original file line number Diff line number Diff line change
@@ -1,21 +1,38 @@
const { messageDB } = require('../libs/database.cjs');

function createMessagesTable() {
messageDB.exec(`
CREATE TABLE if not exists messages(
message_id INTEGER PRIMARY KEY,
chat_id INTEGER,
text TEXT,
role TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
) STRICT
`);
}

try {
createMessagesTable();
} catch (error) {
console.warn(error);
}
/**
* @description сохранение сообщения в базу данных
* @param {object} message - объект сообщения
* @param {number} message.messageId - идентификатор сообщения
* @param {string} message.actorId - идентификатор чата
* @param {string} message.chatId - идентификатор чата
* @param {string} message.text - сообщение
* @param {'user' | 'assistant'} message.role - роль отправителя
*/
module.exports.saveMessage = ({ messageId, actorId, text, role }) => {
module.exports.saveMessage = ({ messageId, chatId, text, role }) => {
const insert = messageDB.prepare(`
INSERT INTO messages (message_id, chat_id, text, role)
VALUES (:message_id, :chat_id, :text, :role)
`);
insert.run({
message_id: messageId,
chat_id: actorId,
chat_id: chatId,
text: text,
role: role,
});
Expand All @@ -33,3 +50,14 @@ module.exports.getMessages = (userId) => {
`);
return select.all(userId);
};
/**
* @description Очистка сообщений из базы данных по идентификатору сообщения
* @param {number} messageId - идентификатор сообщения
*/
module.exports.clearMessageById = (messageId) => {
const clear = messageDB.prepare(`
DELETE FROM messages
WHERE message_id = ?
`);
clear.run(messageId);
};
18 changes: 18 additions & 0 deletions src/models/users.cjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
const { userDB } = require('../libs/database.cjs');

function createUsersTable() {
userDB.exec(`
CREATE TABLE if not exists users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
location TEXT NULL,
timezone TEXT DEFAULT 'UTC',
jwt TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
) STRICT
`);
}

try {
createUsersTable();
} catch (error) {
console.warn(error);
}

module.exports.hasUser = (idUser) => {
const query = userDB.prepare(`SELECT * FROM users WHERE id == ${idUser}`);
const users = query.all();
Expand Down

0 comments on commit 95048f3

Please sign in to comment.