Files
web-page-backend/packs-lab/app/models.py
gahusb dc482b32e4 feat(packs-lab): POST /api/packs/admin/mint-token 라우트 + 통합 테스트
MintTokenRequest/Response 스키마 추가, mint_token 라우트 구현 (HMAC 인증 + 확장자 검증 + JTI 발급), 테스트 3건 추가.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 01:27:43 +09:00

54 lines
1.3 KiB
Python

"""Pydantic schemas for packs API."""
from datetime import datetime
from typing import Literal
from pydantic import BaseModel, Field
PackTier = Literal["starter", "pro", "master"]
class SignLinkRequest(BaseModel):
"""Vercel → backend: 사용자 다운로드 링크 발급 요청."""
file_path: str = Field(..., description="NAS 절대 경로 — pack_files.file_path 그대로")
expires_in_seconds: int = Field(default=14400, description="공유 링크 만료 (기본 4시간)")
class SignLinkResponse(BaseModel):
url: str
expires_at: datetime
class UploadResponse(BaseModel):
file_id: str # uuid
file_path: str
filename: str
size_bytes: int
min_tier: PackTier
label: str
uploaded_at: datetime
class PackFileItem(BaseModel):
id: str
min_tier: PackTier
label: str
file_path: str
filename: str
size_bytes: int
sort_order: int
uploaded_at: datetime
class MintTokenRequest(BaseModel):
"""Vercel → backend: admin upload 토큰 발급 요청."""
tier: PackTier
label: str = Field(..., max_length=200)
filename: str = Field(..., max_length=255)
size_bytes: int = Field(..., gt=0, le=5 * 1024 * 1024 * 1024)
class MintTokenResponse(BaseModel):
token: str
expires_at: datetime
jti: str