Skip to main content

docbox_http/
docs.rs

1use utoipa::OpenApi;
2
3use crate::{
4    models::document_box::DocumentBoxScope,
5    routes::{
6        admin::{self, ADMIN_TAG},
7        document_box::{self, DOCUMENT_BOX_TAG},
8        file::{self, FILE_TAG},
9        folder::{self, FOLDER_TAG},
10        link::{self, LINK_TAG},
11        task::{self, TASK_TAG},
12        utils::{self, UTILS_TAG},
13    },
14};
15
16#[derive(OpenApi)]
17#[openapi(
18    info(
19        title = "Docbox API",
20        description = "Docbox HTTP API",
21        license(
22            name = "MIT",
23            url = "https://raw.githubusercontent.com/docbox-nz/docbox/refs/heads/main/LICENSE.md",
24        )
25    ),
26    tags(
27        (name = DOCUMENT_BOX_TAG, description = "Document box related APIs"),
28        (name = FILE_TAG, description = "File related APIs"),
29        (name = LINK_TAG, description = "Link related APIs"),
30        (name = FOLDER_TAG, description = "Folder related APIs"),
31        (name = TASK_TAG, description = "Background task related APIs"),
32        (name = ADMIN_TAG, description = "Administrator and higher privilege APIs"),
33        (name = UTILS_TAG, description = "Utility APIs")
34    ),
35    components(
36        schemas(DocumentBoxScope)
37    ),
38    paths(
39        // Admin routes
40        admin::tenant_stats,
41        admin::tenant_boxes,
42        admin::search_tenant,
43        admin::reprocess_octet_stream_files_tenant,
44        admin::rebuild_search_index_tenant,
45        admin::flush_database_pool_cache,
46        admin::flush_tenant_cache,
47        admin::http_purge_expired_presigned_tasks,
48        admin::list_users,
49        admin::delete_user,
50        // Document box routes
51        document_box::create,
52        document_box::get,
53        document_box::stats,
54        document_box::delete,
55        document_box::search,
56        // File routes
57        file::upload,
58        file::create_presigned,
59        file::get_presigned,
60        file::get,
61        file::get_children,
62        file::get_edit_history,
63        file::update,
64        file::get_raw,
65        file::get_raw_presigned,
66        file::get_raw_named,
67        file::delete,
68        file::get_generated,
69        file::get_generated_raw,
70        file::get_generated_raw_presigned,
71        file::get_generated_raw_named,
72        file::search,
73        // Folder routes
74        folder::create,
75        folder::get,
76        folder::get_edit_history,
77        folder::update,
78        folder::delete,
79        // Link routes
80        link::create,
81        link::get,
82        link::get_metadata,
83        link::get_favicon,
84        link::get_image,
85        link::get_edit_history,
86        link::update,
87        link::delete,
88        // Task routes
89        task::get,
90        // Utils routes
91        utils::get_options,
92        utils::health,
93        utils::server_details,
94    )
95)]
96#[allow(unused)]
97pub struct ApiDoc;
98
99#[test]
100#[ignore = "generates api documentation"]
101fn generate_api_docs() {
102    let docs = ApiDoc::openapi().to_pretty_json().unwrap();
103    std::fs::write("docbox.json", docs).unwrap();
104}