53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
# 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
|
|
}
|
|
} |