activitypub/src/database.rs

42 lines
1.1 KiB
Rust
Raw Normal View History

2024-04-18 04:03:52 +02:00
use super::entities::prelude::User;
2024-04-18 03:41:52 +02:00
use crate::{entities::user, error::Error, objects::person::DbUser};
2024-04-09 19:48:18 +02:00
use anyhow::anyhow;
2024-04-18 03:41:52 +02:00
use sea_orm::{DatabaseConnection, EntityTrait};
2024-04-15 01:07:15 +02:00
use serde::{Deserialize, Serialize};
2024-04-09 19:48:18 +02:00
use std::sync::{Arc, Mutex};
2024-04-18 03:41:52 +02:00
#[derive(Debug, Clone)]
pub struct Config {}
#[derive(Debug, Clone)]
pub struct State {
pub database_connection: Arc<DatabaseConnection>,
}
2024-04-18 04:27:22 +02:00
pub type StateHandle = State;
2024-04-09 19:48:18 +02:00
/// Our "database" which contains all known users (local and federated)
2024-04-16 19:53:24 +02:00
#[derive(Debug)]
2024-04-09 19:48:18 +02:00
pub struct Database {
pub users: Mutex<Vec<DbUser>>,
}
2024-04-18 03:41:52 +02:00
impl State {
pub async fn local_user(&self) -> Result<user::Model, Error> {
2024-04-18 04:03:52 +02:00
let user = User::find()
.one(self.database_connection.as_ref())
.await?
.unwrap();
2024-04-18 03:41:52 +02:00
Ok(user.clone())
2024-04-09 19:48:18 +02:00
}
2024-04-18 03:41:52 +02:00
pub async fn read_user(&self, name: &str) -> Result<user::Model, Error> {
let db_user = self.local_user().await?;
if name == db_user.username {
2024-04-09 19:48:18 +02:00
Ok(db_user)
} else {
Err(anyhow!("Invalid user {name}").into())
}
}
}