feat: use Mapped syntax for columns

This commit is contained in:
Iain Learmonth 2026-06-20 18:42:36 +01:00
parent cb70f17ad5
commit 6397bd1316
9 changed files with 108 additions and 105 deletions

View file

@ -18,20 +18,20 @@ Models:
- org_id[FK][PK], user_id[FK][PK], group_id[FK][PK]
"""
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship
from sqlalchemy import ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship, mapped_column, Mapped
from src.database import Base
from src.models import CustomBase
class Permission(Base):
class Permission(CustomBase):
__tablename__ = "permission"
id = Column(Integer, primary_key=True)
resource = Column(String, nullable=False)
action = Column(String, nullable=False)
id: Mapped[int] = mapped_column(primary_key=True)
resource: Mapped[str]
action: Mapped[str]
service_id = Column(Integer, ForeignKey("service.id", ondelete="CASCADE"))
service_id: Mapped[int] = mapped_column(ForeignKey("service.id", ondelete="CASCADE"))
__table_args__ = (
UniqueConstraint(
@ -46,10 +46,6 @@ class Permission(Base):
"Service", back_populates="permission_rel", foreign_keys="Permission.service_id"
)
@property
def service_name(self):
return self.service_rel.name
group_rel = relationship(
"Group", secondary="group_permissions", back_populates="permission_rel"
)
@ -58,13 +54,17 @@ class Permission(Base):
"Organisation", secondary="org_permissions", back_populates="permission_rel"
)
@property
def service_name(self):
return self.service_rel.name
class Group(Base):
class Group(CustomBase):
__tablename__ = "group"
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str]
org_id = Column(Integer, ForeignKey("organisation.id", ondelete="CASCADE"))
org_id: Mapped[int] = mapped_column(ForeignKey("organisation.id", ondelete="CASCADE"))
__table_args__ = (
UniqueConstraint(
@ -83,31 +83,31 @@ class Group(Base):
)
class GroupPermissions(Base):
class GroupPermissions(CustomBase):
__tablename__ = "group_permissions"
group_id = Column(
Integer, ForeignKey("group.id", ondelete="CASCADE"), primary_key=True
group_id: Mapped[int] = mapped_column(
ForeignKey("group.id", ondelete="CASCADE"), primary_key=True
)
permission_id = Column(
Integer, ForeignKey("permission.id", ondelete="CASCADE"), primary_key=True
permission_id: Mapped[int] = mapped_column(
ForeignKey("permission.id", ondelete="CASCADE"), primary_key=True
)
class UserGroups(Base):
class UserGroups(CustomBase):
__tablename__ = "user_groups"
user_id = Column(
Integer, ForeignKey("user.id", ondelete="CASCADE"), primary_key=True
user_id: Mapped[int] = mapped_column(
ForeignKey("user.id", ondelete="CASCADE"), primary_key=True
)
group_id = Column(
Integer, ForeignKey("group.id", ondelete="CASCADE"), primary_key=True
group_id: Mapped[int] = mapped_column(
ForeignKey("group.id", ondelete="CASCADE"), primary_key=True
)
class OrgPermissions(Base):
class OrgPermissions(CustomBase):
__tablename__ = "org_permissions"
org_id = Column(
Integer, ForeignKey("organisation.id", ondelete="CASCADE"), primary_key=True
org_id: Mapped[int] = mapped_column(
ForeignKey("organisation.id", ondelete="CASCADE"), primary_key=True
)
permission_id = Column(
Integer, ForeignKey("permission.id", ondelete="CASCADE"), primary_key=True
permission_id: Mapped[int] = mapped_column(
ForeignKey("permission.id", ondelete="CASCADE"), primary_key=True
)