tetratto/crates/app/src/routes/api/v1/mod.rs

247 lines
6.6 KiB
Rust
Raw Normal View History

pub mod auth;
pub mod communities;
pub mod notifications;
2025-03-24 22:42:33 -04:00
pub mod reactions;
pub mod util;
use axum::{
Router,
routing::{delete, get, post},
};
use serde::Deserialize;
2025-03-24 22:42:33 -04:00
use tetratto_core::model::{
communities::{CommunityContext, CommunityReadAccess, CommunityWriteAccess, PostContext},
communities_permissions::CommunityPermission,
2025-03-24 22:42:33 -04:00
reactions::AssetType,
2025-03-24 20:23:52 -04:00
};
pub fn routes() -> Router {
Router::new()
// misc
.route("/util/proxy", get(util::proxy_request))
.route("/util/lang", get(util::set_langfile_request))
2025-03-24 22:42:33 -04:00
// reactions
.route("/reactions", post(reactions::create_request))
.route("/reactions/{id}", get(reactions::get_request))
.route("/reactions/{id}", delete(reactions::delete_request))
// communities
.route(
"/communities/find/{id}",
get(communities::communities::redirect_from_id),
)
.route(
"/communities",
post(communities::communities::create_request),
)
.route(
"/communities/{id}",
delete(communities::communities::delete_request),
)
.route(
"/communities/{id}/title",
post(communities::communities::update_title_request),
)
.route(
"/communities/{id}/context",
post(communities::communities::update_context_request),
)
.route(
"/communities/{id}/access/read",
post(communities::communities::update_read_access_request),
)
.route(
"/communities/{id}/access/write",
post(communities::communities::update_write_access_request),
)
.route(
"/communities/{id}/upload/avatar",
post(communities::images::upload_avatar_request),
)
.route(
"/communities/{id}/upload/banner",
post(communities::images::upload_banner_request),
)
.route(
"/communities/{id}/avatar",
get(communities::images::avatar_request),
)
.route(
"/communities/{id}/banner",
get(communities::images::banner_request),
)
// posts
.route("/posts", post(communities::posts::create_request))
.route("/posts/{id}", delete(communities::posts::delete_request))
.route(
"/posts/{id}/content",
post(communities::posts::update_content_request),
)
2025-03-24 20:23:52 -04:00
.route(
"/posts/{id}/context",
post(communities::posts::update_context_request),
2025-03-24 20:23:52 -04:00
)
2025-03-23 16:37:43 -04:00
// auth
// global
.route("/auth/register", post(auth::register_request))
.route("/auth/login", post(auth::login_request))
2025-03-23 16:37:43 -04:00
.route("/auth/logout", post(auth::logout_request))
.route(
"/auth/upload/avatar",
post(auth::images::upload_avatar_request),
)
.route(
"/auth/upload/banner",
post(auth::images::upload_banner_request),
)
// profile
.route(
"/auth/profile/{id}/avatar",
get(auth::images::avatar_request),
)
.route(
"/auth/profile/{id}/banner",
get(auth::images::banner_request),
)
.route(
"/auth/profile/{id}/follow",
post(auth::social::follow_request),
)
.route(
"/auth/profile/{id}/block",
post(auth::social::block_request),
)
.route(
"/auth/profile/{id}/settings",
post(auth::profile::update_profile_settings_request),
)
2025-03-31 11:45:34 -04:00
.route(
"/auth/profile/{id}/password",
post(auth::profile::update_profile_password_request),
)
.route(
"/auth/profile/{id}/username",
post(auth::profile::update_profile_username_request),
)
.route(
"/auth/profile/{id}/tokens",
post(auth::profile::update_profile_tokens_request),
)
.route(
"/auth/profile/{id}/verified",
post(auth::profile::update_profile_is_verified_request),
)
.route(
"/auth/profile/find/{id}",
get(auth::profile::redirect_from_id),
)
// notifications
.route(
"/notifications/my",
delete(notifications::delete_all_request),
)
.route("/notifications/{id}", delete(notifications::delete_request))
.route(
2025-03-30 22:26:20 -04:00
"/notifications/{id}/read_status",
post(notifications::update_read_status_request),
)
// community memberships
.route(
"/communities/{id}/join",
post(communities::communities::create_membership),
)
.route(
"/communities/{cid}/memberships/{uid}",
get(communities::communities::get_membership),
)
.route(
"/communities/{cid}/memberships/{uid}",
delete(communities::communities::delete_membership),
)
.route(
"/communities/{cid}/memberships/{uid}/role",
post(communities::communities::update_membership_role),
)
}
#[derive(Deserialize)]
pub struct AuthProps {
pub username: String,
pub password: String,
}
#[derive(Deserialize)]
pub struct CreateCommunity {
pub title: String,
}
#[derive(Deserialize)]
pub struct UpdateCommunityTitle {
pub title: String,
}
#[derive(Deserialize)]
pub struct UpdateCommunityContext {
pub context: CommunityContext,
}
#[derive(Deserialize)]
pub struct UpdateCommunityReadAccess {
pub access: CommunityReadAccess,
}
#[derive(Deserialize)]
pub struct UpdateCommunityWriteAccess {
pub access: CommunityWriteAccess,
}
#[derive(Deserialize)]
pub struct CreatePost {
pub content: String,
pub community: String,
#[serde(default)]
pub replying_to: Option<String>,
}
#[derive(Deserialize)]
pub struct UpdatePostContent {
pub content: String,
}
2025-03-24 20:23:52 -04:00
#[derive(Deserialize)]
pub struct UpdatePostContext {
pub context: PostContext,
2025-03-24 20:23:52 -04:00
}
2025-03-24 22:42:33 -04:00
#[derive(Deserialize)]
pub struct CreateReaction {
pub asset: String,
2025-03-24 22:42:33 -04:00
pub asset_type: AssetType,
2025-03-24 22:49:15 -04:00
pub is_like: bool,
2025-03-24 22:42:33 -04:00
}
2025-03-31 11:45:34 -04:00
#[derive(Deserialize)]
pub struct UpdateUserPassword {
pub from: String,
pub to: String,
}
#[derive(Deserialize)]
pub struct UpdateUserUsername {
pub to: String,
}
#[derive(Deserialize)]
pub struct UpdateUserIsVerified {
pub is_verified: bool,
}
#[derive(Deserialize)]
pub struct UpdateNotificationRead {
pub read: bool,
}
#[derive(Deserialize)]
pub struct UpdateMembershipRole {
pub role: CommunityPermission,
}