Fixes
This commit is contained in:
parent
4451a3cf3d
commit
2da103d5b5
9
Cargo.lock
generated
9
Cargo.lock
generated
@ -180,6 +180,7 @@ dependencies = [
|
|||||||
"itoa",
|
"itoa",
|
||||||
"pq-sys",
|
"pq-sys",
|
||||||
"r2d2",
|
"r2d2",
|
||||||
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -425,9 +426,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.8.3"
|
version = "0.8.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924"
|
checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"adler2",
|
"adler2",
|
||||||
]
|
]
|
||||||
@ -662,9 +663,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.13.2"
|
version = "1.14.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
|
checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socket2"
|
name = "socket2"
|
||||||
|
@ -7,7 +7,7 @@ edition = "2021"
|
|||||||
anyhow = "1.0.95"
|
anyhow = "1.0.95"
|
||||||
async-trait = "0.1.86"
|
async-trait = "0.1.86"
|
||||||
axum = { version = "0.8.1", features = ["json"] }
|
axum = { version = "0.8.1", features = ["json"] }
|
||||||
diesel = { version = "2.2.7", features = ["postgres", "r2d2"] }
|
diesel = { version = "2.2.7", features = ["postgres", "r2d2", "serde_json"] }
|
||||||
dotenvy = "0.15.7"
|
dotenvy = "0.15.7"
|
||||||
r2d2 = "0.8.10"
|
r2d2 = "0.8.10"
|
||||||
serde = { version = "1.0.217", features = ["derive"] }
|
serde = { version = "1.0.217", features = ["derive"] }
|
||||||
|
@ -26,8 +26,8 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_all(&self) -> Result<impl IntoResponse> {
|
pub async fn get_all(&self) -> Result<impl IntoResponse, String> {
|
||||||
let entities = self.service.get_all().await?;
|
let entities = self.service.get_all().await.map_err(|err| err.to_string())?;
|
||||||
Ok((StatusCode::OK, Json(entities)))
|
Ok((StatusCode::OK, Json(entities)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
use diesel::prelude::*;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub trait BaseEntity {
|
pub trait BaseEntity {
|
||||||
|
@ -18,8 +18,7 @@ async fn main() {
|
|||||||
let user_controller = Arc::new(UserController::new(user_service));
|
let user_controller = Arc::new(UserController::new(user_service));
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.merge(UserController::routes())
|
.merge(UserController::routes(user_controller.clone()));
|
||||||
.with_state(user_controller);
|
|
||||||
|
|
||||||
let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||||
serve(listener, app).await.unwrap();
|
serve(listener, app).await.unwrap();
|
||||||
|
@ -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 axum::routing::get;
|
||||||
use crate::base::controller::BaseController;
|
use crate::base::controller::BaseController;
|
||||||
|
|
||||||
@ -16,14 +20,24 @@ impl UserController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn routes() -> Router {
|
pub fn routes(state: Arc<UserController>) -> Router {
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/users", get(Self::get_users))
|
.route("/users", get(Self::get_users))
|
||||||
|
.with_state(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_users(
|
async fn get_users(
|
||||||
State(controller): State<Arc<UserController>>,
|
State(controller): State<Arc<UserController>>,
|
||||||
) -> impl IntoResponse {
|
) -> Result<Json<Vec<User>>, (StatusCode, Json<String>)> {
|
||||||
controller.base_controller.get_all().await
|
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())))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ use crate::base::entity::BaseEntity;
|
|||||||
use super::schema::users;
|
use super::schema::users;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)]
|
#[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)]
|
||||||
#[diesel(table_name = users)]
|
#[diesel(table_name = users, primary_key(id))]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
@ -16,3 +16,11 @@ impl BaseEntity for User {
|
|||||||
self.id
|
self.id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Identifiable for User {
|
||||||
|
type Id = i32;
|
||||||
|
|
||||||
|
fn id(self) -> Self::Id {
|
||||||
|
self.id
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
diesel::table! {
|
use diesel::table;
|
||||||
|
|
||||||
|
table! {
|
||||||
users (id) {
|
users (id) {
|
||||||
id -> Int4,
|
id -> Integer,
|
||||||
name -> Varchar,
|
name -> Varchar,
|
||||||
email -> Varchar,
|
email -> Varchar,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user