повысил надежность обработки API-ответов и ошибок БД
This commit is contained in:
11
db/db.py
11
db/db.py
@@ -5,6 +5,7 @@ from colorama import Fore
|
||||
|
||||
from classes import Activity, ActivityType, Tag, VetroProject
|
||||
from classes.classes import Task
|
||||
from db.constants import USER_LOOKUP_FIELDS
|
||||
from enums import ActivityTypes
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -102,8 +103,9 @@ class Database:
|
||||
)
|
||||
)
|
||||
self.con.commit()
|
||||
except sq.IntegrityError:
|
||||
pass
|
||||
except sq.IntegrityError as e:
|
||||
self.con.rollback()
|
||||
logger.error(f"Не удалось сохранить трудочасы по активности {act.id}: {e}")
|
||||
|
||||
|
||||
def insert_tags(self, tags: list[Tag]):
|
||||
@@ -238,8 +240,13 @@ class Database:
|
||||
|
||||
def get_user_by(self, by_field: str, value: str):
|
||||
"""Получает пользователя из бд"""
|
||||
if by_field not in USER_LOOKUP_FIELDS:
|
||||
raise ValueError(f"Недопустимое поле поиска пользователя: {by_field}")
|
||||
try:
|
||||
user = self.cursor.execute(f"SELECT * FROM user WHERE {by_field} = ?", (value,)).fetchone()
|
||||
if not user:
|
||||
logger.error(f"Пользователь не найден: {by_field}={value}")
|
||||
return None
|
||||
return {
|
||||
"id": user[0],
|
||||
"first_name": user[1],
|
||||
|
||||
Reference in New Issue
Block a user