"""
Persona freshness checking tool
"""
from datetime import datetime
from ...db.database import get_session
from ...db.models import Persona
def check_freshness(persona_id: str):
"""
페르소나의 현재 데이터 가치(신선도) 확인
신선도는 시간에 따라 감소 (하루에 -3점)
:param persona_id: 페르소나 ID
:return: persona_id, freshness_score, grade, last_updated, days_since_update, data_value
"""
try:
with get_session() as session:
persona = session.query(Persona).filter_by(id=persona_id).first()
if not persona:
return {
"error": f"페르소나 '{persona_id}'를 찾을 수 없습니다.",
"persona_id": persona_id,
"exists": False
}
# 마지막 업데이트 이후 경과 일수 계산
now = datetime.now()
days_passed = (now - persona.last_updated).days if persona.last_updated else 0
# 신선도 계산 (하루에 -3점, 최소 0점)
decay_rate = 3
last_score = persona.freshness_score
current_score = max(0, last_score - (days_passed * decay_rate))
# 데이터 가치 등급 계산
if current_score >= 500:
grade = "SS급"
value_desc = "완벽한 데이터 - 프리미엄 판매"
needs_update = False
elif current_score >= 300:
grade = "S급"
value_desc = "최고 가치 데이터 - 고가 판매"
needs_update = False
elif current_score >= 200:
grade = "A급"
value_desc = "고가치 데이터 - 판매 가능"
needs_update = False
elif current_score >= 100:
grade = "B급"
value_desc = "중간 가치 데이터 - 부분 활용"
needs_update = False
elif current_score >= 50:
grade = "C급"
value_desc = "기본 데이터 - 보완 필요"
needs_update = True
else:
grade = "D급"
value_desc = "불완전 데이터 - 파악 부족"
needs_update = True
estimated_questions = int(current_score / 10)
return {
"persona_id": persona_id,
"freshness_score": current_score,
"stored_score": last_score,
"grade": grade,
"estimated_questions": estimated_questions,
"value_description": value_desc,
"last_updated": persona.last_updated.isoformat() if persona.last_updated else None,
"days_since_update": days_passed,
"decay_amount": days_passed * decay_rate,
"needs_update": needs_update,
"recommendation": "계속 설문에 참여해서 데이터 가치를 높이세요!" if needs_update else "훌륭한 데이터입니다! 더 높은 등급에 도전하세요!",
"message": f"데이터 가치: {current_score:.0f}점 ({grade})"
}
except Exception as e:
return {"error": f"신선도 확인 중 오류 발생: {str(e)}"}