45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field, validator
|
|
|
|
|
|
class ReviewBase(BaseModel):
|
|
product_id: str
|
|
rating: int = Field(..., ge=1, le=5)
|
|
title: str | None = None
|
|
comment: str | None = None
|
|
|
|
class ReviewCreate(ReviewBase):
|
|
@validator('rating')
|
|
def rating_must_be_valid(cls, v):
|
|
if v < 1 or v > 5:
|
|
raise ValueError('Rating must be between 1 and 5')
|
|
return v
|
|
|
|
class ReviewUpdate(BaseModel):
|
|
rating: int | None = Field(None, ge=1, le=5)
|
|
title: str | None = None
|
|
comment: str | None = None
|
|
is_approved: bool | None = None
|
|
|
|
@validator('rating')
|
|
def rating_must_be_valid(cls, v):
|
|
if v is not None and (v < 1 or v > 5):
|
|
raise ValueError('Rating must be between 1 and 5')
|
|
return v
|
|
|
|
class ReviewInDBBase(ReviewBase):
|
|
id: str
|
|
user_id: str
|
|
is_verified_purchase: bool
|
|
is_approved: bool
|
|
created_at: datetime
|
|
updated_at: datetime | None = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class Review(ReviewInDBBase):
|
|
user_name: str | None = None
|
|
product_name: str | None = None
|