use crate::api::comment::*; use crate::api::community::*; use crate::api::post::*; use crate::api::site::*; use crate::api::user::*; use crate::api::{Oper, Perform}; use actix_web::{web, HttpResponse}; use diesel::r2d2::{ConnectionManager, Pool}; use diesel::PgConnection; use failure::Error; use serde::Serialize; type DbParam = web::Data>>; #[rustfmt::skip] pub fn config(cfg: &mut web::ServiceConfig) { cfg // Site .route("/api/v1/site", web::get().to(route_get::)) .route("/api/v1/categories", web::get().to(route_get::)) .route("/api/v1/modlog", web::get().to(route_get::)) .route("/api/v1/search", web::get().to(route_get::)) // Community .route("/api/v1/community", web::post().to(route_post::)) .route("/api/v1/community", web::get().to(route_get::)) .route("/api/v1/community", web::put().to(route_post::)) .route("/api/v1/community/list", web::get().to(route_get::)) .route("/api/v1/community/follow", web::post().to(route_post::)) // Post .route("/api/v1/post", web::post().to(route_post::)) .route("/api/v1/post", web::put().to(route_post::)) .route("/api/v1/post", web::get().to(route_get::)) .route("/api/v1/post/list", web::get().to(route_get::)) .route("/api/v1/post/like", web::post().to(route_post::)) .route("/api/v1/post/save", web::put().to(route_post::)) // Comment .route("/api/v1/comment", web::post().to(route_post::)) .route("/api/v1/comment", web::put().to(route_post::)) .route("/api/v1/comment/like", web::post().to(route_post::)) .route("/api/v1/comment/save", web::put().to(route_post::)) // User .route("/api/v1/user", web::get().to(route_get::)) .route("/api/v1/user/mention", web::get().to(route_get::)) .route("/api/v1/user/mention", web::put().to(route_post::)) .route("/api/v1/user/replies", web::get().to(route_get::)) .route("/api/v1/user/followed_communities", web::get().to(route_get::)) // Mod actions .route("/api/v1/community/transfer", web::post().to(route_post::)) .route("/api/v1/community/ban_user", web::post().to(route_post::)) .route("/api/v1/community/mod", web::post().to(route_post::)) // Admin actions .route("/api/v1/site", web::post().to(route_post::)) .route("/api/v1/site", web::put().to(route_post::)) .route("/api/v1/site/transfer", web::post().to(route_post::)) .route("/api/v1/site/config", web::get().to(route_get::)) .route("/api/v1/site/config", web::put().to(route_post::)) .route("/api/v1/admin/add", web::post().to(route_post::)) .route("/api/v1/user/ban", web::post().to(route_post::)) // User account actions .route("/api/v1/user/login", web::post().to(route_post::)) .route("/api/v1/user/register", web::post().to(route_post::)) .route("/api/v1/user/delete_account", web::post().to(route_post::)) .route("/api/v1/user/password_reset", web::post().to(route_post::)) .route("/api/v1/user/password_change", web::post().to(route_post::)) .route("/api/v1/user/mark_all_as_read", web::post().to(route_post::)) .route("/api/v1/user/save_user_settings", web::put().to(route_post::)); } fn perform(data: Request, db: DbParam) -> Result where Response: Serialize, Oper: Perform, { let conn = match db.get() { Ok(c) => c, Err(e) => return Err(format_err!("{}", e)), }; let oper: Oper = Oper::new(data); let response = oper.perform(&conn); Ok(HttpResponse::Ok().json(response?)) } async fn route_get( data: web::Query, db: DbParam, ) -> Result where Data: Serialize, Response: Serialize, Oper: Perform, { perform::(data.0, db) } async fn route_post( data: web::Json, db: DbParam, ) -> Result where Data: Serialize, Response: Serialize, Oper: Perform, { perform::(data.0, db) }