1
0
mirror of https://github.com/actix/actix-website synced 2025-02-11 23:59:38 +01:00

65 lines
1.6 KiB
Rust
Raw Normal View History

2020-09-12 16:21:54 +01:00
// <handler>
fn insert_new_user(db: &SqliteConnection, user: CreateUser) -> Result<User, Error> {
use self::schema::users::dsl::*;
// Create insertion model
let uuid = format!("{}", uuid::Uuid::new_v4());
let new_user = models::NewUser {
id: &uuid,
name: &user.name,
};
// normal diesel operations
diesel::insert_into(users)
.values(&new_user)
.execute(&self.0)
.expect("Error inserting person");
let mut items = users
.filter(id.eq(&uuid))
.load::<models::User>(&self.0)
.expect("Error loading person");
Ok(items.pop().unwrap())
}
// </handler>
// <main>
type DbPool = r2d2::Pool<ConnectionManager<SqliteConnection>>;
#[actix_web::main]
async fn main() -> io::Result<()> {
// Create connection pool
let pool = r2d2::Pool::builder()
.build(manager)
.expect("Failed to create pool.");
// Start HTTP server
HttpServer::new(move || {
2022-04-07 15:55:55 +01:00
App::new().app_data(web::Data::new(pool.clone()))
2020-09-12 16:21:54 +01:00
.resource("/{name}", web::get().to(index))
})
2022-02-26 03:56:24 +00:00
.bind(("127.0.0.1", 8080))?
2020-09-12 16:21:54 +01:00
.run()
.await
}
// </main>
// <index>
2020-09-25 00:53:32 +02:00
async fn index(pool: web::Data<DbPool>, name: web::Path<(String)>) -> impl Responder {
2020-09-12 16:21:54 +01:00
let name = name.into_inner();
let user = web::block(move || {
let conn = pool.get().expect("couldn't get db connection from pool");
actions::insert_new_user(&conn, &user)
2020-09-12 16:21:54 +01:00
.await
.map_err(|e| {
eprintln!("{}", e);
HttpResponse::InternalServerError().finish()
}
})?;
2020-09-12 16:21:54 +01:00
Ok(HttpResponse::Ok().json(user))
}
// </index>