Skip to main content

unifly_api/controller/session_queries/
admin.rs

1use crate::controller::Controller;
2use crate::controller::support::require_session;
3use crate::core_error::CoreError;
4use crate::model::{Admin, EntityId};
5
6impl Controller {
7    pub async fn list_admins(&self) -> Result<Vec<Admin>, CoreError> {
8        let guard = self.inner.session_client.lock().await;
9        let session = require_session(guard.as_ref())?;
10        let raw = session.list_admins().await?;
11        Ok(raw
12            .into_iter()
13            .map(|value| Admin {
14                id: value
15                    .get("_id")
16                    .and_then(|value| value.as_str())
17                    .map_or_else(
18                        || EntityId::Legacy("unknown".into()),
19                        |value| EntityId::Legacy(value.into()),
20                    ),
21                name: value
22                    .get("name")
23                    .and_then(|value| value.as_str())
24                    .unwrap_or("")
25                    .to_owned(),
26                email: value
27                    .get("email")
28                    .and_then(|value| value.as_str())
29                    .map(String::from),
30                role: value
31                    .get("role")
32                    .and_then(|value| value.as_str())
33                    .unwrap_or("unknown")
34                    .to_owned(),
35                is_super: value
36                    .get("is_super")
37                    .and_then(serde_json::Value::as_bool)
38                    .unwrap_or(false),
39                last_login: None,
40            })
41            .collect())
42    }
43
44    pub async fn list_users(
45        &self,
46    ) -> Result<Vec<crate::session::models::SessionUserEntry>, CoreError> {
47        let guard = self.inner.session_client.lock().await;
48        let session = require_session(guard.as_ref())?;
49        Ok(session.list_users().await?)
50    }
51}