"""
SQLAlchemy models for FGI system
"""
from sqlalchemy import Column, String, Integer, Float, DateTime, JSON, ForeignKey, Text
from sqlalchemy.orm import declarative_base
from sqlalchemy.sql import func
from datetime import datetime
Base = declarative_base()
class Persona(Base):
"""페르소나 테이블"""
__tablename__ = 'personas'
id = Column(String, primary_key=True)
user_id = Column(String, nullable=True)
freshness_score = Column(Float, default=0.0, nullable=False)
last_updated = Column(DateTime, default=func.now(), onupdate=func.now())
created_at = Column(DateTime, default=func.now())
# 기본 프로필
age_range = Column(String, nullable=True)
gender = Column(String, nullable=True)
location = Column(String, nullable=True)
occupation_category = Column(String, nullable=True)
income_range = Column(String, nullable=True)
# 심층 페르소나 프로필
interests = Column(JSON, nullable=True)
personality_traits = Column(JSON, nullable=True)
values = Column(JSON, nullable=True)
lifestyle = Column(Text, nullable=True)
# MBTI 성향 분석
mbti_type = Column(String, nullable=True) # 예: "INTJ", "ENFP"
mbti_dimensions = Column(JSON, nullable=True) # 각 차원별 설명
mbti_confidence = Column(Integer, nullable=True) # 0-100
class FGISurvey(Base):
"""FGI 설문 테이블"""
__tablename__ = 'fgi_surveys'
id = Column(String, primary_key=True)
category = Column(String, nullable=False)
questions = Column(JSON, nullable=False)
created_at = Column(DateTime, default=func.now())
news_source = Column(JSON, nullable=True)
class FGIResponse(Base):
"""FGI 응답 테이블"""
__tablename__ = 'fgi_responses'
id = Column(String, primary_key=True)
persona_id = Column(String, ForeignKey('personas.id'), nullable=False)
survey_id = Column(String, ForeignKey('fgi_surveys.id'), nullable=False)
responses = Column(JSON, nullable=False)
submitted_at = Column(DateTime, default=func.now())