@@ -46,28 +46,56 @@ def fetch_database_stats(access_token: str = Depends(security), db: Session = De
4646
4747@router .get ("/databases" )
4848def get_all_databases (
49- access_token : str = Depends (security ),
50- db : Session = Depends (get_db ),
51- project_id : str = Query (None , description = "Project ID" ),
52- database_flavour_name : str = Query (None , description = "Database flavour name" )
53- ):
49+ access_token : str = Depends (security ),
50+ db : Session = Depends (get_db ),
51+ project_id : str = Query (None , description = "Project ID" ),
52+ database_flavour_name : str = Query (
53+ None , description = "Database flavour name" ),
54+ page : int = Query (default = 1 , ge = 1 , description = "Page number" ),
55+ per_page : int = Query (default = 10 , ge = 1 , le = 100 ,
56+ description = "Items per page" )
57+ ):
5458 current_user = get_current_user (access_token .credentials )
5559 check_authentication (current_user )
5660
57- databases = db .query (Database )
61+ query = db .query (Database )
5862
5963 if current_user .role != "administrator" :
60- databases = databases .filter (
64+ query = query .filter (
6165 Database .owner_id == current_user .id )
62-
66+
6367 if project_id :
64- databases = databases .filter (Database .project_id == project_id )
68+ query = query .filter (Database .project_id == project_id )
6569
6670 if database_flavour_name :
67- databases = databases .filter (
71+ query = query .filter (
6872 Database .database_flavour_name == database_flavour_name )
6973
70- return {"status_code" : 200 , "data" : {"databases" : databases .all ()}}
74+ total_count = query .count ()
75+ total_pages = (total_count + per_page - 1 )
76+
77+ offset = (page - 1 ) * per_page
78+ paginated_query = query .offset (offset ).limit (per_page )
79+
80+ databases = paginated_query .all ()
81+
82+ next_num = page + 1 if page < total_pages else None
83+ prev_num = page - 1 if page > 1 else None
84+
85+ return {
86+ "status_code" : 200 ,
87+ "data" : {
88+ "pagination" : {
89+ "total" : total_count ,
90+ "pages" : total_pages ,
91+ "page" : page ,
92+ "per_page" : per_page ,
93+ "next" : next_num ,
94+ "prev" : prev_num
95+ },
96+ "databases" : databases
97+ }
98+ }
7199
72100
73101@router .post ("/databases" )
0 commit comments