added vibecoded swagger documentation with utoipa
This commit is contained in:
+89
@@ -21,6 +21,8 @@ use tower_http::{
|
||||
trace::{DefaultMakeSpan, DefaultOnResponse, TraceLayer},
|
||||
};
|
||||
use tracing::Level;
|
||||
use utoipa::OpenApi;
|
||||
use utoipa_swagger_ui::SwaggerUi;
|
||||
|
||||
const MAX_USERNAME_LENGTH: usize = 35;
|
||||
const MAX_ROOM_NAME_LENGTH: usize = 35;
|
||||
@@ -62,6 +64,92 @@ pub struct Cli {
|
||||
pub verbose: bool,
|
||||
}
|
||||
|
||||
/// Define the OpenAPI specification document structure
|
||||
#[derive(OpenApi)]
|
||||
#[openapi(
|
||||
paths(
|
||||
auth::validate_token,
|
||||
routes::friends::list_friends,
|
||||
routes::friends::list_requests,
|
||||
routes::friends::send_request,
|
||||
routes::friends::accept_request,
|
||||
routes::friends::decline_request,
|
||||
routes::friends::is_friend,
|
||||
routes::friends::remove_friend,
|
||||
routes::messages::list_messages,
|
||||
routes::messages::create_message,
|
||||
routes::messages::message_ws_handler,
|
||||
routes::messages::create_message_with_attachments,
|
||||
routes::messages::get_upload,
|
||||
routes::rooms::list_rooms,
|
||||
routes::rooms::create_room,
|
||||
routes::rooms::get_room,
|
||||
routes::rooms::list_invites,
|
||||
routes::rooms::send_invite,
|
||||
routes::rooms::accept_request,
|
||||
routes::rooms::decline_request,
|
||||
routes::rooms::leave_room,
|
||||
routes::rooms::transfer_ownership,
|
||||
routes::rooms::list_members,
|
||||
routes::rooms::delete_room,
|
||||
routes::users::login,
|
||||
routes::users::register_user,
|
||||
routes::users::update_user,
|
||||
routes::users::upload_avatar,
|
||||
routes::users::get_avatar,
|
||||
routes::voice::voice_ws_handler,
|
||||
routes::ws::issue_ws_token,
|
||||
),
|
||||
components(
|
||||
schemas(
|
||||
errors::ErrorResponse,
|
||||
routes::friends::Friend,
|
||||
routes::friends::FriendRequest,
|
||||
routes::friends::SendFriendRequestPayload,
|
||||
routes::friends::AcceptFriendRequestPayload,
|
||||
routes::friends::DeclineFriendRequestPayload,
|
||||
routes::friends::RemoveFriendPayload,
|
||||
routes::messages::Message,
|
||||
routes::messages::Attachment,
|
||||
routes::messages::NewMessagePayload,
|
||||
routes::rooms::Room,
|
||||
routes::rooms::NewRoomPayload,
|
||||
routes::rooms::RoomInvite,
|
||||
routes::rooms::SendRoomInvitePayload,
|
||||
routes::rooms::AcceptRoomInvitePayload,
|
||||
routes::rooms::TransferOwnershipPayload,
|
||||
routes::users::User,
|
||||
routes::users::UserProfile,
|
||||
routes::users::LoginPayload,
|
||||
routes::users::LoginResponse,
|
||||
routes::users::NewUserPayload,
|
||||
routes::users::UpdateUserPayoad,
|
||||
routes::users::UpdateUserResponse,
|
||||
routes::ws::WsAuthQuery,
|
||||
)
|
||||
),
|
||||
modifiers(&SecurityAddon)
|
||||
)]
|
||||
pub struct ApiDoc;
|
||||
|
||||
struct SecurityAddon;
|
||||
|
||||
impl utoipa::Modify for SecurityAddon {
|
||||
fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
|
||||
if let Some(components) = openapi.components.as_mut() {
|
||||
components.add_security_scheme(
|
||||
"bearer_auth",
|
||||
utoipa::openapi::security::SecurityScheme::Http(
|
||||
utoipa::openapi::security::HttpBuilder::new()
|
||||
.scheme(utoipa::openapi::security::HttpAuthScheme::Bearer)
|
||||
.bearer_format("JWT")
|
||||
.build(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Create the app with all routes, middleware and extensions
|
||||
pub fn create_app(
|
||||
db_pool: sqlx::PgPool,
|
||||
@@ -99,6 +187,7 @@ pub fn create_app(
|
||||
.allow_headers([header::AUTHORIZATION, header::CONTENT_TYPE]);
|
||||
|
||||
let mut router = Router::new()
|
||||
.merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", ApiDoc::openapi()))
|
||||
.route("/version", get(get_version))
|
||||
.merge(routes::users::routes())
|
||||
.merge(routes::rooms::routes())
|
||||
|
||||
Reference in New Issue
Block a user