Files
medihome-dictionary-be/app/src/models/post.py

172 lines
6.9 KiB
Python
Raw Normal View History

2022-07-26 13:46:19 +07:00
import json
from bson import ObjectId
from pydantic import BaseModel, Field
from typing import List, Optional, Union
class PyObjectId(ObjectId):
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
if not ObjectId.is_valid(v):
raise ValueError("Invalid objectid")
return ObjectId(v)
@classmethod
def __modify_schema__(cls, field_schema):
field_schema.update(type="string")
class DataPost(BaseModel):
name: str
level: str
content: List[str]
class DataSmallPost(BaseModel):
name: str
level: int
point: int
class Point(BaseModel):
less10 : Optional[int] = 0
form10to20: Optional[int] = 0
form20to30: Optional[int] = 0
form30to40: Optional[int] = 0
form40to50: Optional[int] = 0
form50to60: Optional[int] = 0
bigger60: Optional[int] = 0
total: Optional[int] = 0
class PostModel(BaseModel):
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
original_post: Union[str, None] = None
translation_post: Union[str, None] = None
link : Union[str, None] = None
is_active : str
created_at: Optional[str] = None
specialist: str
summary: str
data : List[DataPost]
point : Point
class Config:
orm_mode = True
case_sensitive = True
allow_population_by_field_name = True
arbitrary_types_allowed = True
json_encoders = {ObjectId: str}
schema_extra = {
"example": {
"original_post": "Joh111",
"translation_post": "Doe11111",
"link": "simple mortal111",
"is_active": "false",
"created_at": "07/20/22 02: 26: 54",
"specialist": "",
"summary": "",
"data": [
{
"name": "abc1",
"level": "user",
"content": [
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh"
]
},
{
"name": "abc2",
"level": "user",
"content": [
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh"
]
},
{
"name": "abc",
"level": "user",
"content": [
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh"
]
},
{
"name": "abc3",
"level": "user",
"content": [
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh",
"Hoàng Anh Hoàng Anh Hoàng Anh Hoàng AnhHoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh Hoàng Anh"
]
}
],
"point": {
"less10": 0,
"form10to20": 0,
"form20to30": 0,
"form30to40": 0,
"form40to50": 0,
"form50to60": 0,
"bigger60": 0,
"total": 0
}
}
}
class UpdatePostModel(BaseModel):
original_post: Union[str, None] = None
translation_post: Union[str, None] = None
link : Union[str, None] = None
is_active : str
created_at: Optional[str] = None
specialist: str
summary: str
data : List[DataPost]
point : Point
class Config:
arbitrary_types_allowed = True
json_encoders = {ObjectId: str}
schema_extra = {
"example": {
"original_post": "John",
"translation_post": "Doe",
"link": "simple mortal",
"is_active": "false",
"created_at": "datetime",
"specialist": "",
"summary": "",
"data": ""
}
}
class ShowPostModel(BaseModel):
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
original_post: Optional[str]
translation_post: Optional[str]
link: Optional[str]
is_active: Optional[str]
specialist: Optional[str]
summary: Optional[str]
data : List[DataSmallPost]
point : Point
class Config:
arbitrary_types_allowed = True
json_encoders = {ObjectId: str}
schema_extra = {
"example": {
"original_post": "John",
"translation_post": "Doe",
"link": "simple mortal",
"is_active": "false",
"created_at": "datetime",
"specialist": "",
"summary": "",
}
}