headless_lms_server/
openapi.rs1use utoipa::{
2 Modify, OpenApi,
3 openapi::security::{HttpAuthScheme, HttpBuilder, SecurityScheme},
4};
5
6#[derive(OpenApi)]
7#[openapi(
8 nest(
9 (path = "/api/v0/cms", api = crate::controllers::cms::CmsRoutesApiDoc),
10 (path = "/api/v0/files", api = crate::controllers::files::CmsFilesApiDoc)
11 ),
12 info(
13 title = "CMS API",
14 version = "0.1.0"
15 )
16)]
17pub struct CmsApiDoc;
18
19#[derive(OpenApi)]
20#[openapi(
21 nest(
22 (
23 path = "/api/v0/main-frontend",
24 api = crate::controllers::main_frontend::MainFrontendRoutesApiDoc
25 ),
26 (path = "/api/v0/files", api = crate::controllers::files::FilesApiDoc)
27 ),
28 components(schemas(
29 headless_lms_models::suspected_cheaters::SuspectedCheaterStatus
30 )),
31 tags(
32 (name = "glossary", description = "Glossary endpoints used by main-frontend")
33 ),
34 info(
35 title = "Main Frontend API",
36 version = "0.1.0"
37 )
38)]
39pub struct MainFrontendApiDoc;
40
41#[derive(OpenApi)]
42#[openapi(
43 nest(
44 (
45 path = "/api/v0/course-material",
46 api = crate::controllers::course_material::CourseMaterialRoutesApiDoc
47 )
48 ),
49 components(schemas(
50 headless_lms_models::teacher_grading_decisions::TeacherDecisionType
51 )),
52 info(
53 title = "Course Material API",
54 version = "0.1.0"
55 )
56)]
57pub struct CourseMaterialApiDoc;
58
59#[derive(OpenApi)]
60#[openapi(
61 nest((path = "/api/v0/auth", api = crate::controllers::auth::AuthRoutesApiDoc)),
62 info(
63 title = "Auth API",
64 version = "0.1.0"
65 )
66)]
67pub struct AuthApiDoc;
68
69#[derive(OpenApi)]
70#[openapi(
71 nest((path = "/api/v0/errors", api = crate::controllers::errors::ErrorsRoutesApiDoc)),
72 info(
73 title = "Errors API",
74 version = "0.1.0"
75 )
76)]
77pub struct ErrorsApiDoc;
78
79struct ExerciseServicesClientSecurityAddon;
82
83impl Modify for ExerciseServicesClientSecurityAddon {
84 fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
85 let components = openapi.components.get_or_insert_with(Default::default);
86 components.add_security_scheme(
87 "bearer_auth",
88 SecurityScheme::Http(
89 HttpBuilder::new()
90 .scheme(HttpAuthScheme::Bearer)
91 .description(Some(
92 "Access token passed as an HTTP bearer token in the Authorization header.",
93 ))
94 .build(),
95 ),
96 );
97 }
98}
99
100#[derive(OpenApi)]
101#[openapi(
102 nest((path = "/api/v0/exercise-services/client", api = crate::controllers::exercise_services::client::ExerciseServicesClientRoutesApiDoc)),
103 modifiers(&ExerciseServicesClientSecurityAddon),
104 info(
105 title = "Exercise Services Client API",
106 version = "0.1.0"
107 )
108)]
109pub struct ExerciseServicesClientApiDoc;