use axum::{ Router, extract::DefaultBodyLimit, middleware, routing::{get, patch, post}, }; use crate::{ editor_project::EDITOR_LAYOUT_REQUEST_BODY_MAX_BYTES, external_api_auth::require_external_api_key, external_assets_api::{ confirm_external_asset_object, create_external_direct_upload_ticket, get_external_asset_read_url, }, external_editor_api::{ create_external_editor_asset, create_external_editor_asset_folder, create_external_editor_project, create_external_editor_project_resource, delete_external_editor_asset, delete_external_editor_asset_folder, delete_external_editor_project, edit_external_editor_image, extract_external_editor_ui_design_assets, generate_external_editor_background_music, generate_external_editor_character_animation, generate_external_editor_icon_spritesheet, generate_external_editor_image, generate_external_editor_sound_effect, generate_external_editor_video, get_external_editor_asset_library, get_external_editor_project, list_external_editor_projects, load_recent_external_editor_project, openapi_json, rename_external_editor_project, save_external_editor_canvas, update_external_editor_asset, update_external_editor_asset_folder, }, state::AppState, }; pub fn router(state: AppState) -> Router { Router::new() .route("/api/external/v1/openapi.json", get(openapi_json)) .route( "/api/external/v1/assets/direct-upload-tickets", post(create_external_direct_upload_ticket).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/assets/objects/confirm", post(confirm_external_asset_object).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/assets/read-url", get(get_external_asset_read_url).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/projects", get(list_external_editor_projects) .post(create_external_editor_project) .route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/projects/recent", get(load_recent_external_editor_project).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/projects/{project_id}", get(get_external_editor_project) .delete(delete_external_editor_project) .route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/projects/{project_id}/metadata", patch(rename_external_editor_project).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/projects/{project_id}/canvas", patch(save_external_editor_canvas) .layer(DefaultBodyLimit::max(EDITOR_LAYOUT_REQUEST_BODY_MAX_BYTES)) .route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/projects/{project_id}/resources", post(create_external_editor_project_resource).route_layer( middleware::from_fn_with_state(state.clone(), require_external_api_key), ), ) .route( "/api/external/v1/editor/assets/library", get(get_external_editor_asset_library).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/assets/folders", post(create_external_editor_asset_folder).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/assets/folders/{folder_id}", patch(update_external_editor_asset_folder) .delete(delete_external_editor_asset_folder) .route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/assets", post(create_external_editor_asset).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/assets/{asset_id}", patch(update_external_editor_asset) .delete(delete_external_editor_asset) .route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/images/generations", post(generate_external_editor_image).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/images/edits", post(edit_external_editor_image).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/icon-spritesheets/generations", post(generate_external_editor_icon_spritesheet).route_layer( middleware::from_fn_with_state(state.clone(), require_external_api_key), ), ) .route( "/api/external/v1/editor/ui-designs/assets/extractions", post(extract_external_editor_ui_design_assets).route_layer( middleware::from_fn_with_state(state.clone(), require_external_api_key), ), ) .route( "/api/external/v1/editor/character-animations/generations", post(generate_external_editor_character_animation).route_layer( middleware::from_fn_with_state(state.clone(), require_external_api_key), ), ) .route( "/api/external/v1/editor/videos/generations", post(generate_external_editor_video).route_layer(middleware::from_fn_with_state( state.clone(), require_external_api_key, )), ) .route( "/api/external/v1/editor/audios/sound-effects/generations", post(generate_external_editor_sound_effect).route_layer( middleware::from_fn_with_state(state.clone(), require_external_api_key), ), ) .route( "/api/external/v1/editor/audios/background-music/generations", post(generate_external_editor_background_music).route_layer( middleware::from_fn_with_state(state, require_external_api_key), ), ) }