Большой рефактор. Обновление тегов, задач и типов деятельности при сохранении активностей в БД

This commit is contained in:
2025-07-03 15:50:43 +03:00
parent ca20bd8620
commit f627f318a6
6 changed files with 215 additions and 148 deletions

100
db/db.py
View File

@@ -32,16 +32,7 @@ class Database:
def insert_activities(self, activities: list[Activity]):
"""Сохраняет в базу данных активности Clockify"""
is_updated = True
for act in activities:
if is_updated:
tags = self.cursor.execute("SELECT * FROM tag WHERE id = ?", (act.tag_id, )).fetchall()
vetro_project_id = act.vetro_project_id
if vetro_project_id:
vetro_projects = self.cursor.execute("SELECT * FROM vetro_project WHERE id = ?", (vetro_project_id, )).fetchall()
is_updated = tags or vetro_projects
else:
is_updated = bool(tags)
try:
self.cursor.execute(
"""INSERT INTO activity(
@@ -91,8 +82,6 @@ class Database:
)
finally:
self.con.commit()
if not is_updated:
logging.info(Fore.YELLOW + "База данных устарела. Рекомендуем обновить с помощью флага -i [--init-db]" + Fore.RESET)
def insert_time_entries(self, activities: list[Activity]):
"""Сохраняет в базу данных трудочасы Redmine"""
@@ -195,39 +184,6 @@ class Database:
)
finally:
self.con.commit()
def get_user_by(self, by_field: str, value: str):
"""Получает пользователя из бд"""
try:
user = self.cursor.execute(f"SELECT * FROM user WHERE {by_field} = ?", (value,)).fetchone()
return {
"id": user[0],
"first_name": user[1],
"last_name": user[2],
"clockify_user_id": user[3],
"redmine_user_id": user[4],
"clockify_email": user[5],
"clockify_username": user[6],
"redmine_email": user[7],
"redmine_username": user[8]
}
except Exception as e:
logging.error(e)
def get_tags(self) -> list[Tag]:
"""Получает теги из бд"""
try:
tags = self.cursor.execute("SELECT * FROM tag").fetchall()
return [
Tag(
id=tag[0],
title=tag[1]
)
for tag in tags
]
except Exception as e:
logging.error(e)
def insert_tasks(self, tasks: list[Task]):
"""Сохраняет в БД Задачи из Redmine"""
@@ -280,6 +236,38 @@ class Database:
finally:
self.con.commit()
def get_user_by(self, by_field: str, value: str):
"""Получает пользователя из бд"""
try:
user = self.cursor.execute(f"SELECT * FROM user WHERE {by_field} = ?", (value,)).fetchone()
return {
"id": user[0],
"first_name": user[1],
"last_name": user[2],
"clockify_user_id": user[3],
"redmine_user_id": user[4],
"clockify_email": user[5],
"clockify_username": user[6],
"redmine_email": user[7],
"redmine_username": user[8]
}
except Exception as e:
logging.error(e)
def get_tags(self) -> list[Tag]:
"""Получает теги из бд"""
try:
return [
Tag(
id=tag[0],
title=tag[1]
)
for tag in self.cursor.execute("SELECT * FROM tag").fetchall()
]
except Exception as e:
logging.error(e)
def get_tasks(self) -> list[Task]:
"""Получает задачи из бд"""
try:
@@ -297,3 +285,27 @@ class Database:
]
except Exception as e:
logging.error(e)
def get_vetro_projects(self) -> list[VetroProject]:
"""Получает Проекты Ветро из бд"""
try:
return [
VetroProject(**{
"id": vetro_project[0],
"title": vetro_project[1]
}) for vetro_project in self.cursor.execute("SELECT * FROM vetro_project").fetchall()
]
except Exception as e:
logging.error(e)
def get_activity_types(self) -> list[ActivityType]:
"""Получает Виды деятельности из бд"""
try:
return [
ActivityType(**{
"id": activity_type[0],
"title": activity_type[1]
}) for activity_type in self.cursor.execute("SELECT * FROM activity_type").fetchall()
]
except Exception as e:
logging.error(e)