feat: add global & server leveling, quests, achievements, guilds land-claiming, social & toggleable configs

This commit is contained in:
SCOPEDD committed 2026-09-29 03:24:27 -04:00
1 parent 4b79f69c20
commit b4cef85b1f
40 files changed
+10261 -27

No files matched your search

+62 -1
View File
@@ -1,14 +1,19 @@
pub mod account;
pub mod achievements;
pub mod activity;
pub mod admin;
pub mod guilds;
pub mod landing;
pub mod leveling;
pub mod meta;
pub mod public;
pub mod quests;
pub mod servers;
pub mod social;
use crate::state::AppState;
use axum::extract::DefaultBodyLimit;
use axum::routing::{delete, get, post};
use axum::routing::{delete, get, post, put};
use axum::Router;
pub fn api(state: &AppState) -> Router<AppState> {
@@ -34,6 +39,54 @@ pub fn api(state: &AppState) -> Router<AppState> {
.route("/landing", get(landing::public_landing))
.route("/launcher/authlib-injector.json", get(account::authlib_index))
.route("/launcher/authlib-injector.jar", get(account::authlib_jar))
// Leveling & Rewards
.route("/levels/me", get(leveling::get_my_levels))
.route("/leveling/me", get(leveling::get_my_levels))
.route("/levels/player/{uuid}", get(leveling::get_player_levels))
.route("/levels/leaderboard", get(leveling::get_level_leaderboard))
.route("/levels/rewards", get(leveling::list_rewards))
// Daily & Weekly Quests
.route("/quests/my", get(quests::get_my_quests))
.route("/quests/me", get(quests::get_my_quests))
.route("/quests/{id}/claim", post(quests::claim_quest))
// Achievements
.route("/achievements/my", get(achievements::get_my_achievements))
.route("/achievements/me", get(achievements::get_my_achievements))
.route("/achievements/player/{uuid}", get(achievements::get_player_achievements))
// Guilds & Land Claims
.route("/guilds", get(guilds::list_guilds).post(guilds::create_guild))
.route("/guilds/my", get(guilds::get_my_guild))
.route("/guilds/claims/grid", get(guilds::get_chunk_grid))
.route("/guilds/claims/{id}", delete(guilds::unclaim_by_id))
.route("/guilds/{id}", get(guilds::get_guild_by_id).put(guilds::update_guild))
.route("/guilds/{id}/members", post(guilds::add_guild_member))
.route("/guilds/{id}/members/{uuid}", delete(guilds::remove_guild_member))
.route("/guilds/{id}/posts", post(guilds::create_guild_post))
.route("/guilds/{id}/claims", post(guilds::claim_chunk).delete(guilds::unclaim_chunk))
.route("/guilds/{id}/claim", post(guilds::claim_chunk))
.route("/guilds/{id}/unclaim", post(guilds::unclaim_chunk))
// Social: Friends, DMs, Invites, Profiles, Posts
.route("/friends", get(social::list_friends))
.route("/friends/request", post(social::send_friend_request))
.route("/friends/respond", post(social::respond_friend_request))
.route("/friends/{uuid}/accept", post(social::accept_friend_request))
.route("/friends/{uuid}", delete(social::remove_friend))
.route("/messages/{uuid}", get(social::get_direct_messages).post(social::send_direct_message))
.route("/invites", get(social::list_my_game_invites).post(social::send_game_invite))
.route("/invites/{id}/respond", post(social::respond_game_invite))
.route("/profiles/me", put(social::update_my_profile))
.route("/profiles/{uuid}", get(social::get_player_profile))
.route("/profiles/me/posts", post(social::create_user_post))
.route("/profiles/me/posts/{id}", delete(social::delete_user_post))
.route("/posts/{id}/like", post(social::like_user_post))
.route("/social/friends", get(social::list_friends))
.route("/social/friends/request", post(social::send_friend_request))
.route("/social/friends/respond", post(social::respond_friend_request))
.route("/social/messages/{uuid}", get(social::get_direct_messages).post(social::send_direct_message))
.route("/social/profile/me", put(social::update_my_profile))
.route("/social/profile/{uuid}", get(social::get_player_profile))
.route("/social/posts", post(social::create_user_post))
.route("/social/posts/{id}/like", post(social::like_user_post))
.layer(DefaultBodyLimit::max(4 * 1024 * 1024));
let admin = Router::new()
@@ -71,6 +124,13 @@ pub fn api(state: &AppState) -> Router<AppState> {
.route("/modrinth/project/{id}/versions", get(meta::modrinth_versions))
.route("/curseforge/search", get(meta::curseforge_search))
.route("/curseforge/mod/{id}/files", get(meta::curseforge_files))
// Admin Quests & Achievements & Rewards
.route("/rewards", post(leveling::admin_create_reward))
.route("/rewards/{id}", delete(leveling::admin_delete_reward))
.route("/quests", get(quests::admin_list_quests).post(quests::admin_create_quest))
.route("/quests/{id}", put(quests::admin_update_quest).delete(quests::admin_delete_quest))
.route("/achievements", get(achievements::admin_list_achievements).post(achievements::admin_create_achievement))
.route("/achievements/{id}", put(achievements::admin_update_achievement).delete(achievements::admin_delete_achievement))
.layer(DefaultBodyLimit::max(upload_limit));
// Called by the SCOPENET Paper plugin and Fabric/Forge mods.
@@ -78,6 +138,7 @@ pub fn api(state: &AppState) -> Router<AppState> {
.route("/hello", post(servers::hello))
.route("/login", post(servers::login))
.route("/sync", post(servers::sync))
.route("/guilds/check-chunk", post(guilds::server_check_chunk))
.layer(DefaultBodyLimit::max(2 * 1024 * 1024));
Router::new()