@@ -12,14 +12,14 @@ use schemars::JsonSchema;
1212use serde:: { Deserialize , Serialize } ;
1313use tower_cookies:: Cookies ;
1414
15+ use crate :: db_query;
1516use crate :: models:: heartbeat:: Heartbeat ;
1617use crate :: models:: session:: Session ;
1718use crate :: models:: user:: { PartialUser , User } ;
1819use crate :: state:: AppState ;
1920use crate :: utils:: cache:: CachedAdminStats ;
21+ use crate :: utils:: extractors:: { AuthenticatedUser , DbConnection } ;
2022use crate :: utils:: session:: { ImpersonationContext , SessionManager } ;
21- use crate :: utils:: auth:: AuthenticatedUser ;
22- use crate :: { db_query, get_db_conn} ;
2323
2424#[ derive( Deserialize , JsonSchema ) ]
2525pub struct AdminQuery {
@@ -56,8 +56,8 @@ pub async fn admin_dashboard(
5656 State ( app_state) : State < AppState > ,
5757 Query ( query) : Query < AdminQuery > ,
5858 NoApi ( AuthenticatedUser ( current_user) ) : NoApi < AuthenticatedUser > ,
59+ NoApi ( DbConnection ( mut conn) ) : NoApi < DbConnection > ,
5960) -> Result < Json < AdminDashboardResponse > , Response > {
60-
6161 if !current_user. is_admin ( ) {
6262 return Err ( ( StatusCode :: FORBIDDEN , "No permission" ) . into_response ( ) ) ;
6363 }
@@ -70,8 +70,6 @@ pub async fn admin_dashboard(
7070 let daily_activity = if let Some ( cached) = cached {
7171 cached. daily_activity
7272 } else {
73- let mut conn = get_db_conn ! ( app_state) ;
74-
7573 let raw_daily_activity = db_query ! (
7674 Heartbeat :: get_daily_activity_last_week( & mut conn) ,
7775 "Failed to fetch daily activity"
@@ -87,8 +85,6 @@ pub async fn admin_dashboard(
8785 raw_daily_activity
8886 } ;
8987
90- let mut conn = get_db_conn ! ( app_state) ;
91-
9288 let total_heartbeats = db_query ! ( Heartbeat :: total_heartbeat_count_estimate( & mut conn) ) ;
9389 let total_users = db_query ! ( User :: count_total_users( & mut conn, false ) ) ;
9490 let heartbeats_last_hour = db_query ! ( Heartbeat :: count_heartbeats_last_hour( & mut conn) ) ;
@@ -142,6 +138,7 @@ pub async fn impersonate_user(
142138 cookies : NoApi < Cookies > ,
143139 impersonation : NoApi < Option < Extension < ImpersonationContext > > > ,
144140 NoApi ( AuthenticatedUser ( session_user) ) : NoApi < AuthenticatedUser > ,
141+ NoApi ( DbConnection ( mut conn) ) : NoApi < DbConnection > ,
145142) -> Result < StatusCode , Response > {
146143 let cookies = cookies. 0 ;
147144 let impersonation = impersonation. 0 ;
@@ -150,8 +147,6 @@ pub async fn impersonate_user(
150147 return Err ( ( StatusCode :: UNAUTHORIZED , "Session missing" ) . into_response ( ) ) ;
151148 } ;
152149
153- let mut conn = get_db_conn ! ( app_state) ;
154-
155150 let Some ( session_data) = db_query ! (
156151 SessionManager :: validate_session( & app_state. db_pool, session_id) . await ,
157152 "Failed to validate session"
0 commit comments