mirror of
https://github.com/stijndcl/didier.git
synced 2026-04-07 23:55:46 +02:00
Create reminders, fix bugs in schedule parsing
This commit is contained in:
parent
00a146cb2b
commit
d03ece6f58
9 changed files with 199 additions and 17 deletions
42
database/crud/reminders.py
Normal file
42
database/crud/reminders.py
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
from typing import Optional
|
||||
|
||||
from sqlalchemy import delete, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database.crud.users import get_or_add_user
|
||||
from database.enums import ReminderCategory
|
||||
from database.schemas import Reminder
|
||||
|
||||
__all__ = ["get_all_reminders_for_category", "toggle_reminder"]
|
||||
|
||||
|
||||
async def get_all_reminders_for_category(session: AsyncSession, category: ReminderCategory) -> list[Reminder]:
|
||||
"""Get a list of all Reminders for a given category"""
|
||||
statement = select(Reminder).where(Reminder.category == category)
|
||||
return (await session.execute(statement)).scalars().all()
|
||||
|
||||
|
||||
async def toggle_reminder(session: AsyncSession, user_id: int, category: ReminderCategory) -> bool:
|
||||
"""Switch a category on/off
|
||||
|
||||
Returns the new value for the category
|
||||
"""
|
||||
await get_or_add_user(session, user_id)
|
||||
|
||||
select_statement = select(Reminder).where(Reminder.user_id == user_id).where(Reminder.category == category)
|
||||
reminder: Optional[Reminder] = (await session.execute(select_statement)).scalar_one_or_none()
|
||||
|
||||
# No reminder set yet
|
||||
if reminder is None:
|
||||
reminder = Reminder(user_id=user_id, category=category)
|
||||
session.add(reminder)
|
||||
await session.commit()
|
||||
|
||||
return True
|
||||
|
||||
# Reminder found -> delete it
|
||||
delete_statement = delete(Reminder).where(Reminder.reminder_id == reminder.reminder_id)
|
||||
await session.execute(delete_statement)
|
||||
await session.commit()
|
||||
|
||||
return False
|
||||
|
|
@ -1,11 +1,14 @@
|
|||
import enum
|
||||
|
||||
__all__ = ["TaskType"]
|
||||
__all__ = ["ReminderCategory", "TaskType"]
|
||||
|
||||
|
||||
class ReminderCategory(enum.IntEnum):
|
||||
"""Enum for reminder categories"""
|
||||
|
||||
LES = enum.auto()
|
||||
|
||||
|
||||
# There is a bug in typeshed that causes an incorrect PyCharm warning
|
||||
# https://github.com/python/typeshed/issues/8286
|
||||
# noinspection PyArgumentList
|
||||
class TaskType(enum.IntEnum):
|
||||
"""Enum for the different types of tasks"""
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ __all__ = [
|
|||
"Link",
|
||||
"MemeTemplate",
|
||||
"NightlyData",
|
||||
"Reminder",
|
||||
"Task",
|
||||
"UforaAnnouncement",
|
||||
"UforaCourse",
|
||||
|
|
@ -219,6 +220,18 @@ class NightlyData(Base):
|
|||
user: User = relationship("User", back_populates="nightly_data", uselist=False, lazy="selectin")
|
||||
|
||||
|
||||
class Reminder(Base):
|
||||
"""Something that a user should be reminded of"""
|
||||
|
||||
__tablename__ = "reminders"
|
||||
|
||||
reminder_id: int = Column(Integer, primary_key=True)
|
||||
user_id: int = Column(BigInteger, ForeignKey("users.user_id"))
|
||||
category: enums.ReminderCategory = Column(Enum(enums.ReminderCategory), nullable=False)
|
||||
|
||||
user: User = relationship("User", back_populates="reminders", uselist=False, lazy="selectin")
|
||||
|
||||
|
||||
class Task(Base):
|
||||
"""A Didier task"""
|
||||
|
||||
|
|
@ -303,6 +316,9 @@ class User(Base):
|
|||
nightly_data: NightlyData = relationship(
|
||||
"NightlyData", back_populates="user", uselist=False, lazy="selectin", cascade="all, delete-orphan"
|
||||
)
|
||||
reminders: list[Reminder] = relationship(
|
||||
"Reminder", back_populates="user", uselist=True, lazy="selectin", cascade="all, delete-orphan"
|
||||
)
|
||||
wordle_guesses: list[WordleGuess] = relationship(
|
||||
"WordleGuess", back_populates="user", uselist=True, lazy="selectin", cascade="all, delete-orphan"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue