feat: вфыв
This commit is contained in:
@@ -1,12 +1,83 @@
|
||||
from sqlalchemy import Column, Integer, BigInteger, String, Boolean
|
||||
from sqlalchemy import BigInteger, Table, ForeignKey, Column
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
||||
from models.base import BaseModel
|
||||
|
||||
role_permissions = Table(
|
||||
'role_permissions',
|
||||
BaseModel.metadata,
|
||||
Column('role_key', ForeignKey('roles.key'), primary_key=True),
|
||||
Column('permission_key', ForeignKey('permissions.key'), primary_key=True)
|
||||
)
|
||||
|
||||
user_position = Table(
|
||||
'user_position',
|
||||
BaseModel.metadata,
|
||||
Column('position_key', ForeignKey('positions.key'), primary_key=True),
|
||||
Column('user_id', ForeignKey('users.id'), primary_key=True, unique=True)
|
||||
|
||||
)
|
||||
|
||||
|
||||
class Permission(BaseModel):
|
||||
__tablename__ = 'permissions'
|
||||
key: Mapped[str] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column()
|
||||
|
||||
roles: Mapped[list["Role"]] = relationship('Role',
|
||||
secondary=role_permissions,
|
||||
back_populates='permissions')
|
||||
|
||||
|
||||
class Role(BaseModel):
|
||||
__tablename__ = 'roles'
|
||||
key: Mapped[str] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column()
|
||||
permissions: Mapped[list["Permission"]] = relationship('Permission',
|
||||
secondary=role_permissions,
|
||||
back_populates='roles',
|
||||
lazy='selectin')
|
||||
# users: Mapped[list["User"]] = relationship("User", back_populates="users")
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
__tablename__ = 'users'
|
||||
id = Column(Integer, autoincrement=True, primary_key=True, index=True)
|
||||
telegram_id = Column(BigInteger, nullable=False, index=True)
|
||||
phone_number = Column(String)
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
|
||||
is_admin = Column(Boolean, nullable=False, default=False)
|
||||
first_name: Mapped[str] = mapped_column(nullable=False, server_default='')
|
||||
second_name: Mapped[str] = mapped_column(nullable=False, server_default='')
|
||||
comment: Mapped[str] = mapped_column(nullable=False, server_default='')
|
||||
telegram_id: Mapped[int] = mapped_column(BigInteger,
|
||||
nullable=False,
|
||||
index=True)
|
||||
phone_number: Mapped[str] = mapped_column(nullable=True)
|
||||
is_admin: Mapped[bool] = mapped_column(nullable=False, default=False)
|
||||
is_blocked: Mapped[bool] = mapped_column(nullable=False, server_default='0')
|
||||
is_deleted: Mapped[bool] = mapped_column(nullable=False, server_default='0')
|
||||
|
||||
role_key: Mapped[int] = mapped_column(ForeignKey('roles.key'))
|
||||
role: Mapped["Role"] = relationship(
|
||||
'Role',
|
||||
lazy='joined'
|
||||
)
|
||||
|
||||
position: Mapped["Position"] = relationship(
|
||||
'Position',
|
||||
secondary=user_position,
|
||||
uselist=False,
|
||||
back_populates='users',
|
||||
lazy="joined"
|
||||
)
|
||||
|
||||
|
||||
class Position(BaseModel):
|
||||
__tablename__ = 'positions'
|
||||
key: Mapped[str] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column()
|
||||
|
||||
users: Mapped["User"] = relationship(
|
||||
'User',
|
||||
secondary=user_position,
|
||||
uselist=False,
|
||||
back_populates='position'
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user