mirror of
https://github.com/stijndcl/didier.git
synced 2026-04-07 23:55:46 +02:00
Displaying deadlines
This commit is contained in:
parent
a510e2fe4a
commit
107e4fb580
6 changed files with 169 additions and 1 deletions
31
database/crud/deadlines.py
Normal file
31
database/crud/deadlines.py
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
from zoneinfo import ZoneInfo
|
||||
|
||||
from dateutil.parser import parse
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import selectinload
|
||||
|
||||
from database.schemas.relational import Deadline
|
||||
|
||||
__all__ = ["add_deadline", "get_deadlines"]
|
||||
|
||||
|
||||
async def add_deadline(session: AsyncSession, course_id: int, name: str, date_str: str):
|
||||
"""Add a new deadline"""
|
||||
date_dt = parse(date_str).replace(tzinfo=ZoneInfo("Europe/Brussels"))
|
||||
|
||||
if date_dt.hour == date_dt.minute == date_dt.second == 0:
|
||||
date_dt.replace(hour=23, minute=59, second=59)
|
||||
|
||||
deadline = Deadline(course_id=course_id, name=name, deadline=date_dt)
|
||||
session.add(deadline)
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def get_deadlines(session: AsyncSession) -> list[Deadline]:
|
||||
"""Get a list of all deadlines that are currently known
|
||||
|
||||
This includes deadlines that have passed already
|
||||
"""
|
||||
statement = select(Deadline).options(selectinload(Deadline.course))
|
||||
return (await session.execute(statement)).scalars().all()
|
||||
|
|
@ -28,6 +28,7 @@ __all__ = [
|
|||
"CustomCommand",
|
||||
"CustomCommandAlias",
|
||||
"DadJoke",
|
||||
"Deadline",
|
||||
"Link",
|
||||
"NightlyData",
|
||||
"Task",
|
||||
|
|
@ -110,6 +111,19 @@ class DadJoke(Base):
|
|||
joke: str = Column(Text, nullable=False)
|
||||
|
||||
|
||||
class Deadline(Base):
|
||||
"""A deadline for a university project"""
|
||||
|
||||
__tablename__ = "deadlines"
|
||||
|
||||
deadline_id: int = Column(Integer, primary_key=True)
|
||||
course_id: int = Column(Integer, ForeignKey("ufora_courses.course_id"))
|
||||
name: str = Column(Text, nullable=False)
|
||||
deadline: datetime = Column(DateTime(timezone=True), nullable=False)
|
||||
|
||||
course: UforaCourse = relationship("UforaCourse", back_populates="deadlines", uselist=False, lazy="selectin")
|
||||
|
||||
|
||||
class Link(Base):
|
||||
"""Useful links that go useful places"""
|
||||
|
||||
|
|
@ -160,6 +174,9 @@ class UforaCourse(Base):
|
|||
aliases: list[UforaCourseAlias] = relationship(
|
||||
"UforaCourseAlias", back_populates="course", cascade="all, delete-orphan", lazy="selectin"
|
||||
)
|
||||
deadlines: list[Deadline] = relationship(
|
||||
"Deadline", back_populates="course", cascade="all, delete-orphan", lazy="selectin"
|
||||
)
|
||||
|
||||
|
||||
class UforaCourseAlias(Base):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue