bugbounty_gpt/db/models.py (23 lines of code) (raw):

from enum import Enum from bugbounty_gpt.env import VALID_CATEGORIES from sqlalchemy import Column, DateTime, Integer, String, Text, func, Enum as SqlEnum from sqlalchemy.orm import declarative_base Base = declarative_base() def _sanitize_category_name(category_name): """ Sanitizes the category name by replacing spaces with underscores and converting to uppercase. :param category_name: The category name to be sanitized. :return: Sanitized category name. """ return category_name.replace(" ", "_").upper() def _create_enum_members(categories): """ Creates enum members from the given categories. :param categories: List of category names. :return: Dictionary with sanitized category names as keys and original category names as values. """ return {_sanitize_category_name(category): category for category in categories} ReportCategory = Enum('ReportCategory', _create_enum_members(VALID_CATEGORIES)) class SubmissionState(Enum): NEW = 1 UPDATED_OUT_OF_BAND = 2 UPDATED = 3 class Submission(Base): """ Defines the Submission database table. Attributes: submission_id: Unique ID of the submission. user_id: ID of the user who created the submission. reasoning: Reasoning text for the submission. classification: Classification of the report using the ReportCategory enum. submission_state: State of the submission using the SubmissionState enum. created_at: Timestamp of submission creation. updated_at: Timestamp of the last update to the submission. """ __tablename__ = "submission" submission_id = Column(String(100), primary_key=True) user_id = Column(String(100)) reasoning = Column(Text) classification = Column(SqlEnum(ReportCategory)) submission_state = Column(SqlEnum(SubmissionState)) created_at = Column(DateTime, server_default=func.now()) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())