48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, UniqueConstraint
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from ._base import Base, DictLikeMixin
|
|
|
|
|
|
class Server(DictLikeMixin, Base):
|
|
__tablename__ = "servers"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
cluster_name = Column(String)
|
|
server_name = Column(String, unique=True)
|
|
api_url = Column(String)
|
|
subscription_url = Column(String)
|
|
inbound_id = Column(String)
|
|
panel_type = Column(String)
|
|
max_keys = Column(Integer)
|
|
tariff_group = Column(String)
|
|
enabled = Column(Boolean, default=True)
|
|
|
|
subgroups = relationship("ServerSubgroup", back_populates="server", cascade="all, delete-orphan")
|
|
groups = relationship("ServerSpecialgroup", back_populates="server", cascade="all, delete-orphan")
|
|
|
|
|
|
class ServerSubgroup(DictLikeMixin, Base):
|
|
__tablename__ = "server_subgroups"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
server_id = Column(Integer, ForeignKey("servers.id", ondelete="CASCADE"), index=True, nullable=False)
|
|
group_code = Column(String, nullable=False)
|
|
subgroup_title = Column(String, nullable=False)
|
|
|
|
server = relationship("Server", back_populates="subgroups")
|
|
|
|
__table_args__ = (UniqueConstraint("server_id", "subgroup_title", name="uq_server_subgroup"),)
|
|
|
|
|
|
class ServerSpecialgroup(DictLikeMixin, Base):
|
|
__tablename__ = "server_specialgroups"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
server_id = Column(Integer, ForeignKey("servers.id", ondelete="CASCADE"), index=True, nullable=False)
|
|
group_code = Column(String, nullable=False)
|
|
|
|
server = relationship("Server")
|
|
|
|
__table_args__ = (UniqueConstraint("server_id", "group_code", name="uq_server_group"),)
|