# app/dto/response/similar_mission_news_response.py """ HealthSync AI 유사 사용자 미션 완료 소식 응답 DTO """ from pydantic import BaseModel, Field from datetime import datetime from typing import List class MissionNewsItem(BaseModel): """개별 미션 소식 항목""" message: str = Field(..., description="미션 완료 소식 메시지") mission_category: str = Field(..., description="미션 카테고리") similarity_score: float = Field(..., description="유사도 점수 (0-1)") completed_at: datetime = Field(..., description="완료 시간") class Config: json_encoders = { datetime: lambda v: v.isoformat() } class SimilarMissionNewsResponse(BaseModel): """유사 사용자 미션 완료 소식 응답 DTO""" similar_mission_news: List[MissionNewsItem] = Field(..., description="유사 사용자 미션 소식 목록") total_count: int = Field(..., description="전체 소식 수") class Config: json_schema_extra = { "example": { "similar_mission_news": [ { "message": "IT직군 김OO님이 물마시기 미션을 완료했어요! 💧", "mission_category": "hydration", "similarity_score": 0.87, "completed_at": "2025-06-17T10:30:00.000Z" }, { "message": "23세 혈당높은 홍OO님이 산책 3회를 완료했어요! 🚶‍♀️", "mission_category": "exercise", "similarity_score": 0.82, "completed_at": "2025-06-17T09:15:00.000Z" }, { "message": "사무직 박OO님이 스트레칭 미션을 달성했어요! 🧘‍♂️", "mission_category": "stretching", "similarity_score": 0.79, "completed_at": "2025-06-17T08:45:00.000Z" } ], "total_count": 3 } }