from sqlalchemy import Column, BigInteger, Integer, String, DateTime, Text, Boolean, Float, Index, UniqueConstraint from .database import Base import datetime class Role(Base): __tablename__ = "role" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(100), nullable=False, unique=True) description = Column(String(255)) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships # relationships are intentionally omitted; handle joins in SQL queries as needed class Permission(Base): __tablename__ = "permission" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False) path = Column(String(255), nullable=False) method = Column(String(20), nullable=False) description = Column(String(255)) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class Unit(Base): __tablename__ = "units" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False) description = Column(Text) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted __table_args__ = (Index('ix_units_name', 'name'),) class User(Base): __tablename__ = "users" id = Column(BigInteger, primary_key=True, autoincrement=True) email = Column(String(255), nullable=False, unique=True) fullname = Column(String(255), nullable=False) unit_id = Column(BigInteger, nullable=True) role_id = Column(BigInteger, nullable=True) status = Column(Integer, default=1) #status 1 is created, 2 is active, 3 is disabled created_at = Column(DateTime, default=datetime.datetime.utcnow) updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow) hashed_password = Column(String(255), nullable=True) # relationships intentionally omitted __table_args__ = (Index('ix_users_email', 'email'),) class Category(Base): __tablename__ = "category" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False, unique=True) # relationships intentionally omitted class Post(Base): __tablename__ = "posts" id = Column(BigInteger, primary_key=True, autoincrement=True) content = Column(Text, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) title = Column(String(255), nullable=False) created_by = Column(BigInteger) category_id = Column(BigInteger) status = Column(Boolean, default=True) thumbnail = Column(String(255), nullable=True) # relationships intentionally omitted class Month(Base): __tablename__ = "month" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(50), nullable=False) from_date = Column(DateTime, nullable=False) end_date = Column(DateTime, nullable=False) # relationships intentionally omitted class NAC(Base): __tablename__ = "nac" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=False) total = Column(BigInteger, default=0) installed = Column(BigInteger, default=0) ignored = Column(BigInteger, default=0) rate = Column(Float, default=0) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class SmartIR(Base): __tablename__ = "smartir" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=False) total = Column(BigInteger, default=0) installed = Column(BigInteger, default=0) new_install = Column(BigInteger, default=0) ignored = Column(BigInteger, default=0) rate = Column(Float, default=0) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class Compliance(Base): __tablename__ = "compliance" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=False) windows_key = Column(BigInteger, default=0) office = Column(BigInteger, default=0) ms17010 = Column(BigInteger, default=0) firewall = Column(BigInteger, default=0) uac = Column(BigInteger, default=0) winrar = Column(BigInteger, default=0) antivirus = Column(BigInteger, default=0) update_win = Column(BigInteger, default=0) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class LogSource(Base): __tablename__ = "logsource" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=False) log_id = Column(BigInteger) name = Column(String(255), nullable=False) description = Column(Text) is_enabled = Column(Boolean, default=True) source_type_id = Column(BigInteger) status = Column(Integer) # lưu mã 1=OK, 2=ERROR, 3=DISABLE, 4=NOT AVAILABLE message = Column(String(255)) other = Column(String(255)) file_id = Column(BigInteger, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class LogSourceComment(Base): __tablename__ = "logsource_comment" id = Column(BigInteger, primary_key=True, autoincrement=True) logsource_id = Column(BigInteger, nullable=False) user_id = Column(BigInteger, nullable=False) comment = Column(Text, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) class SourceType(Base): __tablename__ = "source_type" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False) type = Column(String(100)) # relationships intentionally omitted class Ticket(Base): __tablename__ = "ticket" id = Column(BigInteger, primary_key=True, autoincrement=True) open_count = Column(BigInteger, default=0) in_process = Column(BigInteger, default=0) completed = Column(BigInteger, default=0) unit_id = Column(BigInteger, nullable=False) month_id = Column(BigInteger, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class RootAccess(Base): __tablename__ = "root_access" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=False) number = Column(BigInteger, default=0) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class AttackStatics(Base): __tablename__ = "attack_statics" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) siem_fintech = Column(BigInteger, default=0) siem_media = Column(BigInteger, default=0) ticket = Column(BigInteger, default=0) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class SmartIRDetail(Base): __tablename__ = "smartir_detail" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=True) vnpt_ma_nhan_vien = Column(String(255), nullable=True) name = Column(String(255), nullable=True) email = Column(String(255), nullable=True) phong_ban = Column(String(255), nullable=True) ip = Column(String(255), nullable=True) pc_name = Column(String(255), nullable=True) mac = Column(String(255), nullable=True) agent_version = Column(String(255), nullable=True) last_online = Column(String(255), nullable=True) status = Column(Integer, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class NACDetail(Base): __tablename__ = "nac_detail" id = Column(BigInteger, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=True) name = Column(String(255), nullable=True) email = Column(String(255), nullable=True) status = Column(Integer, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) class ComplianceDetail(Base): __tablename__ = "compliance_detail" id = Column(BigInteger, primary_key=True, autoincrement=True) unit_id = Column(BigInteger, nullable=True) month_id = Column(BigInteger, nullable=False) vnpt_ma_nhan_vien = Column(String(255), nullable=True) name = Column(String(255), nullable=True) email = Column(String(255), nullable=True) phong_ban = Column(String(255), nullable=True) windows_key = Column(BigInteger, nullable=True) office = Column(BigInteger, nullable=True) ms17010 = Column(BigInteger, nullable=True) firewall = Column(BigInteger, nullable=True) uac = Column(BigInteger, nullable=True) winrar = Column(BigInteger, nullable=True) antivirus = Column(BigInteger, nullable=True) update_win = Column(BigInteger, nullable=True) status = Column(Integer, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) class ComplianceSmartIR(Base): __tablename__ = "compliance_smartir" id = Column(Integer, primary_key=True, autoincrement=True) month_id = Column(BigInteger, nullable=False) unit_id = Column(BigInteger, nullable=True) vnpt_ma_nhan_vien = Column(String(20), nullable=False) name = Column(String(255), nullable=False) email = Column(String(255), nullable=False) phong_ban = Column(String(255), nullable=True) ten_may_tinh = Column(String(255), nullable=True) mac = Column(String(50), nullable=True) active_windows = Column(Integer, nullable=True) bat_windows_firewall = Column(Integer, nullable=True) bat_uac = Column(Integer, nullable=True) cai_winrar_ban_moi = Column(Integer, nullable=True) bat_av_fullscan = Column(Integer, nullable=True) update_windows = Column(Integer, nullable=True) status = Column(Integer, nullable=False, default=0) created_at = Column(DateTime, default=datetime.datetime.utcnow) updated_at = Column(DateTime, default=datetime.datetime.utcnow) class MailHistory(Base): __tablename__ = "mail_history" id = Column(BigInteger, primary_key=True, autoincrement=True) post_id = Column(BigInteger) subject = Column(String(255), nullable=True) role_id = Column(BigInteger, nullable=True) content = Column(Text) status = Column(Integer, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) # relationships intentionally omitted class FileUpload(Base): __tablename__ = "file_upload" id = Column(BigInteger, primary_key=True, autoincrement=True) path = Column(String(255), nullable=False) table_name = Column(String(255), nullable=False) table_id = Column(BigInteger, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) __table_args__ = (Index('ix_fileupload_table', 'table_name', 'table_id'),) class ImportHistory(Base): __tablename__ = "import_history" id = Column(BigInteger, primary_key=True, autoincrement=True) type = Column(String(255), nullable=False) file_path = Column(String(255), nullable=False) month_id = Column(BigInteger, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) __table_args__ = (Index('ix_import_history_type_month', 'type', 'month_id'),) class MMFintech(Base): __tablename__ = "mm_fintech" id = Column(BigInteger, primary_key=True, autoincrement=True, index=True) month_id = Column(BigInteger, nullable=False, index=True) unit_id = Column(BigInteger, nullable=True, index=True) file_path = Column(String(255), nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) class ConvertHardening(Base): __tablename__ = "convert_hardening" id = Column(BigInteger, primary_key=True, autoincrement=True, index=True) filename = Column(String(255), nullable=False, index=True) user_id = Column(BigInteger, nullable=False, index=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) class SystemGroup(Base): __tablename__ = "system_group" id = Column(BigInteger, primary_key=True, index=True, autoincrement=True) name = Column(String(255), nullable=False, index=True) description = Column(String(1000), nullable=True) class System(Base): __tablename__ = "system" id = Column(BigInteger, primary_key=True, index=True, autoincrement=True) name = Column(String(255), nullable=False, index=True) url_ip = Column(String(255), nullable=True, index=True) unit_id = Column(BigInteger, nullable=True, index=True) system_group_id = Column(BigInteger, nullable=True, index=True) description = Column(String(1000), nullable=True) status = Column(Integer, nullable=True, index=True) class ManageSystem(Base): __tablename__ = "manage_system" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False, unique=True) level = Column(Integer, nullable=False) url_ip = Column(String(255), nullable=True) unit_id = Column(BigInteger, nullable=True) parent_id = Column(BigInteger, nullable=True) type = Column(Integer, nullable=True) private = Column(Boolean, default=False) priority_level = Column(Integer, nullable=True) status = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow) __table_args__ = ( Index('ix_manage_system_name', 'name'), Index('ix_manage_system_level_parent', 'level', 'parent_id'), Index('ix_manage_system_unit', 'unit_id'), ) class PentestService(Base): __tablename__ = "pentest_service" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(Text, nullable=True) type = Column(Integer, nullable=False) # 1: Đánh giá ATTT, 2: Công việc phối hợp, 3: Phối hợp xử lý, 4: Khác code = Column(String(50), nullable=False, unique=True) file_path = Column(String(255), nullable=True) description = Column(Text, nullable=True) due_date = Column(DateTime, nullable=True) unit_id = Column(BigInteger, nullable=True) status = Column(Integer, default=0) # 0: nháp, 1: tạo mới, 2: tiếp nhận, 3: đã xử lý, 4: đóng, 5: hủy user_id = Column(BigInteger, nullable=True) target_id = Column(BigInteger, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) class PentestServiceComment(Base): __tablename__ = "pentest_service_comment" id = Column(BigInteger, primary_key=True, autoincrement=True) pentest_service_id = Column(BigInteger, nullable=False) content = Column(Text, nullable=False) user_id = Column(BigInteger, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) class PentestServiceHistory(Base): __tablename__ = "pentest_service_history" id = Column(BigInteger, primary_key=True, autoincrement=True) pentest_service_id = Column(BigInteger, nullable=False) old_status = Column(Integer, nullable=True) new_status = Column(Integer, nullable=False) user_id = Column(BigInteger, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) class PentestServiceAssign(Base): __tablename__ = "pentest_service_assign" id = Column(BigInteger, primary_key=True, autoincrement=True) user_id = Column(BigInteger, nullable=True) email = Column(String(255), nullable=True) pentest_service_id = Column(BigInteger, nullable=False) class RevokedToken(Base): __tablename__ = "revoked_token" id = Column(BigInteger, primary_key=True, autoincrement=True) jti = Column(String(64), nullable=False, unique=True, index=True) user_id = Column(BigInteger, nullable=True) revoked_at = Column(DateTime, default=datetime.datetime.utcnow, nullable=False) expires_at = Column(DateTime, nullable=True) class EmailRole(Base): __tablename__ = "email_role" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False) description = Column(String(1000), nullable=True) class EmailUser(Base): __tablename__ = "email_user" id = Column(BigInteger, primary_key=True, autoincrement=True) email = Column(String(255), nullable=False) name = Column(String(255), nullable=True) role_id = Column(BigInteger, nullable=False) type = Column(Integer, nullable=False) __table_args__ = (Index('ix_email_user_role', 'role_id'),) class Document(Base): __tablename__ = "documents" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False) number_doc = Column(String(255), nullable=False) sign_date = Column(DateTime, nullable=True) level = Column(Integer, nullable=False) validate_date = Column(DateTime, nullable=True) file_path = Column(String(255), nullable=True) class SecurityIndex(Base): __tablename__ = "security_index" id = Column(BigInteger, primary_key=True, autoincrement=True, index=True) soc = Column(Integer, default=0) pentest = Column(Integer, default=0) access_policy = Column(Integer, default=0) two_fa_policy = Column(Integer, default=0) # Cannot start with digit in Python, mapped to 2fa_policy if needed config_network = Column(Integer, default=0) config_server = Column(Integer, default=0) patch_security = Column(Integer, default=0) month_id = Column(BigInteger, nullable=False, index=True) unit_id = Column(BigInteger, nullable=False, index=True) description = Column(Text, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) class SocTarget(Base): __tablename__ = "soc_target" id = Column(BigInteger, primary_key=True, autoincrement=True) unit_id = Column(BigInteger, nullable=False) priority = Column(Integer, nullable=False) # 1=critical → 5=low name = Column(String(255), nullable=False) code = Column(String(100), unique=True) status = Column(Integer, nullable=False, default=0) # 0:Open, 1:In Progress, 2:Resolved, 3:Closed deadline = Column(DateTime) description = Column(Text, nullable=False) system_id = Column(BigInteger, nullable=True) system_type = Column(Integer, nullable=True) source_ip = Column(Text, nullable=True) destination_ip = Column(Text, nullable=True) soc_target_type_id = Column(BigInteger, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow) created_by = Column(BigInteger, nullable=True) class SocTargetType(Base): __tablename__ = "soc_target_type" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False) class TicketRelated(Base): __tablename__ = "ticket_related" id = Column(BigInteger, primary_key=True, autoincrement=True) soc_target_id = Column(BigInteger, nullable=False) related_soc_target_id = Column(BigInteger, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) class SocTargetAssign(Base): __tablename__ = "soc_target_assign" id = Column(BigInteger, primary_key=True, autoincrement=True) target_id = Column(BigInteger, nullable=False) user_id = Column(BigInteger, nullable=True) email = Column(String(255), nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) class SocTargetHistory(Base): __tablename__ = "soc_target_history" id = Column(BigInteger, primary_key=True, autoincrement=True) target_id = Column(BigInteger, nullable=False) field_name = Column(String(100), nullable=False) old_value = Column(Text) new_value = Column(Text) changed_by = Column(BigInteger, nullable=True) changed_at = Column(DateTime, default=datetime.datetime.utcnow) class SocTargetComment(Base): __tablename__ = "soc_target_comment" id = Column(BigInteger, primary_key=True, autoincrement=True) target_id = Column(BigInteger, nullable=False) user_id = Column(BigInteger, nullable=True) email = Column(String(255), nullable=True) content = Column(Text, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow) class SocTargetAttachment(Base): __tablename__ = "soc_target_attachment" id = Column(BigInteger, primary_key=True, autoincrement=True) target_id = Column(BigInteger, nullable=False) file_name = Column(String(255), nullable=False) file_path = Column(String(500), nullable=False) file_size = Column(BigInteger, nullable=True) file_type = Column(String(100), nullable=True) uploaded_by = Column(BigInteger, nullable=True) created_at = Column(DateTime, default=datetime.datetime.utcnow) class PostComment(Base): __tablename__ = "post_comment" id = Column(BigInteger, primary_key=True, autoincrement=True) post_id = Column(BigInteger, nullable=False) user_id = Column(BigInteger, nullable=False) content = Column(Text, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) updated_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)