您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

workspace.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import json
  2. from flask_restx import Resource, reqparse
  3. from controllers.console.wraps import setup_required
  4. from controllers.inner_api import inner_api_ns
  5. from controllers.inner_api.wraps import enterprise_inner_api_only
  6. from events.tenant_event import tenant_was_created
  7. from extensions.ext_database import db
  8. from models.account import Account
  9. from services.account_service import TenantService
  10. @inner_api_ns.route("/enterprise/workspace")
  11. class EnterpriseWorkspace(Resource):
  12. @setup_required
  13. @enterprise_inner_api_only
  14. @inner_api_ns.doc("create_enterprise_workspace")
  15. @inner_api_ns.doc(description="Create a new enterprise workspace with owner assignment")
  16. @inner_api_ns.doc(
  17. responses={
  18. 200: "Workspace created successfully",
  19. 401: "Unauthorized - invalid API key",
  20. 404: "Owner account not found or service not available",
  21. }
  22. )
  23. def post(self):
  24. parser = reqparse.RequestParser()
  25. parser.add_argument("name", type=str, required=True, location="json")
  26. parser.add_argument("owner_email", type=str, required=True, location="json")
  27. args = parser.parse_args()
  28. account = db.session.query(Account).filter_by(email=args["owner_email"]).first()
  29. if account is None:
  30. return {"message": "owner account not found."}, 404
  31. tenant = TenantService.create_tenant(args["name"], is_from_dashboard=True)
  32. TenantService.create_tenant_member(tenant, account, role="owner")
  33. tenant_was_created.send(tenant)
  34. resp = {
  35. "id": tenant.id,
  36. "name": tenant.name,
  37. "plan": tenant.plan,
  38. "status": tenant.status,
  39. "created_at": tenant.created_at.isoformat() + "Z" if tenant.created_at else None,
  40. "updated_at": tenant.updated_at.isoformat() + "Z" if tenant.updated_at else None,
  41. }
  42. return {
  43. "message": "enterprise workspace created.",
  44. "tenant": resp,
  45. }
  46. @inner_api_ns.route("/enterprise/workspace/ownerless")
  47. class EnterpriseWorkspaceNoOwnerEmail(Resource):
  48. @setup_required
  49. @enterprise_inner_api_only
  50. @inner_api_ns.doc("create_enterprise_workspace_ownerless")
  51. @inner_api_ns.doc(description="Create a new enterprise workspace without initial owner assignment")
  52. @inner_api_ns.doc(
  53. responses={
  54. 200: "Workspace created successfully",
  55. 401: "Unauthorized - invalid API key",
  56. 404: "Service not available",
  57. }
  58. )
  59. def post(self):
  60. parser = reqparse.RequestParser()
  61. parser.add_argument("name", type=str, required=True, location="json")
  62. args = parser.parse_args()
  63. tenant = TenantService.create_tenant(args["name"], is_from_dashboard=True)
  64. tenant_was_created.send(tenant)
  65. resp = {
  66. "id": tenant.id,
  67. "name": tenant.name,
  68. "encrypt_public_key": tenant.encrypt_public_key,
  69. "plan": tenant.plan,
  70. "status": tenant.status,
  71. "custom_config": json.loads(tenant.custom_config) if tenant.custom_config else {},
  72. "created_at": tenant.created_at.isoformat() + "Z" if tenant.created_at else None,
  73. "updated_at": tenant.updated_at.isoformat() + "Z" if tenant.updated_at else None,
  74. }
  75. return {
  76. "message": "enterprise workspace created.",
  77. "tenant": resp,
  78. }