1+ from fastapi import Depends
12from fastapi import Request
2- from fastapi .responses import JSONResponse , RedirectResponse
3- from fastapi_startkit .facades import Inertia
3+ from fastapi .responses import RedirectResponse
4+ from fastapi_startkit .inertia import Inertia
5+
6+ from app .http .requests .organization import OrganizationListRequest
47from app .models .Organization import Organization
58
6- async def index (request : Request ):
7- search = request .query_params .get ('search' , '' )
8- query = Organization .query ()
9- if search :
10- query = query .where ('name' , 'like' , f'%{ search } %' )
11- organizations = await query .limit (10 ).get ()
12- return Inertia .render (request , 'Organizations/Index' , {
13- 'filters' : {'search' : search },
14- 'organizations' : {
15- 'data' : [
16- {
17- 'id' : org .id ,
18- 'name' : org .name ,
19- 'phone' : org .phone ,
20- 'city' : org .city ,
21- 'deleted_at' : None ,
22- } for org in organizations
23- ],
24- 'links' : {'first' : None , 'last' : None , 'prev' : None , 'next' : None },
25- 'meta' : {
26- 'current_page' : 1 , 'last_page' : 1 , 'per_page' : 10 ,
27- 'from' : 1 , 'to' : len (organizations ), 'total' : len (organizations ),
28- 'path' : '/organizations' , 'links' : [],
29- },
30- }
9+
10+ async def index (filters : OrganizationListRequest = Depends ()):
11+ paginator = await (
12+ Organization .query ()
13+ .when (filters .search , lambda q : q .where ('name' , 'like' , f'%{ filters .search } %' ))
14+ .paginate (page = filters .page , per_page = filters .limit )
15+ )
16+
17+ return Inertia .render ('Organizations/Index' , {
18+ 'data' : [
19+ {
20+ 'id' : org .id ,
21+ 'name' : org .name ,
22+ 'phone' : org .phone ,
23+ 'city' : org .city ,
24+ 'deleted_at' : None ,
25+ } for org in paginator .result
26+ ],
27+ 'meta' : {
28+ 'current_page' : paginator .current_page ,
29+ 'last_page' : paginator .last_page ,
30+ 'per_page' : paginator .per_page ,
31+ 'total' : paginator .total ,
32+ },
3133 })
3234
33- async def create (request : Request ):
34- return Inertia .render (request , 'Organizations/Create' , {} )
35+ async def create ():
36+ return Inertia .render ('Organizations/Create' )
3537
3638async def store (request : Request ):
3739 form = await request .json ()
3840 form ["account_id" ] = 1 # hardcoded for demo
3941 await Organization .create (form )
4042 return RedirectResponse (url = "/organizations" , status_code = 303 )
4143
42- async def edit (request : Request , organization : str ):
44+ async def edit (organization : str ):
4345 org = await Organization .find (organization )
44- return Inertia .render (request , 'Organizations/Edit' , {
46+ return Inertia .render ('Organizations/Edit' , {
4547 'organization' : {
4648 'id' : org .id ,
4749 'name' : org .name ,
@@ -62,11 +64,10 @@ async def update(request: Request, organization: str):
6264 await org .update (form )
6365 return RedirectResponse (url = f"/organizations/{ organization } /edit" , status_code = 303 )
6466
65- async def destroy (request : Request , organization : str ):
67+ async def destroy (organization : str ):
6668 # org = await Organization.find(organization)
6769 # await org.delete()
6870 return RedirectResponse (url = "/organizations" , status_code = 303 )
6971
70- async def restore (request : Request , organization : str ):
72+ async def restore (organization : str ):
7173 return RedirectResponse (url = "/organizations" , status_code = 303 )
72-
0 commit comments