forked from DalgoT4D/DDP_backend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathorganizations_api.py
More file actions
85 lines (67 loc) · 2.06 KB
/
Copy pathorganizations_api.py
File metadata and controls
85 lines (67 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from ninja import Router
from ninja.errors import HttpError
from ddpui.auth import has_permission
from ddpui.models.org import Org
from ddpui.schemas.admin_org_schema import UpdateOrganizationSchema
admin_org_router = Router()
@admin_org_router.get("/v1/organizations")
@admin_org_router.get("/v1/organizations/")
@has_permission(["can_manage_organization"])
def get_admin_organizations(request, name: str | None = None):
"""List organizations with optional filtering."""
queryset = Org.objects.all()
if name:
queryset = queryset.filter(name__icontains=name)
orgs = list(queryset.values("id", "name", "slug"))
return {
"success": True,
"count": len(orgs),
"data": orgs,
}
@admin_org_router.get("/v1/organizations/{org_id}")
@admin_org_router.get("/v1/organizations/{org_id}/")
@has_permission(["can_manage_organization"])
def get_single_org(request, org_id: int):
"""Get single organization by ID."""
org = (
Org.objects.filter(id=org_id)
.values("id", "name", "slug")
.first()
)
if not org:
raise HttpError(404, "Organization not found")
return {
"success": True,
"data": org,
}
@admin_org_router.put("/v1/organizations/{org_id}")
@admin_org_router.put("/v1/organizations/{org_id}/")
@has_permission(["can_manage_organization"])
def update_organization(
request,
org_id: int,
payload: UpdateOrganizationSchema,
):
"""Update organization details."""
org = Org.objects.filter(id=org_id).first()
if not org:
raise HttpError(404, "Organization not found")
existing_slug = (
Org.objects.filter(slug=payload.slug)
.exclude(id=org_id)
.exists()
)
if existing_slug:
raise HttpError(400, "Slug already exists")
org.name = payload.name
org.slug = payload.slug
org.save()
return {
"success": True,
"message": "Organization updated successfully",
"data": {
"id": org.id,
"name": org.name,
"slug": org.slug,
},
}