categories.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """方案分类 HTTP 接口。"""
  2. from __future__ import annotations
  3. from flask import request
  4. from dms.api.v1.blueprint import api_v1
  5. from dms.common.errors import InvalidArgumentError
  6. from dms.common.response import success_response
  7. from dms.security.decorators import admin_required, bearer_auth_required
  8. from dms.services.category_service import (
  9. category_tree,
  10. create_category,
  11. delete_category,
  12. parse_category_id,
  13. parse_delete_row_version,
  14. update_category,
  15. )
  16. def _json_body():
  17. if not request.is_json:
  18. raise InvalidArgumentError("请求体必须是JSON对象")
  19. body = request.get_json(silent=True)
  20. if not isinstance(body, dict):
  21. raise InvalidArgumentError("请求体必须是JSON对象")
  22. return body
  23. @api_v1.get("/categories/tree")
  24. @bearer_auth_required
  25. def categories_tree():
  26. return success_response(
  27. category_tree(
  28. keyword=request.args.get("keyword"),
  29. status=request.args.get("status"),
  30. )
  31. )
  32. @api_v1.post("/categories")
  33. @bearer_auth_required
  34. @admin_required
  35. def create_category_route():
  36. return success_response(create_category(_json_body()), status=201)
  37. @api_v1.put("/categories/<id>")
  38. @bearer_auth_required
  39. @admin_required
  40. def update_category_route(id: str):
  41. return success_response(
  42. update_category(parse_category_id(id), _json_body())
  43. )
  44. @api_v1.delete("/categories/<id>")
  45. @bearer_auth_required
  46. @admin_required
  47. def delete_category_route(id: str):
  48. return success_response(
  49. delete_category(
  50. parse_category_id(id),
  51. parse_delete_row_version(request.args.get("rowVersion")),
  52. )
  53. )