Add: CouncilMembers model.

This commit is contained in:
2025-07-17 09:14:51 -04:00
parent a7532773c1
commit f472c0419b
+41 -1
View File
@@ -1,7 +1,7 @@
"""File holds all model definitions of SQL tables.""" """File holds all model definitions of SQL tables."""
from sqlalchemy.dialects.mysql import BIGINT, VARCHAR from sqlalchemy.dialects.mysql import BIGINT, VARCHAR
from sqlmodel import Column, Field, SQLModel from sqlmodel import Column, Field, ForeignKey, Relationship, SQLModel
class ElectionInformation(SQLModel, table=True): class ElectionInformation(SQLModel, table=True):
@@ -30,3 +30,43 @@ class ElectionInformation(SQLModel, table=True):
high_council_nomination_msg_id: int | None = Field( high_council_nomination_msg_id: int | None = Field(
sa_column=Column("HighCouncilNominationMsgId", BIGINT(unsigned=True), nullable=True), default=None sa_column=Column("HighCouncilNominationMsgId", BIGINT(unsigned=True), nullable=True), default=None
) )
council_members: list["CouncilMembers"] = Relationship(back_populates="election", cascade_delete=True)
class CouncilMembers(SQLModel, table=True):
"""Represents members involved in a given election.
Records speech message ids for general election and high council position. Booleans record if the user was elected
to a council/high council position.
Attributes:
member_id: User that is running for council's discord id.
speech_msg_id: Message id of user's speech.
elected: Whether the user got elected to council.
discord_manager: Whether the user got elected to the Discord Manager position.
clan_leader: Whether the user got elected to the Clan Leader position.
discord_manager_speech_id: Message id of the user's Discord Manager speech.
clan_leader_speech_id: Message id of the user's Clan Leader speech.
"""
election_name: str = Field(
sa_column=Column(
"ElectionName",
VARCHAR,
ForeignKey("ElectionInformation.ElectionName", ondelete="CASCADE"),
primary_key=True,
),
max_length=30,
)
member_id: int = Field(sa_column=Column("MemberId", BIGINT(unsigned=True), primary_key=True, nullable=False))
speech_msg_id: int = Field(sa_column=Column("SpeechMsgId", BIGINT(unsigned=True), nullable=False))
elected: bool = Field(sa_column=Column("Elected"), default=False)
discord_manager: bool = Field(sa_column=Column("DiscordManager"), default=False)
clan_leader: bool = Field(sa_column=Column("ClanLeader"), default=False)
discord_manager_speech_id: int = Field(
sa_column=Column("DiscordManagerSpeechId", BIGINT(unsigned=True), nullable=True)
)
clan_leader_speech_id: int = Field(sa_column=Column("ClanLeaderSpeechId", BIGINT(unsigned=True), nullable=True))
election: ElectionInformation | None = Relationship(back_populates="council_members")