1
0
Files
AstralRinth/src/routes/v1/mod.rs
Orchid system (Emma) 5d48ecf86a Project Perses (API v1 yeetenings): parts 4 and 5 (#554)
* Project Perses (API v1 yeetenings): parts 4 and 5

Resolves MOD-219
Resolves MOD-220

* Note to Emma: Please test your stuff
2023-03-02 10:50:46 -07:00

96 lines
3.0 KiB
Rust

use actix_web::{dev::Service, http::Method, web, HttpResponse};
use chrono::{Timelike, Utc};
use futures::FutureExt;
mod mods;
mod tags;
mod teams;
mod users;
mod versions;
pub fn v1_config(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("api/v1")
.wrap_fn(|req, srv| {
let time = Utc::now();
if req.method() == Method::GET && time.hour12().1 < 6 && time.minute() % 10 < 5 {
srv.call(req).boxed_local()
} else {
async {
Ok(
req.into_response(
HttpResponse::Gone()
.content_type("application/json")
.body(r#"{"error":"api_deprecated","description":"You are using an application that uses an outdated version of Modrinth's API. Please either update it or switch to another application. For developers: https://docs.modrinth.com/docs/migrations/v1-to-v2/"}"#)
)
)
}.boxed_local()
}
})
.configure(tags_config)
.configure(mods_config)
.configure(versions_config)
.configure(teams_config)
.configure(users_config)
.configure(notifications_config),
);
}
pub fn tags_config(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("tag")
.service(tags::category_list)
.service(tags::loader_list)
.service(tags::game_version_list)
.service(super::tags::license_list)
.service(super::tags::report_type_list),
);
}
pub fn mods_config(cfg: &mut web::ServiceConfig) {
cfg.service(mods::mod_search);
cfg.service(mods::mods_get);
cfg.service(
web::scope("mod")
.service(mods::mod_get)
.service(web::scope("{mod_id}").service(versions::version_list)),
);
}
pub fn versions_config(cfg: &mut web::ServiceConfig) {
cfg.service(versions::versions_get);
cfg.service(web::scope("version").service(versions::version_get));
cfg.service(
web::scope("version_file")
.service(super::version_file::get_version_from_hash),
);
}
pub fn users_config(cfg: &mut web::ServiceConfig) {
cfg.service(super::users::user_auth_get);
cfg.service(super::users::users_get);
cfg.service(
web::scope("user")
.service(super::users::user_get)
.service(users::mods_list)
.service(super::users::user_notifications)
.service(users::user_follows),
);
}
pub fn teams_config(cfg: &mut web::ServiceConfig) {
cfg.service(web::scope("team").service(teams::team_members_get));
}
pub fn notifications_config(cfg: &mut web::ServiceConfig) {
cfg.service(super::notifications::notifications_get);
cfg.service(
web::scope("notification")
.service(super::notifications::notification_get),
);
}