mirror of
https://github.com/stijndcl/didier.git
synced 2026-04-07 23:55:46 +02:00
Start working on events
This commit is contained in:
parent
1ae7790ca2
commit
5deb312474
7 changed files with 203 additions and 1 deletions
41
database/crud/events.py
Normal file
41
database/crud/events.py
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
from typing import Optional
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from dateutil.parser import parse
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database.schemas import Event
|
||||
|
||||
__all__ = ["add_event", "get_event_by_id", "get_events", "get_next_event"]
|
||||
|
||||
|
||||
async def add_event(
|
||||
session: AsyncSession, *, name: str, description: Optional[str], date_str: str, channel_id: int
|
||||
) -> Event:
|
||||
"""Create a new event"""
|
||||
date_dt = parse(date_str, dayfirst=True).replace(tzinfo=ZoneInfo("Europe/Brussels"))
|
||||
|
||||
event = Event(name=name, description=description, timestamp=date_dt, notification_channel=channel_id)
|
||||
session.add(event)
|
||||
await session.commit()
|
||||
|
||||
return event
|
||||
|
||||
|
||||
async def get_event_by_id(session: AsyncSession, event_id: int) -> Optional[Event]:
|
||||
"""Get an event by its id"""
|
||||
statement = select(Event).where(Event.event_id == event_id)
|
||||
return (await session.execute(statement)).scalar_one_or_none()
|
||||
|
||||
|
||||
async def get_events(session: AsyncSession) -> list[Event]:
|
||||
"""Get a list of all upcoming events"""
|
||||
statement = select(Event)
|
||||
return (await session.execute(statement)).scalars().all()
|
||||
|
||||
|
||||
async def get_next_event(session: AsyncSession) -> Optional[Event]:
|
||||
"""Get the first upcoming event"""
|
||||
statement = select(Event).order_by(Event.timestamp)
|
||||
return (await session.execute(statement)).scalar_one_or_none()
|
||||
|
|
@ -33,6 +33,7 @@ __all__ = [
|
|||
"DadJoke",
|
||||
"Deadline",
|
||||
"EasterEgg",
|
||||
"Event",
|
||||
"FreeGame",
|
||||
"GitHubLink",
|
||||
"Link",
|
||||
|
|
@ -175,6 +176,18 @@ class EasterEgg(Base):
|
|||
startswith: bool = Column(Boolean, nullable=False, server_default="1")
|
||||
|
||||
|
||||
class Event(Base):
|
||||
"""A scheduled event"""
|
||||
|
||||
__tablename__ = "events"
|
||||
|
||||
event_id: int = Column(Integer, primary_key=True)
|
||||
name: str = Column(Text, nullable=False)
|
||||
description: Optional[str] = Column(Text, nullable=True)
|
||||
notification_channel: int = Column(BigInteger, nullable=False)
|
||||
timestamp: datetime = Column(DateTime(timezone=True), nullable=False)
|
||||
|
||||
|
||||
class FreeGame(Base):
|
||||
"""A temporarily free game"""
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue