40 lines
1.8 KiB
Python
40 lines
1.8 KiB
Python
# app/models/goal.py
|
|
"""
|
|
HealthSync Motivator Batch 목표 관련 모델 (goal_service)
|
|
"""
|
|
from pydantic import BaseModel, Field
|
|
from datetime import datetime, date
|
|
from typing import Optional
|
|
|
|
class UserMissionGoal(BaseModel):
|
|
"""사용자 미션 목표 (goal_service.user_mission_goal 테이블)"""
|
|
mission_id: int = Field(..., description="미션 ID")
|
|
member_serial_number: int = Field(..., description="회원 일련번호")
|
|
performance_date: date = Field(..., description="수행 날짜")
|
|
mission_name: str = Field(..., max_length=100, description="미션명")
|
|
mission_description: Optional[str] = Field(None, max_length=200, description="미션 설명")
|
|
daily_target_count: int = Field(..., description="일일 목표 횟수")
|
|
is_active: bool = Field(..., description="활성 상태")
|
|
created_at: datetime = Field(..., description="생성일시")
|
|
|
|
class Config:
|
|
json_encoders = {
|
|
datetime: lambda v: v.isoformat(),
|
|
date: lambda v: v.isoformat()
|
|
}
|
|
|
|
class MissionCompletionHistory(BaseModel):
|
|
"""미션 완료 이력 (goal_service.mission_completion_history 테이블)"""
|
|
completion_id: int = Field(..., description="완료 ID")
|
|
mission_id: int = Field(..., description="미션 ID")
|
|
member_serial_number: int = Field(..., description="회원 일련번호")
|
|
completion_date: date = Field(..., description="완료 날짜")
|
|
daily_target_count: int = Field(..., description="일일 목표 횟수")
|
|
daily_completed_count: int = Field(..., description="일일 완료 횟수")
|
|
created_at: datetime = Field(..., description="생성일시")
|
|
|
|
class Config:
|
|
json_encoders = {
|
|
datetime: lambda v: v.isoformat(),
|
|
date: lambda v: v.isoformat()
|
|
} |