use crate::dtos::*; use crate::product_repo; use crate::types::DbPool; use actix_web::{get, patch, post, web, Error, HttpResponse, Responder}; #[get("/")] async fn hello() -> impl Responder { HttpResponse::Ok().body("Hey, this is an API!") } #[get("/products")] async fn get_products(pool: web::Data) -> Result { let conn = pool.get().expect("Couldn't get DB connection from pool."); let products: Vec = web::block(move || product_repo::read_products(&conn)) .await .map_err(|e| { eprintln!("{}", e); HttpResponse::InternalServerError().body(e.to_string()) })? .into_iter() .map(|p| p.into()) .collect(); Ok(HttpResponse::Ok().json(products)) } #[patch("/products/{id}")] async fn update_product( _pool: web::Data, id: web::Path, updated_product: web::Json, ) -> Result { dbg!(id, updated_product); Ok(HttpResponse::Ok().finish()) } #[post("/products")] async fn create_product( _pool: web::Data, new_product: web::Json, ) -> Result { dbg!(new_product); Ok(HttpResponse::Ok().finish()) }