use schist_models::account::Account; use schist_queries::accounts::{get_all_accounts as get_all_accounts_query, insert_accounts}; use rocket::http::Status; use rocket::serde::json::Json; use rocket::{get, post, Responder}; use crate::databases::UserDataDb; #[get("/account")] pub async fn get_all_accounts(user_data_db: UserDataDb) -> Result>, (Status, String)> { user_data_db .run(get_all_accounts_query) .await .map(Json) .map_err(|err| (Status::InternalServerError, err.to_string())) } #[derive(Responder)] pub enum CreateAccountResponder { #[response(status = 500, content_type = "text")] InternalServerError(String), #[response(status = 202, content_type = "json")] Created(Json), #[response(status = 400, content_type = "text")] BadRequest(String), } #[post("/account", data = "", format = "json")] pub async fn create_account( account: Json, user_data_db: UserDataDb, ) -> CreateAccountResponder { let account = account.into_inner(); let accounts_vec = vec![account.clone()]; let num_rows_inserted = user_data_db .run(move |connection| insert_accounts(&accounts_vec, connection)) .await; match num_rows_inserted { Ok(_) => CreateAccountResponder::Created(Json(account)), Err(err) => CreateAccountResponder::InternalServerError(format!( "Error creating account: {err}" )), } }