diff --git a/server/src/err.rs b/server/src/err.rs deleted file mode 100644 index b0b5f54..0000000 --- a/server/src/err.rs +++ /dev/null @@ -1,34 +0,0 @@ -use std::{error, fmt}; -use rocket::response::{self, Responder, Response}; -use rocket::http::Status; -use rocket::request::Request; - - -// Generic Error responders - -#[derive(Debug, Clone)] -pub struct DbResponse { - pub err_msg: &'static str -} - -pub type DbError = std::result::Result; - - -impl fmt::Display for DbResponse { - fn fmt(&self, f:&mut fmt::Formatter) -> fmt::Result { - write!(f, "Database error") - } -} -impl error::Error for DbResponse { - fn source(&self) -> Option<&(dyn error::Error + 'static)> { - None - } -} -impl<'r> Responder<'r> for DbResponse { - fn respond_to(self, _:&Request) -> response::Result<'r> { - Response::build() - .status(Status::InternalServerError) - .raw_header("db-error", self.err_msg) - .ok() - } -} \ No newline at end of file diff --git a/server/src/users.rs b/server/src/users.rs deleted file mode 100644 index eb8c035..0000000 --- a/server/src/users.rs +++ /dev/null @@ -1,98 +0,0 @@ -use chrono::Utc; -use std::env; -use rocket_contrib::json::{Json, JsonValue}; -use diesel::{self, prelude::*}; -use diesel::result::Error; - -use crate::utils::{encode_param, new_key}; -use crate::models::{User, USER_OFFLINE}; -use crate::{DBConn, schema}; - -pub fn create_new_user(new_name: String) -> User { - /* - * Should only eveer be called under good circumstances - */ - use schema::users::dsl::*; - use crate::models::InsertableUser; - - let conn = MysqlConnection::establish(&env::var("DATABASE_URL").unwrap()).unwrap(); - let ins = InsertableUser { - name: new_name, - secret: encode_param(&new_key()), - date: Utc::now().timestamp() as u64, - status: USER_OFFLINE, - }; - // insert the nwe user data then return usable user data to the client - let _inserted_user = diesel::insert_into(users) - .values(&ins) - .execute(&conn); - - let new_user_data : Result = users - .filter(date.eq(ins.date)) - .first(&conn); - - match new_user_data { - Ok(data) => data, - Err(_e) => panic!("User could not be found with date of {}", ins.date) - } -} - - -#[delete("/remove/")] -pub fn remove_user(hash: u64, conn: DBConn) -> JsonValue { - // Attempt to remove the user first - use schema::users::dsl::*; - use diesel::result::Error; - - let res: Result = diesel::delete(users.filter(id.eq(hash))).execute(&conn.0); - match res { - Ok(_res) => json!({"staus":"ok"}), - Err(_e) => json!({"status":"err"}), - } -} - - -// TODO: optional paramter where we can specify getting the offline users as well -// TODO: More optionally specify what kind of users we want online/offline/away etc. -#[get("/list")] -pub fn get_user_list(conn: DBConn) -> Json> { - use schema::users::dsl::*; - - let db_response: Result, Error> = users.select((id, name, status)) - .filter(status.ne(USER_OFFLINE)) - .load::<(u64, String, i32)>(&conn.0); - - match db_response { - Ok(data) => Json(data), - Err(_e) => Json(vec!()) - } -} - -#[cfg(test)] -mod user_tests { - use super::*; - use rocket; - use rocket::local::Client; - use rocket::http::Status; - - macro_rules! rocket_inst { - ($func:expr) => { - rocket::ignite() - .mount("/users", routes![$func]) - .attach(DBConn::fairing()) - } - } - - - #[test] - fn get_user_list() { - let app = rocket_inst!(get_user_list); - let client = Client::new(app).expect("Bad rocket instance"); - - let mut response = client.get("/users/list").dispatch(); - let body: String = response.body_string().unwrap(); - assert_eq!(response.status(), Status::Ok); - println!("{}", body); - } - -}