52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
use std::sync::Arc;
|
|
|
|
use crate::routes::user::controller::UserController;
|
|
use crate::routes::user::model::{User, UserResponse};
|
|
use crate::routes::user::service::UserService;
|
|
use axum::http::StatusCode;
|
|
use axum::routing::get;
|
|
use axum::{serve, Router};
|
|
use config::db::init_db;
|
|
use dotenvy::dotenv;
|
|
use tokio::net::TcpListener;
|
|
use utoipa::OpenApi;
|
|
use utoipa_swagger_ui::SwaggerUi;
|
|
|
|
mod base;
|
|
mod config;
|
|
mod routes;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
dotenv().ok();
|
|
let pool = init_db();
|
|
|
|
let hc_router = Router::new().route("/", get(health_check));
|
|
|
|
let user_service = UserService::new(pool);
|
|
let user_controller = Arc::new(UserController::new(user_service));
|
|
|
|
let app = Router::new()
|
|
.merge(UserController::routes(user_controller.clone()))
|
|
.merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", ApiDoc::openapi()))
|
|
.nest("/hc", hc_router);
|
|
|
|
let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
|
serve(listener, app).await.unwrap();
|
|
|
|
async fn health_check() -> StatusCode {
|
|
StatusCode::OK
|
|
}
|
|
|
|
#[derive(OpenApi)]
|
|
#[openapi(
|
|
components(
|
|
schemas(User, UserResponse)
|
|
),
|
|
tags(
|
|
(name = "users", description = "User management endpoints")
|
|
)
|
|
)]
|
|
struct ApiDoc;
|
|
}
|