83 lines
1.9 KiB
Python
83 lines
1.9 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from app.schemas.tag import TagOut
|
|
from app.schemas.user import UserInfo
|
|
|
|
|
|
class SpotCreate(BaseModel):
|
|
title: str
|
|
city: str
|
|
longitude: float
|
|
latitude: float
|
|
description: str | None = None
|
|
transport: str | None = None
|
|
best_time: str | None = None
|
|
difficulty: str | None = None
|
|
is_free: bool = True
|
|
price_min: float | None = None
|
|
price_max: float | None = None
|
|
image_urls: list[str] = []
|
|
tag_ids: list[int] = []
|
|
|
|
|
|
class SpotUpdate(BaseModel):
|
|
title: str | None = None
|
|
city: str | None = None
|
|
longitude: float | None = None
|
|
latitude: float | None = None
|
|
description: str | None = None
|
|
transport: str | None = None
|
|
best_time: str | None = None
|
|
difficulty: str | None = None
|
|
is_free: bool | None = None
|
|
price_min: float | None = None
|
|
price_max: float | None = None
|
|
tag_ids: list[int] | None = None
|
|
|
|
|
|
class SpotImageOut(BaseModel):
|
|
id: int
|
|
image_url: str
|
|
is_cover: bool
|
|
sort_order: int
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class SpotBrief(BaseModel):
|
|
id: int
|
|
title: str
|
|
city: str
|
|
longitude: float | None = None
|
|
latitude: float | None = None
|
|
cover_image_url: str | None = None
|
|
audit_status: str
|
|
avg_rating: float | None = None
|
|
favorite_count: int = 0
|
|
is_free: bool = True
|
|
price_min: float | None = None
|
|
price_max: float | None = None
|
|
created_at: datetime | None = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class SpotDetail(SpotBrief):
|
|
description: str | None = None
|
|
transport: str | None = None
|
|
best_time: str | None = None
|
|
difficulty: str | None = None
|
|
creator: UserInfo | None = None
|
|
images: list[SpotImageOut] = []
|
|
tags: list[TagOut] = []
|
|
rating_count: int = 0
|
|
is_favorited: bool = False
|
|
|
|
|
|
class SpotImageCreate(BaseModel):
|
|
image_url: str
|
|
is_cover: bool = False
|
|
sort_order: int = 0
|