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
|
|||
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 |
This check looks for lines that are too long. You can specify the maximum line length.