This commit is contained in:
Nicolai Van der Storm
2025-02-18 13:01:57 +01:00
parent 4451a3cf3d
commit 2da103d5b5
8 changed files with 40 additions and 17 deletions

View File

@@ -1,4 +1,8 @@
use axum::Router;
use std::sync::Arc;
use axum::extract::State;
use axum::http::StatusCode;
use axum::{Json, Router};
use axum::routing::get;
use crate::base::controller::BaseController;
@@ -16,14 +20,24 @@ impl UserController {
}
}
pub fn routes() -> Router {
pub fn routes(state: Arc<UserController>) -> Router {
Router::new()
.route("/users", get(Self::get_users))
.with_state(state)
}
async fn get_users(
State(controller): State<Arc<UserController>>,
) -> impl IntoResponse {
controller.base_controller.get_all().await
) -> Result<Json<Vec<User>>, (StatusCode, Json<String>)> {
match controller.base_controller.get_all().await {
Ok(users) => {
// Wrap the users in Json, which implements IntoResponse
Ok(Json(users))
}
Err(err) => {
// In case of error, return StatusCode with Json error message
Err((StatusCode::INTERNAL_SERVER_ERROR, Json(err.to_string())))
}
}
}
}

View File

@@ -4,7 +4,7 @@ use crate::base::entity::BaseEntity;
use super::schema::users;
#[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)]
#[diesel(table_name = users)]
#[diesel(table_name = users, primary_key(id))]
pub struct User {
pub id: i32,
pub name: String,
@@ -15,4 +15,12 @@ impl BaseEntity for User {
fn id(&self) -> i32 {
self.id
}
}
impl Identifiable for User {
type Id = i32;
fn id(self) -> Self::Id {
self.id
}
}

View File

@@ -1,6 +1,8 @@
diesel::table! {
use diesel::table;
table! {
users (id) {
id -> Int4,
id -> Integer,
name -> Varchar,
email -> Varchar,
}