# [DEF:backend.src.models.config:Module] # # @COMPLEXITY: 5 # @SEMANTICS: database, config, settings, sqlalchemy, notification # @PURPOSE: Defines SQLAlchemy persistence models for application and notification configuration records. # @LAYER: Domain # @RELATION: [DEPENDS_ON] ->[sqlalchemy] # @RELATION: [DEPENDS_ON] ->[backend.src.models.mapping:Base] # @INVARIANT: Configuration payload and notification credentials must remain persisted as non-null JSON documents. from sqlalchemy import Column, String, DateTime, JSON, Boolean from sqlalchemy.sql import func from .mapping import Base # [DEF:AppConfigRecord:Class] # @PURPOSE: Stores persisted application configuration as a single authoritative record model. # @PRE: SQLAlchemy declarative Base is initialized and table metadata registration is active. # @POST: ORM table 'app_configurations' exposes id, payload, and updated_at fields with declared nullability/default semantics. # @SIDE_EFFECT: Registers ORM mapping metadata during module import. # @DATA_CONTRACT: Input -> persistence row {id:str, payload:json, updated_at:datetime}; Output -> AppConfigRecord ORM entity. class AppConfigRecord(Base): __tablename__ = "app_configurations" id = Column(String, primary_key=True) payload = Column(JSON, nullable=False) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) # [/DEF:AppConfigRecord:Class] # [DEF:NotificationConfig:Class] # @PURPOSE: Stores persisted provider-level notification configuration and encrypted credentials metadata. # @PRE: SQLAlchemy declarative Base is initialized and uuid generation is available at instance creation time. # @POST: ORM table 'notification_configs' exposes id, type, name, credentials, is_active, created_at, updated_at fields with declared constraints/defaults. # @SIDE_EFFECT: Registers ORM mapping metadata during module import; may generate UUID values for new entity instances. # @DATA_CONTRACT: Input -> persistence row {id:str, type:str, name:str, credentials:json, is_active:bool, created_at:datetime, updated_at:datetime}; Output -> NotificationConfig ORM entity. class NotificationConfig(Base): __tablename__ = "notification_configs" id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4())) type = Column(String, nullable=False) # SMTP, SLACK, TELEGRAM name = Column(String, nullable=False) credentials = Column(JSON, nullable=False) # Encrypted connection details is_active = Column(Boolean, default=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) # [/DEF:NotificationConfig:Class] import uuid # [/DEF:backend.src.models.config:Module]