172 lines
6.9 KiB
Python
172 lines
6.9 KiB
Python
|
|
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": "",
|
||
|
|
}
|
||
|
|
}
|