fix docker-compose

This commit is contained in:
2025-10-03 17:33:09 +03:00
parent ceb8e87939
commit 27249be467
13 changed files with 193 additions and 68 deletions

View File

@@ -2,12 +2,16 @@ from datetime import datetime
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload
from .models import Event, User
from .enums import UserEventStatus
from .models import Event, User, UserEvent
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))
result = await session.execute(
select(User).options(selectinload(User.events)).where(User.tg_id == user_tg_id)
)
return result.scalar_one_or_none()
@@ -94,4 +98,33 @@ async def update_event(
if end_date:
event.end_date = end_date
await session.commit()
return event
return event
async def register_user_to_event(session: AsyncSession, user_id: int, event_id: int):
user_event = (
await session.execute(
select(UserEvent).where(
(UserEvent.user_id == user_id) & (UserEvent.event_id == event_id)
)
)
).scalar_one_or_none()
if user_event is None:
user_event = UserEvent(user_id=user_id, event_id=event_id)
session.add(user_event)
await session.flush()
if user_event.status == UserEventStatus.CANCELLED.value:
user_event.status = UserEventStatus.NOT_CONFIRMED.value
await session.commit()
async def unregister_user_to_event(session: AsyncSession, user_id: int, event_id: int):
user_event = (
await session.execute(
select(UserEvent).where(
(UserEvent.user_id == user_id) & (UserEvent.event_id == event_id)
)
)
).scalar_one()
user_event.status = UserEventStatus.CANCELLED.value
await session.commit()

View File

@@ -7,7 +7,7 @@ class UserRole(Enum):
TEACHER = "teacher"
class EventUserStatus(Enum):
class UserEventStatus(Enum):
NOT_CONFIRMED = "not confirmed"
CONFIRMED = "confirmed"
CANCELLED = "cancelled"

View File

@@ -3,7 +3,7 @@ import datetime as dt
from sqlalchemy import BigInteger, DateTime, ForeignKey, UniqueConstraint, func
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
from .enums import EventUserStatus, UserRole
from .enums import UserEventStatus, UserRole
class Base(DeclarativeBase):
@@ -45,7 +45,7 @@ class UserEvent(Base):
date: Mapped[dt.datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now()
)
status: Mapped[str] = mapped_column(default=EventUserStatus.NOT_CONFIRMED.value)
status: Mapped[str] = mapped_column(default=UserEventStatus.NOT_CONFIRMED.value)
user_rel = relationship("User", back_populates="events")
event_rel = relationship("Event", back_populates="user_events")