scaffold: Backend API routes, DB queries, and middleware stubs
88 handler stubs across 13 route files, 66 DB query stubs across 11 modules, auth/license extractors, and rate limit middleware. All bodies are todo!() — ready for Phase 1b implementation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
48
backend/src/api/auth.rs
Normal file
48
backend/src/api/auth.rs
Normal file
@@ -0,0 +1,48 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::post,
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/login", post(login))
|
||||
.route("/register", post(register))
|
||||
.route("/verify-totp", post(verify_totp))
|
||||
.route("/refresh", post(refresh))
|
||||
.route("/setup-totp", post(setup_totp))
|
||||
.route("/backup-codes", post(backup_codes))
|
||||
.route("/logout", post(logout))
|
||||
}
|
||||
|
||||
async fn login() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn register() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn verify_totp() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn refresh() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn setup_totp() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn backup_codes() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn logout() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
38
backend/src/api/license.rs
Normal file
38
backend/src/api/license.rs
Normal file
@@ -0,0 +1,38 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(get_license_info))
|
||||
.route("/activate", post(activate_license))
|
||||
.route("/check-in", post(check_in))
|
||||
.route("/subdomain", put(update_subdomain))
|
||||
.route("/custom-domain", put(update_custom_domain))
|
||||
}
|
||||
|
||||
async fn get_license_info() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn activate_license() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn check_in() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_subdomain() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_custom_domain() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
23
backend/src/api/logs.rs
Normal file
23
backend/src/api/logs.rs
Normal file
@@ -0,0 +1,23 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::get,
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(query_logs))
|
||||
.route("/export", get(export_logs))
|
||||
}
|
||||
|
||||
async fn query_logs() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn export_logs() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
48
backend/src/api/maps.rs
Normal file
48
backend/src/api/maps.rs
Normal file
@@ -0,0 +1,48 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{delete, get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(list_maps))
|
||||
.route("/upload", post(upload_map))
|
||||
.route("/{id}", get(get_map))
|
||||
.route("/{id}", delete(delete_map))
|
||||
.route("/{id}/download", get(download_map))
|
||||
.route("/rotation/{server_id}", get(get_map_rotation))
|
||||
.route("/rotation/{server_id}", put(update_map_rotation))
|
||||
}
|
||||
|
||||
async fn list_maps() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn upload_map() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_map() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn delete_map() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn download_map() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_map_rotation() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_map_rotation() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
13
backend/src/api/mod.rs
Normal file
13
backend/src/api/mod.rs
Normal file
@@ -0,0 +1,13 @@
|
||||
pub mod auth;
|
||||
pub mod servers;
|
||||
pub mod wipes;
|
||||
pub mod maps;
|
||||
pub mod plugins;
|
||||
pub mod panels;
|
||||
pub mod schedules;
|
||||
pub mod logs;
|
||||
pub mod public;
|
||||
pub mod team;
|
||||
pub mod notifications;
|
||||
pub mod license;
|
||||
pub mod store;
|
||||
33
backend/src/api/notifications.rs
Normal file
33
backend/src/api/notifications.rs
Normal file
@@ -0,0 +1,33 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(get_notification_config))
|
||||
.route("/", put(update_notification_config))
|
||||
.route("/test/discord", post(test_discord))
|
||||
.route("/test/pushbullet", post(test_pushbullet))
|
||||
}
|
||||
|
||||
async fn get_notification_config() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_notification_config() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn test_discord() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn test_pushbullet() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
43
backend/src/api/panels.rs
Normal file
43
backend/src/api/panels.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{delete, get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(list_panels))
|
||||
.route("/", post(create_panel))
|
||||
.route("/{id}", put(update_panel))
|
||||
.route("/{id}", delete(delete_panel))
|
||||
.route("/{id}/test", post(test_panel))
|
||||
.route("/{id}/discover", get(discover_panel))
|
||||
}
|
||||
|
||||
async fn list_panels() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn create_panel() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_panel() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn delete_panel() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn test_panel() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn discover_panel() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
43
backend/src/api/plugins.rs
Normal file
43
backend/src/api/plugins.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{delete, get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(list_plugins))
|
||||
.route("/install", post(install_plugin))
|
||||
.route("/{id}", put(update_plugin))
|
||||
.route("/{id}", delete(delete_plugin))
|
||||
.route("/{id}/reload", post(reload_plugin))
|
||||
.route("/search", get(search_umod))
|
||||
}
|
||||
|
||||
async fn list_plugins() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn install_plugin() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_plugin() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn delete_plugin() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn reload_plugin() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn search_umod() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
58
backend/src/api/public.rs
Normal file
58
backend/src/api/public.rs
Normal file
@@ -0,0 +1,58 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::get,
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/servers", get(list_public_servers))
|
||||
.route("/servers/{id}", get(get_public_server))
|
||||
.route("/servers/{id}/wipe-schedule", get(get_wipe_schedule))
|
||||
.route("/servers/{id}/countdown", get(get_countdown))
|
||||
.route("/servers/{id}/map", get(get_current_map))
|
||||
.route("/servers/{id}/players", get(get_players))
|
||||
.route("/servers/{id}/mods", get(get_mods))
|
||||
.route("/servers/{id}/motd", get(get_motd))
|
||||
.route("/servers/{id}/store", get(get_store))
|
||||
}
|
||||
|
||||
async fn list_public_servers() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_public_server() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_wipe_schedule() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_countdown() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_current_map() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_players() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_mods() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_motd() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_store() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
53
backend/src/api/schedules.rs
Normal file
53
backend/src/api/schedules.rs
Normal file
@@ -0,0 +1,53 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{delete, get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(list_schedules))
|
||||
.route("/", post(create_schedule))
|
||||
.route("/{id}", get(get_schedule))
|
||||
.route("/{id}", put(update_schedule))
|
||||
.route("/{id}", delete(delete_schedule))
|
||||
.route("/{id}/toggle", post(toggle_schedule))
|
||||
.route("/calendar", get(get_calendar))
|
||||
.route("/conflicts", get(get_conflicts))
|
||||
}
|
||||
|
||||
async fn list_schedules() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn create_schedule() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_schedule() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_schedule() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn delete_schedule() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn toggle_schedule() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_calendar() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_conflicts() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
53
backend/src/api/servers.rs
Normal file
53
backend/src/api/servers.rs
Normal file
@@ -0,0 +1,53 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(list_servers))
|
||||
.route("/{id}", get(get_server))
|
||||
.route("/{id}", put(update_server))
|
||||
.route("/{id}/command", post(send_command))
|
||||
.route("/{id}/plugins", get(get_server_plugins))
|
||||
.route("/{id}/start", post(start_server))
|
||||
.route("/{id}/stop", post(stop_server))
|
||||
.route("/{id}/restart", post(restart_server))
|
||||
}
|
||||
|
||||
async fn list_servers() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_server() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_server() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn send_command() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_server_plugins() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn start_server() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn stop_server() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn restart_server() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
73
backend/src/api/store.rs
Normal file
73
backend/src/api/store.rs
Normal file
@@ -0,0 +1,73 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{delete, get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/config", get(get_store_config))
|
||||
.route("/config", put(update_store_config))
|
||||
.route("/categories", get(list_categories))
|
||||
.route("/categories", post(create_category))
|
||||
.route("/categories/{id}", put(update_category))
|
||||
.route("/categories/{id}", delete(delete_category))
|
||||
.route("/items", get(list_items))
|
||||
.route("/items", post(create_item))
|
||||
.route("/items/{id}", put(update_item))
|
||||
.route("/items/{id}", delete(delete_item))
|
||||
.route("/transactions", get(list_transactions))
|
||||
.route("/webhook/paypal", post(paypal_webhook))
|
||||
}
|
||||
|
||||
async fn get_store_config() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_store_config() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn list_categories() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn create_category() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_category() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn delete_category() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn list_items() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn create_item() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_item() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn delete_item() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn list_transactions() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn paypal_webhook() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
53
backend/src/api/team.rs
Normal file
53
backend/src/api/team.rs
Normal file
@@ -0,0 +1,53 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{delete, get, post, put},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/", get(list_members))
|
||||
.route("/invite", post(invite_member))
|
||||
.route("/{id}/role", put(update_member_role))
|
||||
.route("/{id}", delete(remove_member))
|
||||
.route("/roles", get(list_roles))
|
||||
.route("/roles", post(create_role))
|
||||
.route("/roles/{id}", put(update_role))
|
||||
.route("/roles/{id}", delete(delete_role))
|
||||
}
|
||||
|
||||
async fn list_members() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn invite_member() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_member_role() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn remove_member() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn list_roles() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn create_role() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn update_role() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn delete_role() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
43
backend/src/api/wipes.rs
Normal file
43
backend/src/api/wipes.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
routing::{get, post},
|
||||
Router,
|
||||
};
|
||||
|
||||
use crate::models::error::ApiResult;
|
||||
use crate::AppState;
|
||||
|
||||
pub fn router() -> Router<Arc<AppState>> {
|
||||
Router::new()
|
||||
.route("/{server_id}/trigger", post(trigger_wipe))
|
||||
.route("/{server_id}/dry-run", post(dry_run_wipe))
|
||||
.route("/{wipe_id}/rollback", post(rollback_wipe))
|
||||
.route("/{wipe_id}/status", get(get_wipe_status))
|
||||
.route("/history", get(get_wipe_history))
|
||||
.route("/history/{id}", get(get_wipe_history_detail))
|
||||
}
|
||||
|
||||
async fn trigger_wipe() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn dry_run_wipe() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn rollback_wipe() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_wipe_status() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_wipe_history() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn get_wipe_history_detail() -> ApiResult<impl axum::response::IntoResponse> {
|
||||
todo!()
|
||||
}
|
||||
Reference in New Issue
Block a user