organizations.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """组织树接口与机构维护写操作。"""
  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.organization_service import (
  9. create_organization,
  10. delete_organization,
  11. organization_tree,
  12. parse_delete_row_version,
  13. parse_organization_id,
  14. reorder_organizations,
  15. update_organization,
  16. )
  17. from dms.services.ip_entry_service import (
  18. list_org_ip_assignments,
  19. update_org_ip_assignments,
  20. )
  21. def _json_body():
  22. if not request.is_json:
  23. raise InvalidArgumentError("请求体必须是JSON对象")
  24. body = request.get_json(silent=True)
  25. if not isinstance(body, dict):
  26. raise InvalidArgumentError("请求体必须是JSON对象")
  27. return body
  28. @api_v1.get("/organizations/tree")
  29. @bearer_auth_required
  30. @admin_required
  31. def organizations_tree():
  32. return success_response(
  33. organization_tree(
  34. keyword=request.args.get("keyword"),
  35. status=request.args.get("status"),
  36. )
  37. )
  38. @api_v1.post("/organizations")
  39. @bearer_auth_required
  40. @admin_required
  41. def create_organization_route():
  42. return success_response(create_organization(_json_body()), status=201)
  43. @api_v1.put("/organizations/reorder")
  44. @bearer_auth_required
  45. @admin_required
  46. def reorder_organizations_route():
  47. return success_response(reorder_organizations(_json_body()))
  48. @api_v1.put("/organizations/<id>")
  49. @bearer_auth_required
  50. @admin_required
  51. def update_organization_route(id: str):
  52. return success_response(
  53. update_organization(parse_organization_id(id), _json_body())
  54. )
  55. @api_v1.delete("/organizations/<id>")
  56. @bearer_auth_required
  57. @admin_required
  58. def delete_organization_route(id: str):
  59. return success_response(
  60. delete_organization(
  61. parse_organization_id(id),
  62. parse_delete_row_version(request.args.get("rowVersion")),
  63. )
  64. )
  65. @api_v1.get("/organizations/<id>/ip-assignments")
  66. @bearer_auth_required
  67. @admin_required
  68. def organization_ip_assignments(id: str):
  69. return success_response(
  70. list_org_ip_assignments(parse_organization_id(id))
  71. )
  72. @api_v1.put("/organizations/<id>/ip-assignments")
  73. @bearer_auth_required
  74. @admin_required
  75. def update_organization_ip_assignments_route(id: str):
  76. return success_response(
  77. update_org_ip_assignments(parse_organization_id(id), _json_body())
  78. )