feat: вфыв

This commit is contained in:
2024-07-20 09:32:22 +03:00
parent e7235021f9
commit 6b09251141
27 changed files with 536 additions and 119 deletions

View File

@@ -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'
)