Skip to content

Commit de0411c

Browse files
joeyfigarorobjtede
andauthored
feat: update example api to support GET /users (#629)
Co-authored-by: Rob Ede <robjtede@icloud.com>
1 parent 18a8dba commit de0411c

1 file changed

Lines changed: 29 additions & 2 deletions

File tree

databases/postgres/src/main.rs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,21 @@ mod db {
5656

5757
use crate::{errors::MyError, models::User};
5858

59+
pub async fn get_users(client: &Client) -> Result<Vec<User>, MyError> {
60+
let stmt = include_str!("../sql/get_users.sql");
61+
let stmt = stmt.replace("$table_fields", &User::sql_table_fields());
62+
let stmt = client.prepare(&stmt).await.unwrap();
63+
64+
let results = client
65+
.query(&stmt, &[])
66+
.await?
67+
.iter()
68+
.map(|row| User::from_row_ref(row).unwrap())
69+
.collect::<Vec<User>>();
70+
71+
Ok(results)
72+
}
73+
5974
pub async fn add_user(client: &Client, user_info: User) -> Result<User, MyError> {
6075
let _stmt = include_str!("../sql/add_user.sql");
6176
let _stmt = _stmt.replace("$table_fields", &User::sql_table_fields());
@@ -86,6 +101,14 @@ mod handlers {
86101

87102
use crate::{db, errors::MyError, models::User};
88103

104+
pub async fn get_users(db_pool: web::Data<Pool>) -> Result<HttpResponse, Error> {
105+
let client: Client = db_pool.get().await.map_err(MyError::PoolError)?;
106+
107+
let users = db::get_users(&client).await?;
108+
109+
Ok(HttpResponse::Ok().json(users))
110+
}
111+
89112
pub async fn add_user(
90113
user: web::Json<User>,
91114
db_pool: web::Data<Pool>,
@@ -103,7 +126,7 @@ mod handlers {
103126
use ::config::Config;
104127
use actix_web::{web, App, HttpServer};
105128
use dotenv::dotenv;
106-
use handlers::add_user;
129+
use handlers::{add_user, get_users};
107130
use tokio_postgres::NoTls;
108131

109132
use crate::config::ExampleConfig;
@@ -124,7 +147,11 @@ async fn main() -> std::io::Result<()> {
124147
let server = HttpServer::new(move || {
125148
App::new()
126149
.app_data(web::Data::new(pool.clone()))
127-
.service(web::resource("/users").route(web::post().to(add_user)))
150+
.service(
151+
web::resource("/users")
152+
.route(web::post().to(add_user))
153+
.route(web::get().to(get_users))
154+
)
128155
})
129156
.bind(config.server_addr.clone())?
130157
.run();

0 commit comments

Comments
 (0)