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::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 document_box::create,
50 document_box::get,
51 document_box::stats,
52 document_box::delete,
53 document_box::search,
54 file::upload,
56 file::create_presigned,
57 file::get_presigned,
58 file::get,
59 file::get_children,
60 file::get_edit_history,
61 file::update,
62 file::get_raw,
63 file::get_raw_presigned,
64 file::get_raw_named,
65 file::delete,
66 file::get_generated,
67 file::get_generated_raw,
68 file::get_generated_raw_presigned,
69 file::get_generated_raw_named,
70 file::search,
71 folder::create,
73 folder::get,
74 folder::get_edit_history,
75 folder::update,
76 folder::delete,
77 link::create,
79 link::get,
80 link::get_metadata,
81 link::get_favicon,
82 link::get_image,
83 link::get_edit_history,
84 link::update,
85 link::delete,
86 task::get,
88 utils::get_options,
90 utils::health,
91 utils::server_details,
92 )
93)]
94#[allow(unused)]
95pub struct ApiDoc;
96
97#[test]
98#[ignore = "generates api documentation"]
99fn generate_api_docs() {
100 let docs = ApiDoc::openapi().to_pretty_json().unwrap();
101 std::fs::write("docbox.json", docs).unwrap();
102}