2025-03-22 22:17:47 -04:00
|
|
|
pub mod auth;
|
2025-03-24 19:55:08 -04:00
|
|
|
pub mod journal;
|
2025-03-24 22:42:33 -04:00
|
|
|
pub mod reactions;
|
2025-03-24 19:55:08 -04:00
|
|
|
|
2025-03-22 22:17:47 -04:00
|
|
|
use axum::{
|
|
|
|
Router,
|
2025-03-24 19:55:08 -04:00
|
|
|
routing::{delete, get, post},
|
2025-03-22 22:17:47 -04:00
|
|
|
};
|
|
|
|
use serde::Deserialize;
|
2025-03-24 22:42:33 -04:00
|
|
|
use tetratto_core::model::{
|
2025-03-25 21:19:55 -04:00
|
|
|
journal::{JournalPostContext, JournalReadAccess, JournalWriteAccess},
|
2025-03-24 22:42:33 -04:00
|
|
|
reactions::AssetType,
|
2025-03-24 20:23:52 -04:00
|
|
|
};
|
2025-03-22 22:17:47 -04:00
|
|
|
|
|
|
|
pub fn routes() -> Router {
|
|
|
|
Router::new()
|
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))
|
2025-03-25 21:19:55 -04:00
|
|
|
// journal journals
|
|
|
|
.route("/journals", post(journal::journals::create_request))
|
|
|
|
.route("/journals/{id}", delete(journal::journals::delete_request))
|
2025-03-24 19:55:08 -04:00
|
|
|
.route(
|
2025-03-25 21:19:55 -04:00
|
|
|
"/journals/{id}/title",
|
|
|
|
post(journal::journals::update_title_request),
|
2025-03-24 19:55:08 -04:00
|
|
|
)
|
|
|
|
.route(
|
2025-03-25 21:19:55 -04:00
|
|
|
"/journals/{id}/prompt",
|
|
|
|
post(journal::journals::update_prompt_request),
|
2025-03-24 19:55:08 -04:00
|
|
|
)
|
|
|
|
.route(
|
2025-03-25 21:19:55 -04:00
|
|
|
"/journals/{id}/access/read",
|
|
|
|
post(journal::journals::update_read_access_request),
|
2025-03-24 19:55:08 -04:00
|
|
|
)
|
|
|
|
.route(
|
2025-03-25 21:19:55 -04:00
|
|
|
"/journals/{id}/access/write",
|
|
|
|
post(journal::journals::update_write_access_request),
|
2025-03-24 19:55:08 -04:00
|
|
|
)
|
2025-03-25 21:19:55 -04:00
|
|
|
// journal posts
|
|
|
|
.route("/posts", post(journal::posts::create_request))
|
|
|
|
.route("/posts/{id}", delete(journal::posts::delete_request))
|
2025-03-24 19:55:08 -04:00
|
|
|
.route(
|
2025-03-25 21:19:55 -04:00
|
|
|
"/posts/{id}/content",
|
|
|
|
post(journal::posts::update_content_request),
|
2025-03-24 19:55:08 -04:00
|
|
|
)
|
2025-03-24 20:23:52 -04:00
|
|
|
.route(
|
2025-03-25 21:19:55 -04:00
|
|
|
"/posts/{id}/context",
|
|
|
|
post(journal::posts::update_context_request),
|
2025-03-24 20:23:52 -04:00
|
|
|
)
|
2025-03-23 16:37:43 -04:00
|
|
|
// auth
|
2025-03-22 22:17:47 -04:00
|
|
|
// 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))
|
2025-03-23 18:03:11 -04:00
|
|
|
.route(
|
|
|
|
"/auth/upload/avatar",
|
|
|
|
post(auth::images::upload_avatar_request),
|
|
|
|
)
|
|
|
|
.route(
|
|
|
|
"/auth/upload/banner",
|
|
|
|
post(auth::images::upload_banner_request),
|
|
|
|
)
|
2025-03-22 22:17:47 -04:00
|
|
|
// profile
|
|
|
|
.route(
|
|
|
|
"/auth/profile/{id}/avatar",
|
|
|
|
get(auth::images::avatar_request),
|
|
|
|
)
|
|
|
|
.route(
|
|
|
|
"/auth/profile/{id}/banner",
|
|
|
|
get(auth::images::banner_request),
|
|
|
|
)
|
2025-03-25 22:52:47 -04:00
|
|
|
.route(
|
|
|
|
"/auth/profile/{id}/follow",
|
|
|
|
post(auth::social::follow_request),
|
|
|
|
)
|
|
|
|
.route(
|
|
|
|
"/auth/profile/{id}/block",
|
|
|
|
post(auth::social::block_request),
|
|
|
|
)
|
2025-03-25 23:58:27 -04:00
|
|
|
.route(
|
|
|
|
"/auth/profile/{id}/settings",
|
|
|
|
post(auth::profile::update_profile_settings_request),
|
|
|
|
)
|
2025-03-22 22:17:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct AuthProps {
|
|
|
|
pub username: String,
|
|
|
|
pub password: String,
|
|
|
|
}
|
2025-03-24 19:55:08 -04:00
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
2025-03-25 21:19:55 -04:00
|
|
|
pub struct CreateJournal {
|
2025-03-24 19:55:08 -04:00
|
|
|
pub title: String,
|
|
|
|
pub prompt: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
2025-03-25 21:19:55 -04:00
|
|
|
pub struct UpdateJournalTitle {
|
2025-03-24 19:55:08 -04:00
|
|
|
pub title: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
2025-03-25 21:19:55 -04:00
|
|
|
pub struct UpdateJournalPrompt {
|
2025-03-24 19:55:08 -04:00
|
|
|
pub prompt: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
2025-03-25 21:19:55 -04:00
|
|
|
pub struct UpdateJournalReadAccess {
|
|
|
|
pub access: JournalReadAccess,
|
2025-03-24 19:55:08 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
2025-03-25 21:19:55 -04:00
|
|
|
pub struct UpdateJournalWriteAccess {
|
|
|
|
pub access: JournalWriteAccess,
|
2025-03-24 19:55:08 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct CreateJournalEntry {
|
|
|
|
pub content: String,
|
|
|
|
pub journal: usize,
|
2025-03-25 22:52:47 -04:00
|
|
|
#[serde(default)]
|
|
|
|
pub replying_to: Option<usize>,
|
2025-03-24 19:55:08 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct UpdateJournalEntryContent {
|
|
|
|
pub content: String,
|
|
|
|
}
|
2025-03-24 20:23:52 -04:00
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct UpdateJournalEntryContext {
|
2025-03-25 21:19:55 -04:00
|
|
|
pub context: JournalPostContext,
|
2025-03-24 20:23:52 -04:00
|
|
|
}
|
2025-03-24 22:42:33 -04:00
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
pub struct CreateReaction {
|
|
|
|
pub asset: usize,
|
|
|
|
pub asset_type: AssetType,
|
2025-03-24 22:49:15 -04:00
|
|
|
pub is_like: bool,
|
2025-03-24 22:42:33 -04:00
|
|
|
}
|