повысил надежность обработки API-ответов и ошибок БД
This commit is contained in:
13
db/constants.py
Normal file
13
db/constants.py
Normal file
@@ -0,0 +1,13 @@
|
||||
"""Константы слоя базы данных."""
|
||||
|
||||
USER_LOOKUP_FIELDS = frozenset(
|
||||
{
|
||||
"id",
|
||||
"clockify_user_id",
|
||||
"redmine_user_id",
|
||||
"clockify_email",
|
||||
"clockify_username",
|
||||
"redmine_email",
|
||||
"redmine_username",
|
||||
}
|
||||
)
|
||||
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