tag2upload_service_manager/
api_routes.rs1
2use crate::prelude::*;
3
4use rocket::serde::json::Json;
5
6#[rocket::post("/hook/gitlab", data="<payload>")]
12async fn hook_gitlab(
13 payload: RoutePayloadParameter<gitlab::Forge2>,
14) -> Result<String, WebError> {
15 payload.webhook_impl().await
16}
17
18#[rocket::get("/internal/db-schema/schema-intended")]
21async fn db_schema_schema_intended(
22 vhost: ui_vhost::UiResult,
23) -> Result<&'static str, WebError> {
24 static MEMO: OnceLock<String> = OnceLock::new();
25 vhost.check(WE::PageNotFoundHere)?;
26 let s = MEMO.get_or_init(|| db_schema::schema());
27 Ok(s)
28}
29
30#[derive(Serialize, Debug)]
31pub struct SchemaVersionApiResponse {
32 pub stored: SchemaVersion,
33 pub intended: SchemaVersion,
34}
35
36#[rocket::get("/internal/db-schema/version")]
37async fn db_schema_version(
38 vhost: ui_vhost::UiResult,
39) -> Result<Json<SchemaVersionApiResponse>, WebError> {
40 vhost.check(WE::PageNotFoundHere)?;
41 let resp = db_transaction(TransactionNature::Readonly, |dbt| {
42 let intended = db_schema::SCHEMA_VERSION;
43 let stored = db_support::get_user_version(&dbt)
44 .map_err(DbError::Sql)?;
45 Ok(SchemaVersionApiResponse {
46 stored,
47 intended,
48 })
49 })?;
50 Ok(Json(resp))
51}
52
53pub fn mount_api(rocket: RocketBuild) -> RocketBuild {
56 rocket.mount("/", rocket::routes![
57 db_schema_schema_intended,
58 db_schema_version,
59 hook_gitlab,
60 ])
61}