organizations.py 2.3 KB

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