subscriptions/database_queries.py
2024-08-16 18:25:29 +03:00

153 lines
6.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime, date
from typing import Any
from utils import create_connection
def presence_user_bd(user_id: int) -> tuple:
"""Проверяем, существует ли пользователь в таблице users """
conn = create_connection()
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE telegram_id = %s", (user_id,))
return cursor.fetchone()
def adding_user_db(user_id: int, username: str) -> None:
"""Добавление пользователя в таблицу users (имя и id)"""
conn = create_connection()
cursor = conn.cursor()
cursor.execute(
"INSERT INTO users (telegram_id, telegram_username) VALUES (%s, %s)",
(user_id, username))
conn.commit()
def update_user_db(cursor: Any, thread_id: int, telegram_id: int) -> None:
"""Обновление данных по пользователю в таблице users. Добавление айди чата приватного с ботом """
cursor.execute("UPDATE users SET telegram_thread_id = %s WHERE telegram_id = %s", (thread_id, telegram_id))
def user_search(cursor: Any, message_thread_id: int) -> tuple:
"""Поиск пользователя по id в таблице users """
cursor.execute("SELECT * FROM users WHERE telegram_thread_id = %s", (message_thread_id,))
return cursor.fetchone()
def adding_well(cursor: Any, well: int) -> None:
""" Запись курса доллара в таблицу USD_RUB """
cursor.execute("REPLACE INTO USD_RUB (id, well) VALUES (%s, %s)", (1, well))
def getting_course(cursor: Any) -> tuple:
""" Получение курса из таблицы USD_RUB """
cursor.execute("SELECT * FROM USD_RUB WHERE id = 1;")
return cursor.fetchone()
def installation_one_question(cursor: Any, telegram_id: int) -> None:
""" Установка единицы в столбце question_time, чтобы блокировать дальнейшие отправки """
new = 1
cursor.execute("UPDATE users SET question_time = %s WHERE telegram_id = %s", (new, telegram_id))
def installation_zero_question(cursor: Any, telegram_id: int) -> None:
""" Установка нуля в столбце question_time, чтобы разблокировать дальнейшие отправки вопросов """
new = 0
cursor.execute("UPDATE users SET question_time = %s WHERE telegram_id = %s", (new, telegram_id))
def status_question(cursor: Any, telegram_id: int) -> tuple:
""" Получение статуса вопроса (1 или 0) """
cursor.execute("SELECT question_time FROM users WHERE telegram_id = %s", (telegram_id,))
return cursor.fetchone()
def write_hash_to_table(cursor: Any, hash_user: str, telegram_id: int) -> None:
""" Запись успешного хэша в successful_hash """
cursor.execute("INSERT INTO successful_hash (hash_users, telegram_id) VALUES (%s, %s)", (hash_user, telegram_id))
def search_hash_in_table(cursor: Any, hash_user: str,) -> bool:
""" Поиск хэша в таблице successful_hash """
cursor.execute("SELECT EXISTS(SELECT 1 FROM successful_hash WHERE hash_users = %s)", (hash_user,))
result = cursor.fetchone()
return result[0] if result else False
def number_of_streams_from_subscriptions(cursor: Any, telegram_id: int) -> None:
""" Запись 3 ед в столбец count_streams, при условии что нет активной подписки """
new = 3
cursor.execute(
"UPDATE users SET count_streams = count_streams + %s "
"WHERE telegram_id = %s AND (sub_datetime_end IS NULL OR sub_datetime_end = '0')",
(new, telegram_id)
)
def number_of_threads_from_threads(cursor: Any, telegram_id: int, price_usd: int) -> None:
""" Плюсование на количество потоков в столбец count_streams к уже существующему значению """
cursor.execute("UPDATE users SET count_streams = count_streams + %s WHERE telegram_id = %s",
(price_usd, telegram_id))
def get_user_data(cursor: Any, telegram_id: int) -> tuple:
""" Получаем кортеж с данными по пользователю из бд из таблицы users """
cursor.execute("SELECT * FROM users WHERE telegram_id = %s", (telegram_id,))
return cursor.fetchone()
def subscription_entry(cursor: Any, telegram_id: int, price_usd: int) -> None:
""" Запись количества месяцев в subscription_option """
cursor.execute("UPDATE users SET subscription_option = subscription_option + %s WHERE telegram_id = %s",
(price_usd, telegram_id))
def subscription_end_record(cursor, telegram_id: int) -> None:
""" Запись даты окончания подписки в столбцы sub_datetime_end и subscription_endtime_bot """
current_date = datetime.now() # Получение текущей даты
# Получение количества месяцев из столбца subscription_option
select_query = """SELECT subscription_option FROM users WHERE telegram_id = %s"""
cursor.execute(select_query, (telegram_id,))
result = cursor.fetchone()
# Преобразование значения в число
if result:
subscription_option = result[0]
if isinstance(subscription_option, str): # Проверка типа данных
subscription_option = int(subscription_option.split()[0])
else:
return
# Формирование запроса на обновление
update_query = """
UPDATE users
SET sub_datetime_end = DATE_ADD(NOW(), INTERVAL %s MONTH),
subscription_endtime_bot = DATE_ADD(NOW(), INTERVAL %s MONTH)
WHERE telegram_id = %s
"""
cursor.execute(update_query, (subscription_option, subscription_option, telegram_id))
def check_expired_subscriptions() -> list:
""" Получение списка id пользователей, у которых просрочена подписка """
conn = create_connection()
cursor = conn.cursor()
current_date = date.today()
query = """SELECT telegram_id FROM users WHERE subscription_endtime_bot < %s"""
cursor.execute(query, (current_date,))
results = cursor.fetchall()
expired_users = [result[0] for result in results]
return expired_users
def reset_user_data(telegram_id: int) -> None:
"""Обнуляет данные по подписке у пользователя в таблице."""
conn = create_connection()
cursor = conn.cursor()
update_query = """
UPDATE users
SET sub_datetime_end = 0,
subscription_option = 0,
subscription_endtime_bot = NULL,
count_streams = 0
WHERE telegram_id = %s
"""
cursor.execute(update_query, (telegram_id,))
conn.commit()