add selecting entries from the database

This commit is contained in:
2021-09-03 12:04:39 +02:00
parent 2688fb7cec
commit d95416a0d4
3 changed files with 33 additions and 11 deletions

1
.env Normal file
View File

@@ -0,0 +1 @@
DATABASE_URL=sqlite://db/db.db

View File

@@ -45,22 +45,24 @@ fn error_page(tmpl: web::Data<tera::Tera>, msg: String) -> Result<HttpResponse,
async fn edit_page( async fn edit_page(
tmpl: web::Data<tera::Tera>, tmpl: web::Data<tera::Tera>,
query: web::Query<HashMap<String, String>>, query: web::Query<HashMap<String, String>>,
db_pool: web::Data<Pool<Sqlite>>,
) -> Result<HttpResponse, Error> { ) -> Result<HttpResponse, Error> {
// one uuid: 9228c1a4-8956-4f1c-8b5f-53cc575bd78 // one uuid: 9228c1a4-8956-4f1c-8b5f-53cc575bd78
if let Some(uuid_str) = query.get("uuid") { if let Some(uuid_str) = query.get("uuid") {
// TODO: based on uuid get link from database
let link = "this is the link from the db".to_string();
match Uuid::parse_str(uuid_str) { match Uuid::parse_str(uuid_str) {
Ok(uuid) => { Ok(uuid) => match Link::find_by_uuid(uuid.to_string(), db_pool).await {
let mut ctx = tera::Context::new(); Ok(link) => {
ctx.insert("link", &link); let mut ctx = tera::Context::new();
ctx.insert("uuid", &uuid.to_string()); ctx.insert("link", &link.destination);
let s = tmpl ctx.insert("uuid", &link.uuid);
.render("edit.html", &ctx) let s = tmpl
.map_err(|_| error::ErrorInternalServerError("Template error"))?; .render("edit.html", &ctx)
.map_err(|_| error::ErrorInternalServerError("Template error"))?;
Ok(HttpResponse::Ok().content_type("text/html").body(s)) Ok(HttpResponse::Ok().content_type("text/html").body(s))
} }
Err(err) => error_page(tmpl, format!("db error: {}", err.to_string())),
},
Err(err) => error_page(tmpl, format!("uuid parsing error: {}", err.to_string())), Err(err) => error_page(tmpl, format!("uuid parsing error: {}", err.to_string())),
} }
} else { } else {

View File

@@ -11,6 +11,25 @@ pub struct Link {
} }
impl Link { impl Link {
pub async fn find_by_uuid(
uuid: String,
pool: web::Data<Pool<Sqlite>>,
) -> Result<Link, sqlx::Error> {
let mut tx = pool.begin().await?;
let rec = sqlx::query!(
r#"
SELECT * FROM links WHERE uuid = $1
"#,
uuid
)
.fetch_one(&mut tx)
.await?;
Ok(Link {
uuid: rec.UUID,
destination: rec.DESTINATION,
})
}
pub async fn create(link: Link, pool: web::Data<Pool<Sqlite>>) -> Result<Link, sqlx::Error> { pub async fn create(link: Link, pool: web::Data<Pool<Sqlite>>) -> Result<Link, sqlx::Error> {
let mut tx = pool.begin().await?; let mut tx = pool.begin().await?;
sqlx::query("INSERT INTO links (uuid, destination) VALUES ($1, $2);") sqlx::query("INSERT INTO links (uuid, destination) VALUES ($1, $2);")