Files
web-page-backend/portfolio/app/models.py
gahusb c6366ad238 feat(portfolio): 백엔드 서비스 + 인프라 설정
- FastAPI 앱: DB(5테이블), Pydantic 모델, 토큰 인증, 전체 API 라우트
- Docker Compose: portfolio 서비스 (포트 18850)
- Nginx: /api/profile/ → portfolio:8000
- 배포 스크립트: portfolio 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 14:33:34 +09:00

91 lines
2.1 KiB
Python

from typing import Optional, List
from pydantic import BaseModel
class ProfileUpdate(BaseModel):
name: Optional[str] = None
name_en: Optional[str] = None
role: Optional[str] = None
role_en: Optional[str] = None
email: Optional[str] = None
phone: Optional[str] = None
github_url: Optional[str] = None
blog_url: Optional[str] = None
photo_url: Optional[str] = None
bio: Optional[str] = None
class CareerCreate(BaseModel):
category: str = "company"
organization: str = ""
role: str = ""
description: str = ""
start_date: str = ""
end_date: str = ""
sort_order: int = 0
class CareerUpdate(BaseModel):
category: Optional[str] = None
organization: Optional[str] = None
role: Optional[str] = None
description: Optional[str] = None
start_date: Optional[str] = None
end_date: Optional[str] = None
sort_order: Optional[int] = None
class ProjectCreate(BaseModel):
category: str = "personal"
title: str = ""
description: str = ""
tech_stack: List[str] = []
role: str = ""
start_date: str = ""
end_date: str = ""
url: str = ""
image_url: str = ""
sort_order: int = 0
class ProjectUpdate(BaseModel):
category: Optional[str] = None
title: Optional[str] = None
description: Optional[str] = None
tech_stack: Optional[List[str]] = None
role: Optional[str] = None
start_date: Optional[str] = None
end_date: Optional[str] = None
url: Optional[str] = None
image_url: Optional[str] = None
sort_order: Optional[int] = None
class SkillCreate(BaseModel):
category: str = "language"
name: str = ""
level: int = 3
sort_order: int = 0
class SkillUpdate(BaseModel):
category: Optional[str] = None
name: Optional[str] = None
level: Optional[int] = None
sort_order: Optional[int] = None
class IntroCreate(BaseModel):
title: str = ""
content: str = ""
is_main: int = 0
class IntroUpdate(BaseModel):
title: Optional[str] = None
content: Optional[str] = None
class AuthRequest(BaseModel):
password: str