use axum::{ Router, middleware, routing::{get, post}, }; use crate::{ auth::{require_bearer_auth, require_runtime_principal_auth}, puzzle_clear::{ advance_puzzle_clear_next_level, create_puzzle_clear_session, execute_puzzle_clear_action, get_puzzle_clear_gallery_detail, get_puzzle_clear_run, get_puzzle_clear_runtime_work, get_puzzle_clear_session, get_puzzle_clear_work, list_puzzle_clear_gallery, list_puzzle_clear_works, mark_puzzle_clear_level_time_up, publish_puzzle_clear_work, retry_puzzle_clear_level, start_puzzle_clear_run, swap_puzzle_clear_cards, }, state::AppState, }; pub fn router(state: AppState) -> Router { Router::new() .route( "/api/creation/puzzle-clear/sessions", post(create_puzzle_clear_session).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/creation/puzzle-clear/sessions/{session_id}", get(get_puzzle_clear_session).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/creation/puzzle-clear/sessions/{session_id}/actions", post(execute_puzzle_clear_action).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/creation/puzzle-clear/works", get(list_puzzle_clear_works).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/creation/puzzle-clear/works/{profile_id}", get(get_puzzle_clear_work).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/creation/puzzle-clear/works/{profile_id}/publish", post(publish_puzzle_clear_work).route_layer(middleware::from_fn_with_state( state.clone(), require_bearer_auth, )), ) .route( "/api/runtime/puzzle-clear/works/{profile_id}", get(get_puzzle_clear_runtime_work), ) .route( "/api/runtime/puzzle-clear/runs", post(start_puzzle_clear_run).route_layer(middleware::from_fn_with_state( state.clone(), require_runtime_principal_auth, )), ) .route( "/api/runtime/puzzle-clear/runs/{run_id}", get(get_puzzle_clear_run).route_layer(middleware::from_fn_with_state( state.clone(), require_runtime_principal_auth, )), ) .route( "/api/runtime/puzzle-clear/runs/{run_id}/swap", post(swap_puzzle_clear_cards).route_layer(middleware::from_fn_with_state( state.clone(), require_runtime_principal_auth, )), ) .route( "/api/runtime/puzzle-clear/runs/{run_id}/retry-level", post(retry_puzzle_clear_level).route_layer(middleware::from_fn_with_state( state.clone(), require_runtime_principal_auth, )), ) .route( "/api/runtime/puzzle-clear/runs/{run_id}/next-level", post(advance_puzzle_clear_next_level).route_layer(middleware::from_fn_with_state( state.clone(), require_runtime_principal_auth, )), ) .route( "/api/runtime/puzzle-clear/runs/{run_id}/time-up", post(mark_puzzle_clear_level_time_up).route_layer(middleware::from_fn_with_state( state.clone(), require_runtime_principal_auth, )), ) .route( "/api/runtime/puzzle-clear/gallery", get(list_puzzle_clear_gallery), ) .route( "/api/runtime/puzzle-clear/gallery/{public_work_code}", get(get_puzzle_clear_gallery_detail), ) }