feat : initial commit
This commit is contained in:
@@ -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"]
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user