solorpower_server/app/schemas/plant.py

51 lines
1.6 KiB
Python

"""
발전소 관련 Pydantic 스키마
- 요청/응답 데이터 검증
"""
from pydantic import BaseModel, Field
from typing import Optional, List
from datetime import datetime
class PlantBase(BaseModel):
"""발전소 기본 정보 스키마"""
model_config = {"from_attributes": True}
id: str # DB에서 문자열 형식 사용
company_id: str # DB에서 문자열 형식 사용
name: str
capacity: Optional[float] = Field(None, description="발전 용량 (kW)")
location: Optional[str] = Field(None, description="발전소 위치")
created_at: Optional[datetime] = None
class SolarLogBase(BaseModel):
"""발전 로그 기본 정보 스키마"""
model_config = {"from_attributes": True}
id: int
plant_id: str # DB에서 'nrems-01' 같은 문자열 형식 사용
created_at: datetime # DB 컬럼명과 일치
power_output: Optional[float] = Field(None, description="현재 발전량 (kW)")
daily_generation: Optional[float] = Field(None, description="일일 발전량 (kWh)")
total_generation: Optional[float] = Field(None, description="누적 발전량 (kWh)")
class PlantWithLatestLog(PlantBase):
"""발전소 정보 + 최신 발전 현황"""
latest_log: Optional[SolarLogBase] = Field(None, description="최신 발전 로그")
class PlantResponse(BaseModel):
"""단일 발전소 응답 스키마"""
status: str = "success"
data: PlantWithLatestLog
class PlantsListResponse(BaseModel):
"""발전소 목록 응답 스키마"""
status: str = "success"
data: List[PlantWithLatestLog]
total_count: int = Field(description="총 발전소 수")