mirror of
https://github.com/stijndcl/didier.git
synced 2026-04-07 23:55:46 +02:00
Fix relationship, add github links, improve error messages
This commit is contained in:
parent
41c8c9d0ab
commit
9e3527ae8a
8 changed files with 152 additions and 13 deletions
|
|
@ -5,6 +5,7 @@ from discord import app_commands
|
|||
from discord.ext import commands
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database.crud.users import get_or_add_user
|
||||
from database.schemas import CommandStats
|
||||
|
||||
__all__ = ["register_command_invocation"]
|
||||
|
|
@ -20,6 +21,8 @@ async def register_command_invocation(
|
|||
if command is None:
|
||||
return
|
||||
|
||||
await get_or_add_user(session, ctx.author.id)
|
||||
|
||||
# Check the type of invocation
|
||||
context_menu = isinstance(command, app_commands.ContextMenu)
|
||||
|
||||
|
|
|
|||
43
database/crud/github.py
Normal file
43
database/crud/github.py
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
from typing import Optional
|
||||
|
||||
from sqlalchemy import delete, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database.exceptions import Forbidden, NoResultFoundException
|
||||
from database.schemas import GitHubLink
|
||||
|
||||
__all__ = ["add_github_link", "delete_github_link_by_id", "get_github_links"]
|
||||
|
||||
|
||||
async def add_github_link(session: AsyncSession, user_id: int, url: str) -> GitHubLink:
|
||||
"""Add a new GitHub link into the database"""
|
||||
gh_link = GitHubLink(user_id=user_id, url=url)
|
||||
session.add(gh_link)
|
||||
await session.commit()
|
||||
await session.refresh(gh_link)
|
||||
|
||||
return gh_link
|
||||
|
||||
|
||||
async def delete_github_link_by_id(session: AsyncSession, user_id: int, link_id: int):
|
||||
"""Remove an existing link from the database
|
||||
|
||||
You can only remove links owned by you
|
||||
"""
|
||||
select_statement = select(GitHubLink).where(GitHubLink.github_link_id == link_id)
|
||||
gh_link: Optional[GitHubLink] = (await session.execute(select_statement)).scalar_one_or_none()
|
||||
if gh_link is None:
|
||||
raise NoResultFoundException
|
||||
|
||||
if gh_link.user_id != user_id:
|
||||
raise Forbidden
|
||||
|
||||
delete_statement = delete(GitHubLink).where(GitHubLink.github_link_id == gh_link.github_link_id)
|
||||
await session.execute(delete_statement)
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def get_github_links(session: AsyncSession, user_id: int) -> list[GitHubLink]:
|
||||
"""Get a user's GitHub links"""
|
||||
statement = select(GitHubLink).where(GitHubLink.user_id == user_id)
|
||||
return (await session.execute(statement)).scalars().all()
|
||||
|
|
@ -33,6 +33,7 @@ __all__ = [
|
|||
"DadJoke",
|
||||
"Deadline",
|
||||
"EasterEgg",
|
||||
"GitHubLink",
|
||||
"Link",
|
||||
"MemeTemplate",
|
||||
"NightlyData",
|
||||
|
|
@ -103,10 +104,12 @@ class CommandStats(Base):
|
|||
command_stats_id: int = Column(Integer, primary_key=True)
|
||||
command: str = Column(Text, nullable=False)
|
||||
timestamp: datetime = Column(DateTime(timezone=True), nullable=False)
|
||||
user_id: int = Column(BigInteger, nullable=False)
|
||||
user_id: int = Column(BigInteger, ForeignKey("users.user_id"))
|
||||
slash: bool = Column(Boolean, nullable=False)
|
||||
context_menu: bool = Column(Boolean, nullable=False)
|
||||
|
||||
user: User = relationship("User", back_populates="command_stats", uselist=False, lazy="selectin")
|
||||
|
||||
|
||||
class CustomCommand(Base):
|
||||
"""Custom commands to fill the hole Dyno couldn't"""
|
||||
|
|
@ -170,6 +173,18 @@ class EasterEgg(Base):
|
|||
startswith: bool = Column(Boolean, nullable=False, server_default="1")
|
||||
|
||||
|
||||
class GitHubLink(Base):
|
||||
"""A user's GitHub link"""
|
||||
|
||||
__tablename__ = "github_links"
|
||||
|
||||
github_link_id: int = Column(Integer, primary_key=True)
|
||||
url: str = Column(Text, nullable=False, unique=True)
|
||||
user_id: int = Column(BigInteger, ForeignKey("users.user_id"))
|
||||
|
||||
user: User = relationship("User", back_populates="github_links", uselist=False, lazy="selectin")
|
||||
|
||||
|
||||
class Link(Base):
|
||||
"""Useful links that go useful places"""
|
||||
|
||||
|
|
@ -279,6 +294,12 @@ class User(Base):
|
|||
bookmarks: list[Bookmark] = relationship(
|
||||
"Bookmark", back_populates="user", uselist=True, lazy="selectin", cascade="all, delete-orphan"
|
||||
)
|
||||
command_stats: list[CommandStats] = relationship(
|
||||
"CommandStats", back_populates="user", uselist=True, lazy="selectin", cascade="all, delete-orphan"
|
||||
)
|
||||
github_links: list[GitHubLink] = relationship(
|
||||
"GitHubLink", back_populates="user", uselist=True, lazy="selectin", cascade="all, delete-orphan"
|
||||
)
|
||||
nightly_data: NightlyData = relationship(
|
||||
"NightlyData", back_populates="user", uselist=False, lazy="selectin", cascade="all, delete-orphan"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue