feat: added cruds, seed, schemas, session

This commit is contained in:
Arduinum
2025-12-26 15:30:08 +03:00
committed by Arduinum628
parent d382d6ad3f
commit 8a0e2e0121
8 changed files with 192 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
from sqlalchemy import select
from kawai_focus_v2.database.models import Timer
from kawai_focus_v2.schemas.timer import TimerModel, TimerListModel
from kawai_focus_v2.database.db import get_db_instance, SessionDB
def get_timer(timer_id: int) -> TimerModel:
"""Функция для получения данных таймера"""
db = get_db_instance()
with db.get_session() as session:
timer = session.get(Timer, timer_id)
return TimerModel.model_validate(timer, from_attributes=True)
def list_timers() -> list[TimerListModel]:
"""Функция для получения списка таймеров"""
db = get_db_instance()
with db.get_session() as session:
timers = session.execute(
select(Timer.id, Timer.title, Timer.pomodoro_time, Timer.count_pomodoro)
).all()
return [TimerListModel.model_validate(timer, from_attributes=True) for timer in timers]
def new_timer(data: TimerModel, db: SessionDB) -> TimerModel:
"""Функция для создания нового таймера"""
with db.get_session() as session:
timer = Timer(**data.model_dump())
session.add(timer)
session.commit()
session.refresh(timer)
return TimerModel.model_validate(timer, from_attributes=True)
def update_timer(data: TimerModel, db: SessionDB) -> TimerModel:
"""Функция для обновления таймера"""
with db.get_session() as session:
timer = session.get(Timer, data.id)
for field, value in data.model_dump(exclude={'id'}).items():
setattr(timer, field, value)
session.commit()
session.refresh(timer)
return TimerModel.model_validate(timer, from_attributes=True)
def del_timer(timer_id: int, db: SessionDB) -> None:
"""Функция для удаления таймера"""
with db.get_session() as session:
timer = session.get(Timer, timer_id)
session.delete(timer)
session.commit()

View File

@@ -0,0 +1,19 @@
from kawai_focus_v2.schemas.timer import TimerModel
data_timers = [
TimerModel(
title='Timer mini example',
pomodoro_time=10,
break_time=3,
break_long_time=15,
count_pomodoro=2
),
TimerModel(
title='Timer max example',
pomodoro_time=90,
break_time=10,
break_long_time=40,
count_pomodoro=8
),
]

View File

@@ -0,0 +1,33 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
from functools import lru_cache
from kawai_focus_v2.core.settings import settings
class SessionDB:
"""Класс для управления подключением к базе данных."""
def __init__(self) -> None:
self._engine = create_engine(
url=settings.db_settings.get_url_db,
echo=settings.db_settings.echo_db
)
self._session_factory = sessionmaker(
bind=self._engine,
expire_on_commit=False,
autocommit=False
)
@property
def get_session(self) -> sessionmaker[Session]:
"""Метод для получения сессии"""
return self._session_factory
@lru_cache(maxsize=1)
def get_db_instance() -> SessionDB:
"""Возвращает один и тот же объект SeesionDB"""
return SessionDB()

View File

@@ -0,0 +1,18 @@
from kawai_focus_v2.schemas.timer import TimerModel
from kawai_focus_v2.database.cruds import new_timer
from kawai_focus_v2.database.db import get_db_instance
from kawai_focus_v2.database.data import data_timers
def new_temers(data: list[TimerModel]) -> None:
"""Заполняет базу данных образцами таймеров"""
db = get_db_instance()
for timer in data:
new_timer(data=timer, db=db)
def start_filling_data() -> None:
"""Функция для заполнения бд данными"""
new_temers(data=data_timers)