2021-11-07 08:52:57 +00:00
|
|
|
use actix_web::{get, web, HttpResponse, Scope};
|
2021-04-09 00:22:17 +00:00
|
|
|
|
2023-02-18 23:52:48 +00:00
|
|
|
use mitra_config::Config;
|
2023-03-30 20:27:17 +00:00
|
|
|
use mitra_models::{
|
|
|
|
database::{get_database_client, DbPool},
|
2023-04-24 15:35:32 +00:00
|
|
|
instances::queries::{get_peer_count, get_peers},
|
2022-10-04 20:50:00 +00:00
|
|
|
posts::queries::get_local_post_count,
|
|
|
|
users::queries::get_user_count,
|
|
|
|
};
|
2023-03-30 20:27:17 +00:00
|
|
|
|
|
|
|
use crate::mastodon_api::errors::MastodonError;
|
|
|
|
|
2021-11-10 14:32:27 +00:00
|
|
|
use super::types::InstanceInfo;
|
2021-04-09 00:22:17 +00:00
|
|
|
|
2023-01-06 16:46:59 +00:00
|
|
|
/// https://docs.joinmastodon.org/methods/instance/#v1
|
2021-11-07 08:52:57 +00:00
|
|
|
#[get("")]
|
|
|
|
async fn instance_view(
|
|
|
|
config: web::Data<Config>,
|
2022-12-03 21:23:52 +00:00
|
|
|
db_pool: web::Data<DbPool>,
|
2023-02-25 22:27:07 +00:00
|
|
|
) -> Result<HttpResponse, MastodonError> {
|
2022-10-04 20:50:00 +00:00
|
|
|
let db_client = &**get_database_client(&db_pool).await?;
|
|
|
|
let user_count = get_user_count(db_client).await?;
|
|
|
|
let post_count = get_local_post_count(db_client).await?;
|
|
|
|
let peer_count = get_peer_count(db_client).await?;
|
2023-04-24 15:35:32 +00:00
|
|
|
let instance = InstanceInfo::create(config.as_ref(), user_count, post_count, peer_count);
|
2021-04-09 00:22:17 +00:00
|
|
|
Ok(HttpResponse::Ok().json(instance))
|
|
|
|
}
|
2021-11-07 08:52:57 +00:00
|
|
|
|
2023-03-20 17:06:24 +00:00
|
|
|
#[get("/peers")]
|
2023-04-24 15:35:32 +00:00
|
|
|
async fn instance_peers_view(db_pool: web::Data<DbPool>) -> Result<HttpResponse, MastodonError> {
|
2023-03-20 17:06:24 +00:00
|
|
|
let db_client = &**get_database_client(&db_pool).await?;
|
|
|
|
let peers = get_peers(db_client).await?;
|
|
|
|
Ok(HttpResponse::Ok().json(peers))
|
|
|
|
}
|
|
|
|
|
2021-11-07 08:52:57 +00:00
|
|
|
pub fn instance_api_scope() -> Scope {
|
|
|
|
web::scope("/api/v1/instance")
|
|
|
|
.service(instance_view)
|
2023-03-20 17:06:24 +00:00
|
|
|
.service(instance_peers_view)
|
2021-11-07 08:52:57 +00:00
|
|
|
}
|