Skip to content

Commit 6570f02

Browse files
committed
soft deletes added
1 parent 45af672 commit 6570f02

1 file changed

Lines changed: 39 additions & 5 deletions

File tree

auth_backend/admin/admin.py

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from sqladmin import ModelView
2+
from sqlalchemy import func, select
3+
from sqlalchemy.sql.expression import Select
4+
from starlette.requests import Request
25

36
from auth_backend.models.db import Group, Scope, User
47
from auth_backend.routes.user import patch_user_groups
@@ -7,7 +10,7 @@
710
class ScopeAdmin(ModelView, model=Scope):
811
name = "Scope"
912
name_plural = "Scopes"
10-
column_list = ["id", "name", "comment", "is_deleted"]
13+
column_list = ["id", "name", "comment"]
1114
column_details_list = [
1215
"id",
1316
"name",
@@ -18,16 +21,34 @@ class ScopeAdmin(ModelView, model=Scope):
1821
"is_deleted",
1922
]
2023
column_searchable_list = ["id", "name"]
21-
column_sortable_list = ["id", "name", "is_deleted"]
24+
column_sortable_list = ["id", "name"]
2225
column_default_sort = [("id", False)]
2326
form_excluded_columns = ["create_ts", "update_ts", "groups", "user_sessions", "is_deleted"]
2427
can_create = False # I don't know how to use UnionAuth there to get user_id that is required
2528

29+
def list_query(self, request: Request) -> Select:
30+
return select(Scope).where(Scope.is_deleted == False)
31+
32+
def count_query(self, request: Request) -> Select:
33+
return select(func.count(Scope.id)).where(Scope.is_deleted == False)
34+
35+
async def update_model(self, request, pk, data):
36+
with self.session_maker(expire_on_commit=False) as session:
37+
scope_data = {k: v for k, v in data.items() if v is not None}
38+
obj = Scope.update(int(pk), **scope_data, session=session)
39+
session.commit()
40+
return obj
41+
42+
async def delete_model(self, request, pk):
43+
with self.session_maker(expire_on_commit=False) as session:
44+
Scope.delete(session=session, id=int(pk))
45+
session.commit()
46+
2647

2748
class GroupAdmin(ModelView, model=Group):
2849
name = "Group"
2950
name_plural = "Groups"
30-
column_list = ["id", "name", "scopes", "users", "parent_id", "is_deleted"]
51+
column_list = ["id", "name", "scopes", "users", "parent_id"]
3152
column_details_list = [
3253
"id",
3354
"name",
@@ -43,6 +64,12 @@ class GroupAdmin(ModelView, model=Group):
4364
column_default_sort = [("id", False)]
4465
form_excluded_columns = ["create_ts", "update_ts", "is_deleted"]
4566

67+
def list_query(self, request: Request) -> Select:
68+
return select(Group).where(Group.is_deleted == False)
69+
70+
def count_query(self, request: Request) -> Select:
71+
return select(func.count(Group.id)).where(Group.is_deleted == False)
72+
4673

4774
class UserAdmin(ModelView, model=User):
4875
name = "User"
@@ -62,7 +89,14 @@ class UserAdmin(ModelView, model=User):
6289
"scopes": lambda m, a: ", ".join(s.name for s in (m.scopes or set())),
6390
}
6491

65-
async def on_model_change(self, data: dict, model: User, is_created: bool, request) -> None:
92+
def list_query(self, request: Request) -> Select:
93+
return select(User).where(User.is_deleted == False)
94+
95+
def count_query(self, request: Request) -> Select:
96+
return select(func.count(User.id)).where(User.is_deleted == False)
97+
98+
async def update_model(self, request, pk, data):
6699
group_ids = [int(group) for group in (data.pop("groups") or [])]
67100
with self.session_maker(expire_on_commit=False) as session:
68-
patch_user_groups(model.id, group_ids, session)
101+
patch_user_groups(int(pk), group_ids, session)
102+
return User.get(int(pk), session=session)

0 commit comments

Comments
 (0)