Base code

This commit is contained in:
Kunthawat Greethong
2026-01-08 22:39:53 +07:00
parent 697115c61a
commit c35fa52117
2169 changed files with 626670 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, JSON, ForeignKey
from sqlalchemy.orm import relationship
from datetime import datetime
# Import the same Base from enhanced_strategy_models
from models.enhanced_strategy_models import Base
class StrategyMonitoringPlan(Base):
"""Model for storing strategy monitoring plans"""
__tablename__ = "strategy_monitoring_plans"
id = Column(Integer, primary_key=True, index=True)
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
plan_data = Column(JSON, nullable=False) # Store the complete monitoring plan
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationship to strategy
strategy = relationship("EnhancedContentStrategy", back_populates="monitoring_plans")
class MonitoringTask(Base):
"""Model for storing individual monitoring tasks"""
__tablename__ = "monitoring_tasks"
id = Column(Integer, primary_key=True, index=True)
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
component_name = Column(String(100), nullable=False)
task_title = Column(String(200), nullable=False)
task_description = Column(Text, nullable=False)
assignee = Column(String(50), nullable=False) # 'ALwrity' or 'Human'
frequency = Column(String(50), nullable=False) # 'Daily', 'Weekly', 'Monthly', 'Quarterly'
metric = Column(String(100), nullable=False)
measurement_method = Column(Text, nullable=False)
success_criteria = Column(Text, nullable=False)
alert_threshold = Column(Text, nullable=False)
status = Column(String(50), default='pending') # 'pending', 'active', 'completed', 'failed'
last_executed = Column(DateTime, nullable=True)
next_execution = Column(DateTime, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
# Relationships
strategy = relationship("EnhancedContentStrategy", back_populates="monitoring_tasks")
execution_logs = relationship("TaskExecutionLog", back_populates="task", cascade="all, delete-orphan")
class TaskExecutionLog(Base):
"""Model for storing task execution logs"""
__tablename__ = "task_execution_logs"
id = Column(Integer, primary_key=True, index=True)
task_id = Column(Integer, ForeignKey("monitoring_tasks.id"), nullable=False)
user_id = Column(Integer, nullable=True) # User ID for user isolation (nullable for backward compatibility)
execution_date = Column(DateTime, default=datetime.utcnow)
status = Column(String(50), nullable=False) # 'success', 'failed', 'skipped', 'running'
result_data = Column(JSON, nullable=True)
error_message = Column(Text, nullable=True)
execution_time_ms = Column(Integer, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
# Relationship to monitoring task
task = relationship("MonitoringTask", back_populates="execution_logs")
class StrategyPerformanceMetrics(Base):
"""Model for storing strategy performance metrics"""
__tablename__ = "strategy_performance_metrics"
id = Column(Integer, primary_key=True, index=True)
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
user_id = Column(Integer, nullable=False)
metric_date = Column(DateTime, default=datetime.utcnow)
traffic_growth_percentage = Column(Integer, nullable=True)
engagement_rate_percentage = Column(Integer, nullable=True)
conversion_rate_percentage = Column(Integer, nullable=True)
roi_ratio = Column(Integer, nullable=True)
strategy_adoption_rate = Column(Integer, nullable=True)
content_quality_score = Column(Integer, nullable=True)
competitive_position_rank = Column(Integer, nullable=True)
audience_growth_percentage = Column(Integer, nullable=True)
data_source = Column(String(100), nullable=True)
confidence_score = Column(Integer, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationship to strategy
strategy = relationship("EnhancedContentStrategy", back_populates="performance_metrics")
class StrategyActivationStatus(Base):
"""Model for storing strategy activation status"""
__tablename__ = "strategy_activation_status"
id = Column(Integer, primary_key=True, index=True)
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
user_id = Column(Integer, nullable=False)
activation_date = Column(DateTime, default=datetime.utcnow)
status = Column(String(50), default='active') # 'active', 'inactive', 'paused'
performance_score = Column(Integer, nullable=True)
last_updated = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationship to strategy
strategy = relationship("EnhancedContentStrategy", back_populates="activation_status")