Files
FascioSchoolBot/app/infrastructure/database/crud.py
2025-10-03 14:09:43 +03:00

97 lines
2.4 KiB
Python

from datetime import datetime
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from .models import Event, User
async def get_user_by_tg_id(session: AsyncSession, user_tg_id: int) -> User | None:
result = await session.execute(select(User).where(User.tg_id == user_tg_id))
return result.scalar_one_or_none()
async def create_user(
session: AsyncSession,
tg_id: int,
fullname: str,
phone: str = "",
role: str = "user",
) -> User:
user = User(tg_id=tg_id, fullname=fullname, role=role, phone=phone)
session.add(user)
await session.commit()
await session.refresh(user)
return user
async def update_user(
session: AsyncSession, tg_id: int, fullname: str = "", phone: str = ""
) -> None:
user = await get_user_by_tg_id(session, tg_id)
if fullname:
user.fullname = fullname
if phone:
user.phone = phone
await session.commit()
return user
async def get_events_list(session: AsyncSession) -> list[Event]:
result = await session.execute(
select(Event).where(Event.start_date >= datetime.now())
)
return result.scalars()
async def get_event_by_id(session: AsyncSession, event_id: int) -> Event:
result = await session.execute(select(Event).where(Event.id == event_id))
return result.scalar_one_or_none()
async def create_event(
session: AsyncSession,
title: str,
description: str,
start_date: datetime,
end_date: datetime,
) -> Event:
event = Event(
title=title,
description=description,
start_date=start_date,
end_date=end_date,
)
session.add(event)
await session.commit()
await session.refresh(event)
return event
async def delete_event(
session: AsyncSession,
event_id: int,
) -> None:
session.delete(await get_event_by_id(session, event_id))
await session.commit()
async def update_event(
session: AsyncSession,
event_id: int,
title: str = None,
description: str = None,
start_date: datetime = None,
end_date: datetime = None,
) -> Event:
event = await get_event_by_id(session, event_id)
if title:
event.title = title
if description:
event.description = description
if start_date:
event.start_date = start_date
if end_date:
event.end_date = end_date
await session.commit()
return event