recycle_bin.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """B8回收站查询和单条文档恢复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.document_query_service import parse_string_id
  9. from dms.services.recycle_bin_service import (
  10. list_recycle_bin_documents,
  11. restore_document,
  12. )
  13. def _json_body() -> dict:
  14. if not request.is_json:
  15. raise InvalidArgumentError("请求体必须是JSON对象")
  16. payload = request.get_json(silent=True)
  17. if not isinstance(payload, dict):
  18. raise InvalidArgumentError("请求体必须是JSON对象")
  19. return payload
  20. @api_v1.get("/recycle-bin/documents")
  21. @bearer_auth_required
  22. @admin_required
  23. def recycle_bin_documents_route():
  24. return success_response(list_recycle_bin_documents(request.args))
  25. @api_v1.post("/recycle-bin/documents/<id>/restore")
  26. @bearer_auth_required
  27. @admin_required
  28. def restore_recycle_bin_document_route(id: str):
  29. return success_response(
  30. restore_document(parse_string_id(id), _json_body())
  31. )
  32. __all__ = [
  33. "recycle_bin_documents_route",
  34. "restore_recycle_bin_document_route",
  35. ]