63 lines
2.8 KiB
Python
63 lines
2.8 KiB
Python
from datetime import datetime
|
||
|
||
from sqlalchemy import PrimaryKeyConstraint, ForeignKey, Integer, String, DateTime
|
||
from sqlalchemy.orm import relationship, Mapped, mapped_column
|
||
|
||
from utilities.database import db # Импортируем db из backend_flask.py
|
||
|
||
class Users(db.Model):
|
||
chat_id = db.Column(db.Integer, primary_key=True)
|
||
telegram_id = db.Column(db.String(80), unique=True, nullable=False)
|
||
user_email = db.Column(db.String(255), unique=True, nullable=False)
|
||
is_blocked = db.Column(db.Boolean, default=False)
|
||
subscriptions = relationship("Subscriptions", backref="user", cascade="all, delete-orphan") # Добавлено cascade
|
||
|
||
class Regions(db.Model):
|
||
region_id = db.Column(db.Integer, primary_key=True)
|
||
region_name = db.Column(db.String(255), nullable=False)
|
||
active = db.Column(db.Boolean, default=True)
|
||
|
||
class Subscriptions(db.Model):
|
||
region_id = db.Column(db.Integer, nullable=False)
|
||
active = db.Column(db.Boolean, default=True)
|
||
skip = db.Column(db.Boolean, default=False)
|
||
disaster_only = db.Column(db.Boolean, default=False)
|
||
chat_id = db.Column(db.Integer, ForeignKey('users.chat_id', ondelete='CASCADE'), nullable=False) #Добавляем внешний ключ с ondelete
|
||
__table_args__ = (
|
||
PrimaryKeyConstraint('chat_id', 'region_id'),
|
||
)
|
||
|
||
class UILogs(db.Model):
|
||
id = db.Column(db.Integer, primary_key=True)
|
||
chat_id = db.Column(db.Integer, nullable=False)
|
||
actions = db.Column(db.String(500), nullable=False)
|
||
timestamp = db.Column(db.DateTime, default=db.func.current_timestamp())
|
||
|
||
class UserEvents(db.Model):
|
||
id = db.Column(db.Integer, primary_key=True)
|
||
chat_id = db.Column(db.Integer, nullable=False)
|
||
telegram_id = db.Column(db.String(80), nullable=False)
|
||
action = db.Column(db.String(500), nullable=False)
|
||
timestamp = db.Column(db.DateTime, default=db.func.current_timestamp())
|
||
|
||
class Systems(db.Model):
|
||
__tablename__ = 'systems'
|
||
system_id = db.Column(db.String(255), primary_key=True)
|
||
system_name = db.Column(db.String(255), nullable=False)
|
||
name = db.Column(db.String(255), nullable=False)
|
||
|
||
def __repr__(self):
|
||
return f'<System {self.system_id}: {self.system_name} {self.name}>'
|
||
|
||
class WebActionLog(db.Model):
|
||
__tablename__ = 'web_action_logs'
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||
ldap_user_id: Mapped[str] = mapped_column(String(255), nullable=False)
|
||
username: Mapped[str | None] = mapped_column(String(255))
|
||
timestamp: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||
action: Mapped[str] = mapped_column(String(255), nullable=False)
|
||
details: Mapped[str | None] = mapped_column(String(1024))
|
||
|
||
def __repr__(self):
|
||
return f"<WebActionLog(ldap_user_id='{self.ldap_user_id}', username='{self.username}', action='{self.action}', timestamp='{self.timestamp}')>" |