(&self, token: &str)
| 150 | } |
| 151 | |
| 152 | pub async fn get_session(&self, token: &str) -> Result<Option<Session>, Error> { |
| 153 | let session = match sqlx::query_as!( |
| 154 | DbSession, |
| 155 | "SELECT token, kind, user_id, discriminator, username, avatar, created_at FROM \ |
| 156 | web_sessions WHERE token = $1;", |
| 157 | token |
| 158 | ) |
| 159 | .fetch_one(&self.pool) |
| 160 | .await |
| 161 | { |
| 162 | Ok(s) => s, |
| 163 | Err(sqlx::Error::RowNotFound) => return Ok(None), |
| 164 | Err(err) => return Err(err.into()), |
| 165 | }; |
| 166 | |
| 167 | let oauth_token = sqlx::query_as!( |
| 168 | DbOauthToken, |
| 169 | "SELECT user_id, discord_bearer_token, discord_refresh_token, discord_token_expires_at |
| 170 | FROM discord_oauth_tokens WHERE user_id = $1", |
| 171 | session.user_id, |
| 172 | ) |
| 173 | .fetch_one(&self.pool) |
| 174 | .await?; |
| 175 | |
| 176 | Ok(Some(Session { |
| 177 | token: token.to_string(), |
| 178 | kind: SessionType::from(session.kind), |
| 179 | oauth_token: oauth_token.into(), |
| 180 | created_at: session.created_at, |
| 181 | user: session.into(), |
| 182 | })) |
| 183 | } |
| 184 | |
| 185 | pub async fn get_all_sessions(&self, user_id: Id<UserMarker>) -> Result<Vec<Session>, Error> { |
| 186 | let oauth_token: DiscordOauthToken = sqlx::query_as!( |
no outgoing calls
no test coverage detected