diff --git a/actix/src/database.rs b/actix/src/database.rs index 09145f2..7dbebca 100644 --- a/actix/src/database.rs +++ b/actix/src/database.rs @@ -13,9 +13,14 @@ pub struct DBRow { } // Find a single URL -pub fn find_url(shortlink: &str, db: &Connection) -> (Option, Option) { +pub fn find_url(shortlink: &str, db: &Connection, needhits: bool) -> (Option, Option) { + let query = if needhits { + "SELECT long_url,hits FROM urls WHERE short_url = ?1" + } else { + "SELECT long_url FROM urls WHERE short_url = ?1" + }; let mut statement = db - .prepare_cached("SELECT long_url,hits FROM urls WHERE short_url = ?1") + .prepare_cached(query) .expect("Error preparing SQL statement for find_url."); let longlink = statement diff --git a/actix/src/services.rs b/actix/src/services.rs index 4c99d81..dfd44e9 100644 --- a/actix/src/services.rs +++ b/actix/src/services.rs @@ -137,7 +137,7 @@ pub async fn getall( pub async fn expand(req: String, data: web::Data, http: HttpRequest) -> HttpResponse { let result = utils::is_api_ok(http); if result.success { - let linkinfo = utils::get_longurl(req, &data.db); + let linkinfo = utils::get_longurl(req, &data.db, true); if let Some(longlink) = linkinfo.0 { let body = LinkInfo { success: true, @@ -192,7 +192,7 @@ pub async fn link_handler( data: web::Data, ) -> impl Responder { let shortlink_str = shortlink.to_string(); - if let Some(longlink) = utils::get_longurl(shortlink_str, &data.db).0 { + if let Some(longlink) = utils::get_longurl(shortlink_str, &data.db, false).0 { let redirect_method = env::var("redirect_method").unwrap_or(String::from("PERMANENT")); database::add_hit(shortlink.as_str(), &data.db); if redirect_method == "TEMPORARY" { diff --git a/actix/src/utils.rs b/actix/src/utils.rs index 2534b3f..7bbb412 100644 --- a/actix/src/utils.rs +++ b/actix/src/utils.rs @@ -80,9 +80,9 @@ pub fn is_api_ok(http: HttpRequest) -> Response { } // Request the DB for searching an URL -pub fn get_longurl(shortlink: String, db: &Connection) -> (Option, Option) { +pub fn get_longurl(shortlink: String, db: &Connection, needhits: bool) -> (Option, Option) { if validate_link(&shortlink) { - database::find_url(shortlink.as_str(), db) + database::find_url(shortlink.as_str(), db, needhits) } else { (None, None) } @@ -124,7 +124,7 @@ pub fn add_link(req: String, db: &Connection) -> (bool, String) { } if validate_link(chunks.shortlink.as_str()) - && get_longurl(chunks.shortlink.clone(), db).0.is_none() + && get_longurl(chunks.shortlink.clone(), db, false).0.is_none() { ( database::add_link(chunks.shortlink.clone(), chunks.longlink, db),