@@ -108,14 +108,17 @@ impl FromRequestParts<AppState> for Session {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Backfill: if we have a user but empty orgs, try to fetch them.
|
||||
// This handles the case where list_my_organisations failed during login.
|
||||
let needs_org_backfill = session_data
|
||||
// Refresh orgs if they're empty OR if the session hasn't been seen
|
||||
// for a while (e.g. after server restart, PG session loaded with stale orgs).
|
||||
let now = chrono::Utc::now();
|
||||
let orgs_empty = session_data
|
||||
.user
|
||||
.as_ref()
|
||||
.is_some_and(|u| u.orgs.is_empty());
|
||||
let orgs_stale = now - session_data.last_seen_at > chrono::Duration::minutes(5);
|
||||
let needs_org_refresh = orgs_empty || orgs_stale;
|
||||
|
||||
if needs_org_backfill {
|
||||
if needs_org_refresh {
|
||||
if let Ok(orgs) = state
|
||||
.platform_client
|
||||
.list_my_organisations(&session_data.access_token)
|
||||
@@ -126,7 +129,8 @@ impl FromRequestParts<AppState> for Session {
|
||||
tracing::info!(
|
||||
user_id = %user.user_id,
|
||||
org_count = orgs.len(),
|
||||
"backfilled empty org list"
|
||||
was_empty = orgs_empty,
|
||||
"refreshed org list"
|
||||
);
|
||||
user.orgs = orgs
|
||||
.into_iter()
|
||||
|
||||
Reference in New Issue
Block a user