diff options
author | Curly Bryce <curlybryce@protonmail.com> | 2024-07-02 20:13:13 -0600 |
---|---|---|
committer | Curly Bryce <curlybryce@protonmail.com> | 2024-07-02 20:13:13 -0600 |
commit | 5bd4ddc7627ae1114d15f6f0485b2cef571be1b7 (patch) | |
tree | a4566a5ea8c685994ec175ffb1b49ca1e46ff809 /src | |
parent | 37bee342bb8ce8a487a150fb236eca5b0dc82266 (diff) | |
download | poko_server-5bd4ddc7627ae1114d15f6f0485b2cef571be1b7.tar.gz poko_server-5bd4ddc7627ae1114d15f6f0485b2cef571be1b7.tar.bz2 poko_server-5bd4ddc7627ae1114d15f6f0485b2cef571be1b7.zip |
users can have same name. Get users by name or user by UID
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/src/main.rs b/src/main.rs index 7b5809a..603d714 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ #[macro_use] extern crate rocket; -use std::{fs::File, io::Write}; +use std::{fs::File, io::Write, vec}; use rocket::{http::Status, serde::json::Json, State}; use serde::{Deserialize, Serialize}; @@ -93,24 +93,38 @@ impl DB { DB { uid_generator: uid::Generator::new(), users: vec![] } } - async fn get_user(&self, name: &str) -> Result<User, String> { + async fn get_user(&self, id: &str) -> Result<User, String> { + match UID::from(id.to_string()) { + Ok(n) => { + for u in self.users.clone() { + if u.id == n { + return Ok(u) + } + } + }, + Err(_) => (), + } + + Err("Not Found".into()) + } + async fn get_user_by_name(&self, name: &str) -> Result<Vec<User>, String> { + let mut vec = vec![]; for u in self.users.clone() { if u.name == name { - return Ok(u) + vec.push(u) } } - Err("Not Found".into()) + if vec.len() == 0 { + Err("Not Found".into()) + } else { + return Ok(vec) + } + } async fn new_user(&mut self, name: String, id: UID) -> Result<(), String> { let user = User::new(name, id); - for u in self.users.clone() { - if u.name == user.name { - return Err("Name taken".to_string()) - } - } - self.users.push(user); self.save().await } @@ -129,6 +143,14 @@ async fn get_user(user: &str, db: &State<Mutex<DB>>) -> (Status, Result<Json<Use Err(n) => (Status::NotFound, Err(n.into())) } } +#[get("/user/by_name/<user>")] +async fn get_users_by_name(user: &str, db: &State<Mutex<DB>>) -> (Status, Result<Json<Vec<User>>, Json<String>>) { + let db = db.lock().await; + match db.get_user_by_name(user).await { + Ok(n) => (Status::Ok, Ok(n.into())), + Err(n) => (Status::NotFound, Err(n.into())) + } +} fn default_id() -> String { "random".into() @@ -178,7 +200,7 @@ async fn new_user(data: Json<UserForm>, db: &State<Mutex<DB>>) -> (Status, Resul Some(n) => { match db.new_user(data.name.clone(), n).await { // User has been created - Ok(_) => return (Status::Ok, Ok(())), + Ok(_) => return (Status::Created, Ok(())), // Could not create user Err(n) => return (Status::InternalServerError, Err(n.into())), } @@ -188,5 +210,5 @@ async fn new_user(data: Json<UserForm>, db: &State<Mutex<DB>>) -> (Status, Resul #[launch] fn rocket() -> _ { - rocket::build().manage(Mutex::new(DB::load())).mount("/", routes![index, new_user, get_user]) + rocket::build().manage(Mutex::new(DB::load())).mount("/", routes![index, new_user, get_user, get_users_by_name]) }
\ No newline at end of file |