aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs46
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