mirams 0.1.1

Menhera.org Internet Resources Assignment Management System
Documentation

use crate::store::DbConnection;
use crate::server::Server;
use super::AuthHandler;
use super::fallback_handler;
use super::build_json_response;
use super::User;
use super::ApiResponseVariant;
use super::ApiResponse;

use axum::Router;
use axum::body::Body;
use axum::routing::get;
use axum::extract::Extension as ExtensionExtractor;

use http::Response;


pub fn build_router<T>() -> Router<Server<T>>
where
    T: DbConnection + Clone + Send + Sync + 'static,
{
    let mut router = Router::new();

    router = router.route("/self", get(user_self).layer(AuthHandler::<T>::new_auth_required_layer()));

    router = router.fallback(fallback_handler());

    router
}

pub async fn user_self(ext: Option<ExtensionExtractor<User>>) -> Response<Body> {
    if let Some(ext) = ext {
        let res = ApiResponse {
            error: None,
            result: Some(ApiResponseVariant::User(ext.0)),
        };
        return build_json_response(res, 200);
    } else {
        let res = ApiResponse {
            error: Some("Internal Server Error".to_string()),
            result: None,
        };
        return build_json_response(res, 500);
    }
}