1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
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<Json<Vec<Account>>, (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<Account>),
#[response(status = 400, content_type = "text")]
BadRequest(String),
}
#[post("/account", data = "<account>", format = "json")]
pub async fn create_account(
account: Json<Account>,
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}"
)),
}
}
|