Skip to content

Commit 2486409

Browse files
committed
Remove local tenant creation, and soft delete functionality adn endpoints
1 parent d8330d7 commit 2486409

File tree

5 files changed

+0
-377
lines changed

5 files changed

+0
-377
lines changed

extensions/m8flow-backend/src/m8flow_backend/api.yml

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,6 @@ info:
33
version: 1.0.0
44
title: m8flow-backend-extension
55
paths:
6-
/create-tenant:
7-
post:
8-
summary: Create a new tenant
9-
operationId: m8flow_backend.routes.tenant_controller.create_tenant
10-
tags:
11-
- Tenant
12-
requestBody:
13-
required: true
14-
content:
15-
application/json:
16-
schema:
17-
$ref: "#/components/schemas/CreateTenantRequest"
18-
responses:
19-
"201":
20-
description: Tenant created successfully
21-
content:
22-
application/json:
23-
schema:
24-
$ref: "#/components/schemas/TenantResponse"
25-
"400":
26-
description: Bad request - missing required fields
27-
content:
28-
application/json:
29-
schema:
30-
$ref: "#/components/schemas/ErrorResponse"
31-
"401":
32-
description: Unauthorized - user not authenticated
33-
content:
34-
application/json:
35-
schema:
36-
$ref: "#/components/schemas/ErrorResponse"
37-
"409":
38-
description: Conflict - tenant with ID or slug already exists
39-
content:
40-
application/json:
41-
schema:
42-
$ref: "#/components/schemas/ErrorResponse"
43-
446
/tenant-login-url:
457
get:
468
summary: Get Keycloak login URL for a tenant realm (unauthenticated)
@@ -368,44 +330,6 @@ paths:
368330
"500":
369331
description: Internal server error
370332

371-
delete:
372-
summary: Soft delete a tenant
373-
description: Sets the tenant status to DELETED without removing from database
374-
operationId: m8flow_backend.routes.tenant_controller.delete_tenant
375-
tags:
376-
- Tenant
377-
parameters:
378-
- name: tenant_id
379-
in: path
380-
required: true
381-
schema:
382-
type: string
383-
description: Unique identifier of the tenant to delete
384-
responses:
385-
"200":
386-
description: Tenant soft deleted successfully
387-
content:
388-
application/json:
389-
schema:
390-
$ref: "#/components/schemas/MessageResponse"
391-
"400":
392-
description: Bad request - tenant already deleted
393-
content:
394-
application/json:
395-
schema:
396-
$ref: "#/components/schemas/ErrorResponse"
397-
"401":
398-
description: Unauthorized - user not authenticated
399-
"403":
400-
description: Forbidden - cannot delete default tenant
401-
content:
402-
application/json:
403-
schema:
404-
$ref: "#/components/schemas/ErrorResponse"
405-
"404":
406-
description: Tenant not found
407-
"500":
408-
description: Internal server error
409333

410334
/templates:
411335
get:

extensions/m8flow-backend/src/m8flow_backend/routes/tenant_controller.py

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from spiffworkflow_backend.exceptions.api_error import ApiError
33
from m8flow_backend.services.tenant_service import TenantService
44
from m8flow_backend.helpers.response_helper import success_response, handle_api_errors
5-
import uuid
65

76

87
def _serialize_tenant(tenant):
@@ -40,27 +39,6 @@ def _require_authenticated_user():
4039
return user
4140

4241

43-
@handle_api_errors
44-
def create_tenant(body):
45-
user = _require_authenticated_user()
46-
body = body or {}
47-
48-
tenant_id = body.get('id', str(uuid.uuid4()))
49-
name = body.get('name')
50-
slug = body.get('slug')
51-
status_str = "ACTIVE"
52-
53-
tenant = TenantService.create_tenant(
54-
tenant_id=tenant_id,
55-
name=name,
56-
slug=slug,
57-
status_str=status_str,
58-
user_id=user.username
59-
)
60-
61-
return success_response(_serialize_tenant(tenant), 201)
62-
63-
6442
@handle_api_errors
6543
def get_tenant_by_id(tenant_id):
6644
"""Fetch tenant by ID."""
@@ -81,16 +59,6 @@ def get_all_tenants():
8159
tenants = TenantService.get_all_tenants()
8260
return success_response([_serialize_tenant(t) for t in tenants], 200)
8361

84-
@handle_api_errors
85-
def delete_tenant(tenant_id):
86-
"""Soft delete a tenant by setting status to DELETED."""
87-
user = _require_authenticated_user()
88-
tenant = TenantService.delete_tenant(tenant_id, user.username)
89-
90-
return success_response({
91-
"message": f"Tenant '{tenant.name}' has been successfully deleted."
92-
}, 200)
93-
9462
@handle_api_errors
9563
def update_tenant(tenant_id, body):
9664
"""Update tenant name and status. Slug cannot be updated."""

extensions/m8flow-backend/src/m8flow_backend/services/authorization_service_patch.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
M8FLOW_AUTH_EXCLUSION_ADDITIONS = [
1313
"m8flow_backend.routes.keycloak_controller.get_tenant_login_url",
1414
"m8flow_backend.routes.keycloak_controller.create_realm",
15-
"m8flow_backend.routes.tenant_controller.create_tenant",
1615
]
1716
M8FLOW_ROLE_GROUP_IDENTIFIERS = frozenset(
1817
{"super-admin", "tenant-admin", "editor", "viewer", "integrator", "reviewer"}

extensions/m8flow-backend/src/m8flow_backend/services/tenant_service.py

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from sqlalchemy.exc import IntegrityError
21
from m8flow_backend.models.m8flow_tenant import M8flowTenantModel, TenantStatus
32
from spiffworkflow_backend.models.db import db
43
from spiffworkflow_backend.exceptions.api_error import ApiError
@@ -14,58 +13,6 @@ def _check_not_default_tenant(identifier: str):
1413
status_code=403
1514
)
1615

17-
@staticmethod
18-
def create_tenant(tenant_id: str, name: str, slug: str, status_str: str, user_id: str):
19-
if not name:
20-
raise ApiError(error_code="missing_name", message="Name is required", status_code=400)
21-
if not slug:
22-
raise ApiError(error_code="missing_slug", message="Slug is required", status_code=400)
23-
24-
# Check if ID already exists
25-
existing_id = M8flowTenantModel.query.filter_by(id=tenant_id).first()
26-
if existing_id:
27-
raise ApiError(
28-
error_code="tenant_id_exists",
29-
message=f"Tenant with ID '{tenant_id}' already exists.",
30-
status_code=409
31-
)
32-
33-
existing_slug = M8flowTenantModel.query.filter_by(slug=slug).first()
34-
if existing_slug:
35-
raise ApiError(
36-
error_code="tenant_slug_exists",
37-
message=f"Tenant with slug '{slug}' already exists.",
38-
status_code=409
39-
)
40-
41-
tenant = M8flowTenantModel(
42-
id=tenant_id,
43-
name=name,
44-
slug=slug,
45-
status=TenantStatus(status_str),
46-
created_by=user_id,
47-
modified_by=user_id
48-
)
49-
50-
try:
51-
db.session.add(tenant)
52-
db.session.commit()
53-
return tenant
54-
except IntegrityError:
55-
db.session.rollback()
56-
raise ApiError(
57-
error_code="tenant_conflict",
58-
message="A tenant with this ID or slug already exists.",
59-
status_code=409
60-
)
61-
except Exception as e:
62-
db.session.rollback()
63-
raise ApiError(
64-
error_code="database_error",
65-
message=str(e),
66-
status_code=500
67-
)
68-
6916
@staticmethod
7017
def get_tenant_by_id(tenant_id: str):
7118
TenantService._check_not_default_tenant(tenant_id)
@@ -130,40 +77,6 @@ def get_all_tenants():
13077
status_code=500
13178
)
13279

133-
@staticmethod
134-
def delete_tenant(tenant_id: str, user_id: str):
135-
TenantService._check_not_default_tenant(tenant_id)
136-
137-
tenant = M8flowTenantModel.query.filter_by(id=tenant_id).first()
138-
139-
if not tenant:
140-
raise ApiError(
141-
error_code="tenant_not_found",
142-
message=f"Tenant with ID '{tenant_id}' not found.",
143-
status_code=404
144-
)
145-
146-
if tenant.status == TenantStatus.DELETED:
147-
raise ApiError(
148-
error_code="tenant_already_deleted",
149-
message=f"Tenant with ID '{tenant_id}' is already deleted.",
150-
status_code=400
151-
)
152-
153-
try:
154-
tenant.status = TenantStatus.DELETED
155-
tenant.modified_by = user_id
156-
157-
db.session.commit()
158-
return tenant
159-
except Exception as e:
160-
db.session.rollback()
161-
raise ApiError(
162-
error_code="database_error",
163-
message=f"Error deleting tenant: {str(e)}",
164-
status_code=500
165-
)
166-
16780
@staticmethod
16881
def update_tenant(tenant_id: str, name: str | None, status_str: str | None, user_id: str):
16982
TenantService._check_not_default_tenant(tenant_id)

0 commit comments

Comments
 (0)