From 30595971553e0b712eeb6a5393c5f49ed88295df Mon Sep 17 00:00:00 2001
From: stdpi <stdpi@proton.me>
Date: Wed, 31 Jul 2024 23:35:13 +0700
Subject: [PATCH] fix: tolerate dotenvy load and add "soft" query, and fix some
 metrics

---
 src/main.rs | 41 ++++++++++++++++++++++++++---------------
 1 file changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 300389b..7eb87e0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -43,16 +43,19 @@ static PLACEHOLDER: &[u8] = include_bytes!("placeholder.png");
 
 async fn query(pool: &Pool<MySql>, nick: &String) -> Result<AvatarMeta, tide::Error> {
     let sq: sqlx::Result<(String, i32)> = sqlx::query_as(
-        // "SELECT CONVERT(FROM_BASE64(sk.Value) USING UTF8) as data, 0 as t
-        //     FROM Skins as sk
-        //     WHERE sk.Nick = ?
-        //     LIMIT 1",
-        "SELECT CONVERT(FROM_BASE64(sk.Value) USING UTF8) as data, 0 as t
-        FROM Players AS pl
-        INNER JOIN Skins AS sk
-        ON pl.Skin = sk.Nick
-        WHERE pl.Nick = ?
-        LIMIT 1",
+        if env::var("SOFT_DATABASE").unwrap_or("".to_string()) == "yes" {
+            "SELECT CONVERT(FROM_BASE64(sk.Value) USING UTF8) as data, 0 as t
+            FROM Skins as sk
+            WHERE sk.Nick = ?
+            LIMIT 1"
+        } else {
+            "SELECT CONVERT(FROM_BASE64(sk.Value) USING UTF8) as data, 0 as t
+            FROM Players AS pl
+            INNER JOIN Skins AS sk
+            ON pl.Skin = sk.Nick
+            WHERE pl.Nick = ?
+            LIMIT 1"
+        },
     )
     .bind(nick)
     .fetch_one(pool)
@@ -80,7 +83,7 @@ async fn draw_face(
     met: &AvatarMeta,
 ) -> Result<ImageBuffer<Rgba<u8>, Vec<u8>>, tide::Error> {
     let mut buff = if raw_path.exists() {
-        state.counter_cache.with_label_values(&["hit_raw"]);
+        state.counter_cache.with_label_values(&["hit_raw"]).inc();
         ImageReader::open(raw_path)?
             .with_guessed_format()?
             .decode()?
@@ -128,7 +131,7 @@ struct PlayerQuery {
 }
 
 fn face_err(state: &State, not_ok_str: String) -> tide::Result {
-    state.counter_cache.with_label_values(&["failed"]);
+    state.counter_cache.with_label_values(&["failed"]).inc();
     Ok(Response::builder(404)
         .header(
             "X-Not-Ok",
@@ -222,7 +225,10 @@ async fn face(res: Request<State>) -> tide::Result {
             canvas.write_with_encoder(enc)?;
         }
         if cache_hit {
-            res.state().counter_cache.with_label_values(&["hit_scl"]);
+            res.state()
+                .counter_cache
+                .with_label_values(&["hit_scl"])
+                .inc();
         }
         Ok(Response::builder(200)
             .header("X-Powered-By", "ThiccMC/renskin")
@@ -233,7 +239,10 @@ async fn face(res: Request<State>) -> tide::Result {
             .build())
     } else {
         if cache_hit {
-            res.state().counter_cache.with_label_values(&["hit_rend"]);
+            res.state()
+                .counter_cache
+                .with_label_values(&["hit_rend"])
+                .inc();
         }
         Ok(Response::builder(200)
             .header("X-Powered-By", "ThiccMC/renskin")
@@ -253,7 +262,9 @@ struct State {
 // #[tokio::main]
 #[async_std::main]
 async fn main() -> Result<(), Box<dyn Error>> {
-    dotenvy::dotenv()?;
+    dotenvy::dotenv().ok();
+
+    env::var("DATABASE_URL").expect("DATABASE_URL not found. Yeet!");
 
     fs::create_dir_all("./.cache/moj")?;
     fs::create_dir_all("./.cache/ren")?;