from datetime import datetime from sqlalchemy import Column, Integer, String, ForeignKey, Text from sqlalchemy.orm import relationship from db import Base class ActionLog(Base): __tablename__ = 'action_logs' id = Column(Integer, primary_key=True) admin_id = Column(Integer) action = Column(String) details = Column(String) timestamp = Column(String, default=lambda: datetime.utcnow().isoformat()) class Admin(Base): __tablename__ = 'admins' id = Column(Integer, primary_key=True) tg_id = Column(Integer, nullable=False) channel_id = Column(Integer, ForeignKey('channels.id'), nullable=True) inviter_id = Column(Integer, nullable=True) invite_token = Column(String, nullable=True, unique=True) class Channel(Base): __tablename__ = 'channels' id = Column(Integer, primary_key=True) name = Column(String) link = Column(String) admin_id = Column(Integer, ForeignKey('admins.id')) buttons = relationship('Button', back_populates='channel') class Group(Base): __tablename__ = 'groups' id = Column(Integer, primary_key=True) name = Column(String, nullable=False) link = Column(String, nullable=False) admin_id = Column(Integer, ForeignKey('admins.id')) buttons = relationship('Button', back_populates='group') class Button(Base): __tablename__ = 'buttons' id = Column(Integer, primary_key=True) name = Column(String, nullable=False) url = Column(String, nullable=False) channel_id = Column(Integer, ForeignKey('channels.id'), nullable=True) group_id = Column(Integer, ForeignKey('groups.id'), nullable=True) channel = relationship('Channel', back_populates='buttons') group = relationship('Group', back_populates='buttons')