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 admin::list_users,
49 admin::delete_user,
50 document_box::create,
52 document_box::get,
53 document_box::stats,
54 document_box::delete,
55 document_box::search,
56 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::create,
75 folder::get,
76 folder::get_edit_history,
77 folder::update,
78 folder::delete,
79 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::get,
90 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}