summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-26 00:27:45 +0100
committerniliara-edu <nil.jimeno@estudiant.fjaverianas.com>2025-01-26 00:27:45 +0100
commite3f0f700bf2de3b8e7d7c72893a4d6cb128f000d (patch)
treea7262e9c07ebb0541b0a948cb215fe33ef0246c5 /src/main.rs
parent57a2df34f4986f1f6062f22804021925afec0419 (diff)
update
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index 0151c47..595723a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -8,6 +8,14 @@ use dotenv::dotenv;
use std::env;
use std::sync::Arc;
+use utoipa::{
+ openapi::security::{HttpAuthScheme, HttpBuilder, SecurityScheme},
+ Modify, OpenApi, ToSchema,
+};
+
+use utoipa_swagger_ui::SwaggerUi;
+use database::artist::Artist;
+
#[derive(Clone)]
struct AppState {
database: Arc<database::DatabaseWrapper>,
@@ -40,11 +48,47 @@ async fn main() -> std::io::Result<()> {
secret: jwt_secret,
};
+ /* utoipa setup */
+ #[derive(OpenApi)]
+ #[openapi(
+ paths(
+ ),
+ components(
+ schemas(
+ Artist
+ )
+ ),
+ modifiers(&SecurityAddon)
+ )]
+ struct ApiDoc;
+
+ struct SecurityAddon;
+ impl Modify for SecurityAddon {
+ fn modify(&self, openapi : &mut utoipa::openapi::OpenApi) {
+ let components = openapi.components.as_mut().unwrap();
+ components.add_security_scheme(
+ "bearer_auth",
+ SecurityScheme::Http(
+ HttpBuilder::new()
+ .scheme(HttpAuthScheme::Bearer)
+ .bearer_format("JWT")
+ .build()
+ ),
+ );
+ }
+ }
+
+ let openapi = ApiDoc::openapi();
+
/* main server setup */
HttpServer::new(move || {
App::new()
.app_data(web::Data::new(app_state.clone()))
.route("/", web::get().to(root))
+ .service(SwaggerUi::new("/docs/{_:.*}").url(
+ "/docs/openapi.json",
+ openapi.clone(),
+ ))
.service(api::api_scope())
.service(auth::auth_scope())
})