You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.4 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. use actix_web::{get, post, web, HttpResponse};
  2. use crate::actions;
  3. use crate::models;
  4. use crate::types::DbPool;
  5. use actix_web::error::ResponseError;
  6. use std::rc::Rc;
  7. /// Finds user by UID.
  8. #[get("/api/authzd/users/get/{user_id}")]
  9. pub async fn get_user(
  10. pool: web::Data<DbPool>,
  11. user_uid: web::Path<i32>,
  12. ) -> Result<HttpResponse, impl ResponseError> {
  13. let user_uid = user_uid.into_inner();
  14. // use web::block to offload blocking Diesel code without blocking server thread
  15. let res = web::block(move || {
  16. let conn = pool.get()?;
  17. actions::find_user_by_uid(user_uid, &conn)
  18. })
  19. .await
  20. .and_then(|maybe_user| {
  21. if let Some(user) = maybe_user {
  22. Ok(HttpResponse::Ok().json(user))
  23. } else {
  24. let res = HttpResponse::NotFound()
  25. .body(format!("No user found with uid: {}", user_uid));
  26. Ok(res)
  27. }
  28. });
  29. res
  30. }
  31. #[get("/api/authzd/users/get")]
  32. pub async fn get_all_users(
  33. pool: web::Data<DbPool>,
  34. ) -> Result<HttpResponse, impl ResponseError> {
  35. // use web::block to offload blocking Diesel code without blocking server thread
  36. let res = web::block(move || {
  37. let conn = pool.get()?;
  38. actions::get_all(&conn)
  39. })
  40. .await
  41. .and_then(|maybe_users| {
  42. debug!("{:?}", maybe_users);
  43. if let Some(users) = maybe_users {
  44. if users.is_empty() {
  45. let res = HttpResponse::NotFound()
  46. .json(models::ErrorModel::new(40, "No users available"));
  47. // let res = crate::errors::DomainError::new_generic_error("".to_owned());
  48. Ok(res)
  49. } else {
  50. Ok(HttpResponse::Ok().json(users))
  51. }
  52. } else {
  53. let res = HttpResponse::NotFound()
  54. .json(models::ErrorModel::new(40, "No users available"));
  55. Ok(res)
  56. }
  57. });
  58. res
  59. }
  60. /// Inserts new user with name defined in form.
  61. #[post("/do_registration")]
  62. pub async fn add_user(
  63. pool: web::Data<DbPool>,
  64. form: web::Json<models::NewUser>,
  65. ) -> Result<HttpResponse, impl ResponseError> {
  66. // use web::block to offload blocking Diesel code without blocking server thread
  67. let user = web::block(move || {
  68. let conn = pool.get()?;
  69. actions::insert_new_user(Rc::new(form.0), &conn)
  70. })
  71. .await
  72. .and_then(|user| {
  73. debug!("{:?}", user);
  74. Ok(HttpResponse::Created().json(user))
  75. });
  76. user
  77. }