feat : initial commit

This commit is contained in:
2025-06-20 05:51:38 +00:00
commit 00eae37abc
26 changed files with 924 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
# app/models/__init__.py
"""
HealthSync Motivator Batch 모델 패키지
"""
from .user import User
from .goal import UserMissionGoal, MissionCompletionHistory
from .chat_message import ChatMessage
__all__ = ["User", "UserMissionGoal", "MissionCompletionHistory", "ChatMessage"]
+28
View File
@@ -0,0 +1,28 @@
# app/models/chat_message.py
"""
HealthSync AI 채팅 메시지 모델
"""
from pydantic import BaseModel, Field
from datetime import datetime
from typing import Optional
from enum import Enum
class MessageType(str, Enum):
"""메시지 타입"""
CONSULTATION = "consultation" # 상담
CELEBRATION = "celebration" # 축하
ENCOURAGEMENT = "encouragement" # 독려
class ChatMessage(BaseModel):
"""채팅 메시지 모델"""
message_id: Optional[int] = Field(None, description="메시지 ID")
member_serial_number: int = Field(..., description="회원 일련번호")
message_type: str = Field(..., max_length=20, description="메시지 타입")
message_content: Optional[str] = Field(None, description="메시지 내용")
response_content: Optional[str] = Field(None, description="AI 응답 내용")
created_at: datetime = Field(default_factory=datetime.now, description="생성일시")
class Config:
json_encoders = {
datetime: lambda v: v.isoformat()
}
+40
View File
@@ -0,0 +1,40 @@
# 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()
}
+24
View File
@@ -0,0 +1,24 @@
# app/models/user.py
"""
HealthSync Motivator Batch 사용자 모델 (user_service.user)
"""
from pydantic import BaseModel, Field
from datetime import datetime, date
from typing import Optional
class User(BaseModel):
"""사용자 모델 (user_service.user 테이블)"""
member_serial_number: int = Field(..., description="회원 일련번호")
google_id: str = Field(..., max_length=255, description="구글 ID")
name: str = Field(..., max_length=100, description="사용자 이름")
birth_date: date = Field(..., description="생년월일")
occupation: Optional[str] = Field(None, max_length=50, description="직업")
created_at: datetime = Field(..., description="생성일시")
updated_at: datetime = Field(..., description="수정일시")
last_login_at: Optional[datetime] = Field(None, description="마지막 로그인")
class Config:
json_encoders = {
datetime: lambda v: v.isoformat(),
date: lambda v: v.isoformat()
}