initial commit
This commit is contained in:
96
apps/dict/controllers/fragment.py
Normal file
96
apps/dict/controllers/fragment.py
Normal file
@@ -0,0 +1,96 @@
|
||||
from typing import List,Optional
|
||||
from ninja_extra import api_controller, ControllerBase, route
|
||||
from ninja import Schema, Field, Query, ModelSchema
|
||||
from ninja.errors import HttpError
|
||||
from ninja_jwt.authentication import JWTAuth
|
||||
from ninja_extra.permissions import IsAuthenticated
|
||||
from pydantic import model_validator
|
||||
# 小工具函数
|
||||
from utils.smallTools.interfaceTools import model_retrieve
|
||||
from ninja.pagination import paginate
|
||||
from utils.chen_pagination import MyPagination
|
||||
from utils.chen_crud import updateWithoutRequestParam, multi_delete, createWithOutRequestParam
|
||||
# ORM模型
|
||||
from apps.dict.models import Fragment
|
||||
|
||||
# Schemas
|
||||
## 查询fragment的输入
|
||||
class FragementListSchema(Schema):
|
||||
name: Optional[str] = None # 片段名称
|
||||
is_main: Optional[bool] = None # 是否替换磁盘的片段
|
||||
project_id: int = Field(None, alias='projectId')
|
||||
|
||||
## 查询结果
|
||||
class FragmentOutSchema(ModelSchema):
|
||||
class Meta:
|
||||
model = Fragment
|
||||
fields = ['id', 'name', 'project', 'is_main', 'content']
|
||||
|
||||
## 新增
|
||||
class FragmentAddSchema(Schema):
|
||||
name: str # 必填
|
||||
is_main: bool = False # 后端直接设置为False
|
||||
project_id: int = Field(None, alias='projectId')
|
||||
content: str = ""
|
||||
|
||||
# username判重
|
||||
@model_validator(mode='after')
|
||||
def unique_name(self):
|
||||
if Fragment.objects.filter(name=self.name, project_id=self.project_id).exists():
|
||||
raise HttpError(400, "文档片段名称重复")
|
||||
return self
|
||||
|
||||
## 更新文档片段
|
||||
class FragmentUpdateSchema(Schema):
|
||||
name: Optional[str] = None
|
||||
is_main: Optional[bool] = None
|
||||
project_id: int = Field(None, alias='projectId')
|
||||
content: str = Field(None, alias='content')
|
||||
|
||||
def validate_unique_update_fragName(self, id: int):
|
||||
frag_filters = Fragment.objects.filter(name=self.name)
|
||||
if len(frag_filters) > 1:
|
||||
raise HttpError(400, "文档片段名称重复")
|
||||
elif len(frag_filters) == 1:
|
||||
if frag_filters[0].id == id:
|
||||
return
|
||||
else:
|
||||
raise HttpError(400, "文档片段名称重复")
|
||||
else:
|
||||
return
|
||||
|
||||
# 删除schema
|
||||
class FragmentDeleteSchema(Schema):
|
||||
ids: List[int]
|
||||
|
||||
# 全局静态变量
|
||||
PIC_URL_PREFIX = "/uploads/"
|
||||
|
||||
# Controller
|
||||
@api_controller("/system/userField", tags=['文档片段'], auth=JWTAuth(), permissions=[IsAuthenticated])
|
||||
class UserFiledController(ControllerBase):
|
||||
@route.get("/getFragment", response=List[FragmentOutSchema], url_name='fragment-list')
|
||||
@paginate(MyPagination)
|
||||
def get_fragement(self, condition: Query[FragementListSchema]):
|
||||
fragment_qs = Fragment.objects.filter(project_id=condition.project_id)
|
||||
res_qs = model_retrieve(condition, fragment_qs, ['project_id', 'is_main'])
|
||||
res_qs = res_qs.filter(project_id=condition.project_id)
|
||||
return res_qs
|
||||
|
||||
@route.post("/add", url_name='fragment-add', response=FragmentOutSchema)
|
||||
def add_fragement(self, data: FragmentAddSchema):
|
||||
return createWithOutRequestParam(data, Fragment)
|
||||
|
||||
@route.delete("/delete", url_name="fragment-delete")
|
||||
def delete_fragment(self, data: FragmentDeleteSchema):
|
||||
try:
|
||||
multi_delete(data.ids, Fragment)
|
||||
except Exception:
|
||||
raise HttpError(500, "删除失败")
|
||||
|
||||
@route.put("/update/{int:id}", url_name='fragment-update')
|
||||
def update_fragment(self, id: int, data: FragmentUpdateSchema):
|
||||
update_obj = updateWithoutRequestParam(id, data, Fragment)
|
||||
if update_obj:
|
||||
return '更新成功'
|
||||
raise HttpError(500, "设置替换磁盘文件渲染失败")
|
||||
Reference in New Issue
Block a user