Issues (1)

database/__init__.py (1 issue)

1
from typing import List
2
from typing import Tuple
3
from typing import Union
4
5
from psycopg2.extensions import AsIs
6
7
from database.base import Base
8
9
"""
10
Модуль, содержащий класс с методами для работы с БД, выполняющих конечную цель
11
"""
12
13
14
class Database(Base):
15
    """Класс для методов работы с БД, выполняющих конечную цель
16
    """
17
18
    def get_active_students_ids(self, group: int) -> list:
19
        """Получает список активных студентов (с любым статусом, кроме "отчислен")
20
        """
21
        ids = self.query(
22
            "SELECT user_id FROM users_info WHERE status_id > 0 AND group_num = %s ORDER BY "
23
            "user_id",
24
            (group,),
25
        )
26
        vk_ids = [str(self.get_vk_id(_id)) for (_id,) in ids]
27
        return vk_ids
28
29
    def get_last_names_letters(self, group: int) -> List[str]:
30
        """Получает из базы данных все уникальные первые буквы фамилий
31
        """
32
        letters = self.query(
33
            "SELECT DISTINCT substring(second_name from  '^.') FROM users_info where "
34
            "group_num = %s ORDER BY substring(second_name from  '^.')",
35
            (group,),
36
        )
37
        return [letter for (letter,) in letters]
38
39
    def get_list_of_names(self, letter: str, group: int) -> List[Tuple]:
40
        """Получает из базы данных все фамилии, начинающиеся на букву
41
        """
42
        names = self.query(
43
            "SELECT user_id, first_name, second_name FROM users_info "
44
            "WHERE substring(second_name from '^.') = %s "
45
            "AND status_id > 0 AND group_num = %s ORDER BY user_id",
46
            (letter, group),
47
        )
48
        return names
49
50
    def get_vk_id(self, _id: Union[str, int]) -> int:
51
        """Получает из базы данных идентификатор ВКонтакте по идентификатору студента
52
        """
53
        vk_id = self.query("SELECT vk_id from users WHERE id=%s", (_id,))
54
        return vk_id[0][0]
55
56
    def get_user_id(self, vk_id: int) -> int:
57
        """Получает из базы данных идентификатор студента по идентификатору ВКонтакте
58
        """
59
        user_id = self.query("SELECT id from users WHERE vk_id=%s", (vk_id,))
60
        return user_id[0][0]
61
62
    def get_user_name(self, _id: int) -> str:
63
        """Получает из базы данных имя по идентификатор студента
64
        """
65
        name = self.query("SELECT first_name FROM users_info WHERE user_id=%s", (_id,))
66
        return name[0][0]
67
68
    def get_mailings_list(self, group) -> List[Tuple]:
69
        """Получает из базы данных весь список доступных рассылок
70
        """
71
        mailings = self.query(
72
            "SELECT mailing_id, mailing_name from mailings where group_num=%s", (group,)
73
        )
74
        return mailings
75
76
    def get_subscription_status(self, m_id: int, user_id: int) -> int:
77
        """Получает статус подписки пользователя на рассылку
78
        """
79
        status = self.query(
80
            "SELECT status FROM subscriptions WHERE user_id=%s and mailing_id = %s",
81
            (user_id, m_id),
82
        )
83
        return status[0][0]
84
85
    def is_user_exist(self, user_id: int) -> bool:
86
        """Возвращает информацию о том, существует ли пользователь в базе данных
87
        """
88
        user = self.query("SELECT id FROM users WHERE vk_id=%s", (user_id,))
89
        return bool(user)
90
91
    def is_session_exist(self, user_id: int) -> bool:
92
        """Проверяет существование сессии текущего пользователя
93
        """
94
        user = self.query("SELECT id FROM sessions WHERE vk_id=%s", (user_id,))
95
        return bool(user)
96
97
    def create_user(self, user_id: int):
98
        """Добавляет нового пользователя в таблицы информации и рассылок
99
        """
100
        self.query("INSERT INTO users (vk_id) VALUES (%s)", (user_id,))
101
102
    def create_session(self, user_id: int):
103
        """Создает новую сессию для пользователя
104
        """
105
        _id = self.query("SELECT id FROM users WHERE vk_id=%s", (user_id,))[0][0]
106
        self.query(
107
            "INSERT INTO sessions (id, vk_id, state) VALUES (%s, %s, 'main')",
108
            (_id, user_id),
109
        )
110
111
    def get_session_state(self, user_id: int) -> str:
112
        """Получает текущий статус бота из сессии
113
        """
114
        st = self.query("SELECT state FROM sessions WHERE vk_id=%s", (user_id,))
115
        return st[0][0]
116
117
    def get_session_id(self, user_id: int) -> int:
118
        """Получает идентификатор сессии
119
        """
120
        s_id = self.query("SELECT id FROM sessions WHERE vk_id=%s", (user_id,))
121
        return s_id[0][0]
122
123
    def update_session_state(self, user_id: int, state: str):
124
        """Изменяет текущий статус бота из сессии
125
        """
126
        self.query("UPDATE sessions SET state = %s WHERE vk_id=%s", (state, user_id))
127
128
    def call_session_exist(self, user_id: int) -> bool:
129
        """Проверяет существование сессии призыва
130
        """
131
        s_id = self.get_session_id(user_id)
132
        call_exist = self.query(
133
            "SELECT session_id FROM calls WHERE session_id=%s", (s_id,)
134
        )
135
        texts_exist = self.query(
136
            "SELECT session_id FROM texts WHERE session_id=%s", (s_id,)
137
        )
138
        return bool(call_exist and texts_exist)
139
140
    def create_call_session(self, user_id: int):
141
        """Создает новую сессию призыва
142
        """
143
        s_id = self.get_session_id(user_id)
144
        self.query("INSERT INTO calls (session_id) VALUES (%s)", (s_id,))
145
        self.query("INSERT INTO texts (session_id) VALUES (%s)", (s_id,))
146
147
    def get_call_message(self, user_id: int) -> str:
148
        """Получает текст призыва
149
        """
150
        s_id = self.get_session_id(user_id)
151
        call_text = self.query("SELECT text FROM texts WHERE session_id=%s", (s_id,))
152
        return call_text[0][0]
153
154
    def update_call_message(self, user_id: int, message: str):
155
        """Обновляет текст призыва
156
        """
157
        s_id = self.get_session_id(user_id)
158
        self.query("UPDATE texts SET text = %s WHERE session_id=%s", (message, s_id))
159
160
    def get_call_ids(self, user_id: int) -> str:
161
        """Получить список идентификаторов для призыва
162
        """
163
        s_id = self.get_session_id(user_id)
164
        ids = self.query("SELECT ids FROM calls WHERE session_id=%s", (s_id,))
165
        return ids[0][0]
166
167
    def update_call_ids(self, user_id: int, ids: str):
168
        """Перезаписать список идентификаторов для призыва
169
        """
170
        s_id = self.get_session_id(user_id)
171
        self.query("UPDATE calls SET ids = %s WHERE session_id=%s", (ids, s_id))
172
173
    def append_to_call_ids(self, user_id: int, _id: int):
174
        """Добавить идентификатор к списку для призыва
175
        """
176
        ids = self.get_call_ids(user_id)
177
        if ids is None:
178
            ids = ""
179
        ids += f"{_id},"
180
        self.update_call_ids(user_id, ids)
181
182
    def update_subscribe_state(self, m_id: int, u_id: int, state: int):
183
        """Обновляет статус подписки на рассылку
184
        """
185
        self.query(
186
            "UPDATE subscriptions SET status = %s WHERE user_id=%s and mailing_id = %s",
187
            (state, u_id, m_id),
188
        )
189
190
    def empty_call_storage(self, user_id: int):
191
        """Очистить хранилище призыва (текст призыва и список идентификатора)
192
        """
193
        s_id = self.get_session_id(user_id)
194
        self.query("UPDATE calls SET ids=NULL WHERE session_id=%s", (s_id,))
195
        self.query("UPDATE texts SET text=NULL WHERE session_id=%s", (s_id,))
196
        self.query("UPDATE texts SET attach=NULL WHERE session_id=%s", (s_id,))
197
198
    def empty_mailing_storage(self, user_id: int):
199
        """Очистить хранилище рассылок (выбранную рассылку и текст рассылки)
200
        """
201
        s_id = self.get_session_id(user_id)
202
        self.query("UPDATE mailing_mgmt SET mailing=NULL WHERE session_id=%s", (s_id,))
203
        self.query("UPDATE mailing_mgmt SET m_text=NULL WHERE session_id=%s", (s_id,))
204
        self.query("UPDATE mailing_mgmt SET m_attach=NULL WHERE session_id=%s", (s_id,))
205
206
    def get_mailing_message(self, user_id: int) -> str:
207
        """Получить текст рассылки
208
        """
209
        s_id = self.get_session_id(user_id)
210
        m_message = self.query(
211
            "SELECT m_text FROM mailing_mgmt WHERE session_id=%s", (s_id,)
212
        )
213
        return m_message[0][0]
214
215
    def update_mailing_message(self, user_id: int, message: str):
216
        """Перезаписывает текст рассылки
217
        """
218
        s_id = self.get_session_id(user_id)
219
        self.query(
220
            "UPDATE mailing_mgmt SET m_text = %s WHERE session_id=%s", (message, s_id)
221
        )
222
223
    def get_conversation(self, user_id: int) -> int:
224
        """Получает активную беседу
225
        """
226
        s_id = self.get_session_id(user_id)
227
        conversation = self.query(
228
            "SELECT conversation FROM sessions WHERE id=%s", (s_id,)
229
        )
230
        return conversation[0][0]
231
232
    def update_conversation(self, user_id: int, conv_id: int):
233
        """Изменяет активную беседу
234
        """
235
        s_id = self.get_session_id(user_id)
236
        self.query("UPDATE sessions SET conversation = %s WHERE id=%s", (conv_id, s_id))
237
        return conv_id
238
239
    def mailing_session_exist(self, user_id: int) -> bool:
240
        """Проверяет наличие сессии рассылки
241
        """
242
        s_id = self.get_session_id(user_id)
243
        session = self.query(
244
            "SELECT session_id FROM mailing_mgmt WHERE session_id=%s", (s_id,)
245
        )
246
        return bool(session)
247
248
    def create_mailing_session(self, user_id: int):
249
        """Создает сессию рассылки
250
        """
251
        s_id = self.get_session_id(user_id)
252
        self.query("INSERT INTO mailing_mgmt (session_id) VALUES (%s)", (s_id,))
253
254
    def update_mailing_session(self, user_id: int, m_slug: str):
255
        """Изменяет выбранную рассылку
256
        """
257
        s_id = self.get_session_id(user_id)
258
        self.query(
259
            "UPDATE mailing_mgmt SET mailing = %s WHERE session_id=%s", (m_slug, s_id)
260
        )
261
262
    def get_mailing_session(self, user_id: int) -> int:
263
        """Получает выбранную рассылку
264
        """
265
        s_id = self.get_session_id(user_id)
266
        mailing = self.query(
267
            "SELECT mailing FROM mailing_mgmt WHERE session_id=%s", (s_id,)
268
        )
269
        return mailing[0][0]
270
271
    def fetch_subcribers(self, m_id: int, group: int) -> str:
272
        """Собирает подписчиков рассылки
273
        """
274
        user_ids = self.query(
275
            "SELECT user_id FROM subscriptions WHERE status = 1 and mailing_id = %s",
276
            (m_id,),
277
        )
278
        user_ids = [_id for (_id,) in user_ids]
279
        ids = []
280
        for i, _id in enumerate(user_ids):
281
            ids.append(
282
                self.query(
283
                    "SELECT vk_id FROM users left outer join users_info on id = "
284
                    "user_id WHERE id=%s and group_num = %s",
285
                    (_id, group),
286
                )[0][0]
287
            )
288
        ids = ",".join(map(str, ids))
289
        return ids
290
291
    def get_names_using_status(self, user_id: int) -> bool:
292
        """Получает статус использования имён
293
        """
294
        s_id = self.get_session_id(user_id)
295
        names_using = self.query(
296
            "SELECT names_using FROM sessions WHERE id=%s", (s_id,)
297
        )
298
        return bool(names_using[0][0])
299
300
    def update_names_using_status(self, user_id: int, value: int):
301
        """Изменяет статус использования имён
302
        """
303
        s_id = self.get_session_id(user_id)
304
        self.query("UPDATE sessions SET names_using = %s WHERE id=%s", (value, s_id))
305
306
    def get_users_names(self, ids: list) -> List[str]:
307
        """Получает список имён по списку идентификаторов ВКонтакте
308
        """
309
        ids = ", ".join(ids)
310
        query = self.query(
311
            "SELECT first_name FROM users INNER JOIN users_info ON "
312
            "users.id = users_info.user_id WHERE vk_id in (%s) ORDER "
313
            "BY position(vk_id::text in %s)",
314
            (AsIs(ids), ids),
315
        )
316
        names = [i for (i,) in query]
317
        return names
318
319
    def get_call_attaches(self, user_id: int):
320
        """Получает список вложений для сообщения с призывом
321
        """
322
        s_id = self.get_session_id(user_id)
323
        query = self.query("SELECT attach FROM texts WHERE session_id=%s", (s_id,))
324
        return query[0][0]
325
326
    def update_call_attaches(self, user_id: int, attach: str):
327
        """Обновляет список вложений для сообщения с призывом
328
        """
329
        s_id = self.get_session_id(user_id)
330
        self.query("UPDATE texts SET attach = %s WHERE session_id=%s", (attach, s_id))
331
332
    def get_mailing_attaches(self, user_id: int):
333
        """Получает список вложений для сообщения рассылки
334
        """
335
        s_id = self.get_session_id(user_id)
336
        query = self.query(
337
            "SELECT m_attach FROM mailing_mgmt WHERE session_id=%s", (s_id,)
338
        )
339
        return query[0][0]
340
341
    def update_mailing_attaches(self, user_id: int, attach: str):
342
        """Обновляет список вложений для сообщения рассылки
343
        """
344
        s_id = self.get_session_id(user_id)
345
        self.query(
346
            "UPDATE mailing_mgmt SET m_attach = %s WHERE session_id=%s", (attach, s_id)
347
        )
348
349
    def get_list_of_finances_categories(self, group: int) -> List[Tuple]:
350
        """Получает список доступных категорий расходов
351
        """
352
        query = self.query(
353
            "SELECT id, name FROM finances_categories where group_num=%s", (group,)
354
        )
355
        return query
356
357
    def add_expences_category(self, name: str, s: int, group: int):
358
        """Созадет новую категорию расходов
359
        """
360
        query = self.query(
361
            "INSERT INTO finances_categories (name, sum, group_num) VALUES (%s, %s, %s) RETURNING id",
0 ignored issues
show
This line is too long as per the coding-style (102/100).

This check looks for lines that are too long. You can specify the maximum line length.

Loading history...
362
            (name, s, group),
363
        )
364
365
        return query[0][0]
366
367
    def get_active_expenses_category(self, user_id: int):
368
        """Получает текущую выбранную пользователем статью расходов
369
        """
370
        s_id = self.get_session_id(user_id)
371
        query = self.query("SELECT fin_cat FROM sessions WHERE id=%s", (s_id,))
372
        return query[0][0]
373
374
    def update_active_expenses_category(self, user_id: int, cat: str):
375
        """Обновляет текущую выбранную пользователем статью расходов
376
        """
377
        s_id = self.get_session_id(user_id)
378
        self.query("UPDATE sessions SET fin_cat = %s WHERE id = %s", (cat, s_id))
379
380
    def add_expense(self, e_id: int, summ: int):
381
        """Создает новый расход
382
        """
383
        self.query(
384
            "INSERT INTO finances_expenses (category, sum) VALUES (%s, %s)",
385
            (e_id, summ),
386
        )
387
388
    def get_expense_category_by_slug(self, cat_id: int) -> int:
389
        """Получет название категории расхода по ИД категории
390
        """
391
        query = self.query(
392
            "SELECT name FROM finances_categories WHERE id=%s", (cat_id,)
393
        )
394
        return query[0][0]
395
396
    def update_expense_summ(self, e_id: int, summ: int):
397
        """Обновляет сумму сборов категории расхода
398
        """
399
        self.query(
400
            "UPDATE finances_categories SET sum = %s WHERE id = %s", (summ, e_id)
401
        )
402
403
    def update_expense_name(self, e_id: int, name: str):
404
        """Обновляет имя категории расхода
405
        """
406
        self.query("UPDATE finances_categories SET name = %s WHERE id=%s", (name, e_id))
407
408
    def delete_expense_catgory(self, e_id: int):
409
        """Удаляет категорию расхода
410
        """
411
        self.query("DELETE FROM finances_categories WHERE id=%s", (e_id,))
412
413
    def get_all_donates_in_category(self, cat_id: int):
414
        """Получает сумму всех сборов по категории
415
        """
416
        query = self.query(
417
            "SELECT sum FROM finances_donates WHERE category=%s", (cat_id,)
418
        )
419
        return [i for (i,) in query]
420
421
    def get_all_donates(self):
422
        """Получает сумму всех сборов
423
        """
424
        query = self.query("SELECT sum FROM finances_donates")
425
        return [i for (i,) in query]
426
427
    def get_all_expenses_in_category(self, e_id: int):
428
        """Получает все расходы в категории
429
        """
430
        query = self.query(
431
            "SELECT sum FROM finances_expenses WHERE category=%s", (e_id,)
432
        )
433
        return [i for (i,) in query]
434
435
    def get_all_expenses(self):
436
        """Получает все расходы
437
        """
438
        query = self.query("SELECT sum FROM finances_expenses")
439
        return [i for (i,) in query]
440
441
    def get_expense_summ(self, e_id: int):
442
        """Получает сумму сбора категории
443
        """
444
        query = self.query("SELECT sum FROM finances_categories WHERE id=%s", (e_id,))
445
        return query[0][0]
446
447
    def create_donate(self, s_id: int, slug: str):
448
        """Создает новый взнос
449
        """
450
        query = self.query(
451
            "INSERT INTO finances_donates (student_id, category) VALUES (%s, %s) "
452
            "RETURNING id",
453
            (s_id, slug),
454
        )
455
        return query[0][0]
456
457
    def delete_donate(self, d_id: int):
458
        """Удаляет взнос
459
        """
460
        self.query("DELETE FROM finances_donates WHERE id=%s", (d_id,))
461
462
    def get_summ_of_donate(self, d_id: int):
463
        """Получает сумму взноса
464
465
        Args:
466
            d_id: Идентификатор взноса
467
468
        Returns:
469
            int: Сумма взноса
470
        """
471
        query = self.query("SELECT sum FROM finances_donates WHERE id=%s", (d_id,))
472
        return query[0][0]
473
474
    def append_summ_to_donate(self, d_id: int, summ: int):
475
        """Добавляет сумму к сбору
476
        """
477
        source = self.get_summ_of_donate(d_id)
478
        new = summ + source
479
        self.query("UPDATE finances_donates SET sum = %s WHERE id=%s", (new, d_id))
480
481
    def update_donate_id(self, u_id: int, d_id: int):
482
        """Обновляет иденифиткатор создаваемого взноса в хранилище
483
        """
484
        self.query("UPDATE sessions SET donate_id = %s WHERE vk_id=%s", (d_id, u_id))
485
486
    def get_donate_id(self, u_id: int):
487
        """Получет иденифиткатор создаваемого взноса в хранилище
488
        """
489
        query = self.query("SELECT donate_id FROM sessions WHERE vk_id=%s", (u_id,))
490
        return query[0][0]
491
492
    def get_list_of_donaters_by_slug(self, slug: str, summ: int = 0):
493
        """Получает список идентификаторов всех внесших деньги на определенную категорию
494
        """
495
        query = self.query(
496
            "SELECT student_id FROM finances_donates WHERE category=%s AND sum >= %s",
497
            (slug, summ),
498
        )
499
        return [i for (i,) in query]
500
501
    def get_id_of_donate_record(self, _id, slug) -> int:
502
        """Получает идентификатор записи взноса
503
        Args:
504
            _id: Идентификатор студента, внесшего деньги
505
            slug: Слаг категории расхода
506
507
        Returns:
508
            int: Идентификатор записи
509
        """
510
        query = self.query(
511
            "SELECT id FROM finances_donates WHERE student_id=%s AND category=%s",
512
            (_id, slug),
513
        )
514
        return query[0][0]
515
516
    def set_current_date_as_update(self, d_id):
517
        """Устанавливает текущую дату в качестве даты изменения записи о взносе
518
        Args:
519
            d_id: Иденитфикатор записи взноса
520
521
        """
522
        self.query(
523
            "UPDATE finances_donates SET updated_date = (SELECT CURRENT_DATE) WHERE id=%s",
524
            (d_id,),
525
        )
526
527
    def get_list_of_administrators(self):
528
        """Получает список администраторов бота
529
        """
530
        admins = self.query("select * from administrators")
531
        return admins
532
533
    def get_group_of_user(self, vk_id: int):
534
        """Получает номер группы студента по идентификатору ВК
535
        """
536
        user_id = self.get_user_id(vk_id)
537
        group = self.query(
538
            "select group_num from users_info where user_id=%s", (user_id,)
539
        )
540
        return group[0][0]
541
542
    def get_schedule_descriptor(self, g_id: int):
543
        """Получает дескриптор расписания
544
545
        Args:
546
            g_id: Номер группы
547
548
        Returns:
549
            str: Дескриптор расписания
550
        """
551
        desc = self.query(
552
            "select schedule_descriptor from schedule where group_num = %s", (g_id,)
553
        )
554
        return desc[0][0]
555
556
    def get_list_of_groups(self):
557
        """Получает список групп с описанием
558
559
        Returns:
560
            List[tuple]: Список созданных групп
561
        """
562
        groups = self.query("select * from groups")
563
        return groups
564
565
    def get_administrating_groups(self, admin_id: int):
566
        """Получает список групп доступных пользователю для администрирования
567
568
        Args:
569
            admin_id: Идентификатор пользователя
570
        Returns:
571
            List[int]: Список номеров групп
572
        """
573
        groups = self.query(
574
            "select group_num from administrators where vk_id=%s", (admin_id,)
575
        )
576
        return [i for (i,) in groups]
577
578
    def get_registered_chats(self):
579
        """Получает список зарегистрированных чатов"""
580
        chats = self.query("select chat_id from chats")
581
        return [chat for (chat,) in chats]
582
583
    def get_chats_of_group(self, group: int):
584
        """Получает список чатов, привязанных к группе
585
586
        Args:
587
            group: Номер группы
588
        Returns:
589
            List[Tuple[int, int]]: Список чатов
590
        """
591
        chats = self.query(
592
            "select chat_id, chat_type from chats where group_num=%s", (group,)
593
        )
594
        return chats
595
596
    def get_cached_chats(self):
597
        """Получает список сохраненных чатов"""
598
        chats = self.query("select chat_id from chat_cache")
599
        return [chat for (chat,) in chats]
600
601
    def add_cached_chat(self, chat_id: int):
602
        """Сохраняет чат в кеш
603
        Args:
604
            chat_id: Идентификатор чата для сохранения
605
        """
606
        self.query("insert into chat_cache (chat_id) values (%s)", (chat_id,))
607
608
    def remove_cached_chat(self, chat_id: int):
609
        """Удаляет чат из кеша
610
        Args:
611
            chat_id: Идентификатор чата для удаления
612
        """
613
        self.query("delete from chat_cache where chat_id=%s", (chat_id,))
614
615
    def is_main_chat_added(self, group: int):
616
        """Проверяет наличие добавленного основного чата в группу
617
        Args:
618
            group: Номер группы
619
        Returns:
620
            bool: Наличие основного чата
621
        """
622
        chat = self.query(
623
            "select chat_id from chats where group_num=%s and " "chat_type=%s",
624
            (group, 1),
625
        )
626
        return bool(chat)
627
628
    def is_test_chat_added(self, group: int):
629
        """Проверяет наличие добавленного тестового чата в группу
630
        Args:
631
            group: Номер группы
632
        Returns:
633
            bool: Наличие основного чата
634
        """
635
        chat = self.query(
636
            "select chat_id from chats where group_num=%s and " "chat_type=%s",
637
            (group, 0),
638
        )
639
        return bool(chat)
640
641
    def registrate_chat(self, chat_id: int, chat_type: int, group: int):
642
        """Регистрирует чат
643
        Args:
644
            chat_id: Идентификатор регистрируемого чата
645
            chat_type: Тип чата (0/1)
646
            group: Номер группы
647
        """
648
        self.query(
649
            "insert into chats (chat_id, chat_type, group_num) values (%s, %s, %s)",
650
            (chat_id, chat_type, group),
651
        )
652
653
    def is_chat_active(self, group: int, chat_type: int):
654
        """
655
        Возвращает статус чата (активен/не активен)
656
        Args:
657
            group: Номер группы
658
            chat_type: Тип чата (тестовый/основной)
659
660
        Returns:
661
            bool: Статус чата
662
        """
663
        chat_status = self.query(
664
            "select is_active from chats where group_num=%s and chat_type=%s",
665
            (group, chat_type),
666
            fetchone=True,
667
        )
668
        return bool(chat_status[0])
669
670
    def update_chat_activity(self, group: int, chat_type: int, new_state: int):
671
        """
672
        Изменяет статус активности чата
673
        Args:
674
            group: Номер группы
675
            chat_type: Тип чата (тестовый/основной)
676
            new_state: Новое состояние чата
677
        """
678
        self.query(
679
            "update chats set is_active = %s where group_num=%s and " "chat_type=%s",
680
            (new_state, group, chat_type),
681
        )
682
683
    def unpin_chat(self, group: int, chat_type: int):
684
        """
685
        Открепляет чат
686
        Args:
687
            group: Номер группы
688
            chat_type: Тип чата
689
        """
690
        self.query(
691
            "delete from chats where group_num=%s and chat_type=%s", (group, chat_type)
692
        )
693
694
    def get_active_chat_id(self, group: int):
695
        """
696
        Получает идентификатор акивного чата группы
697
        Args:
698
            group: Номер группы
699
700
        Returns:
701
            int: Идентфикатор чата
702
        """
703
        chat = self.query(
704
            "select chat_id from chats where chat_type=1 and " "group_num=%s",
705
            (group,),
706
            fetchone=True,
707
        )
708
        return chat[0]
709
710
    def get_chat_id(self, group: int, chat_type: int):
711
        """
712
        Получает идентификатор чата
713
        Args:
714
            group: Номер группы
715
            chat_type: Тип чата (тестовый/основной)
716
717
        Returns:
718
            int: Идентификатор чата
719
        """
720
        chat = self.query(
721
            "select chat_id from chats where chat_type=%s and group_num=%s",
722
            (chat_type, group),
723
            fetchone=True,
724
        )
725
        return chat[0]
726