summaryrefslogtreecommitdiff
path: root/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/hello.rs11
-rw-r--r--src/routes/song.rs56
2 files changed, 56 insertions, 11 deletions
diff --git a/src/routes/hello.rs b/src/routes/hello.rs
deleted file mode 100644
index c356081..0000000
--- a/src/routes/hello.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-use crate::AppState;
-use actix_web::{get, web, HttpResponse};
-use serde::Deserialize;
-
-#[get("/hello")]
-pub async fn hello_actix(app_state: web::Data<AppState>) -> HttpResponse {
- struct Song {
- }
-
- return HttpResponse::Ok().json(databases);
-}
diff --git a/src/routes/song.rs b/src/routes/song.rs
new file mode 100644
index 0000000..f0630e9
--- /dev/null
+++ b/src/routes/song.rs
@@ -0,0 +1,56 @@
+use crate::routes::Song;
+use crate::AppState;
+use actix_web::{get, web, HttpResponse};
+use serde::Deserialize;
+
+#[derive(Deserialize)]
+struct SongQueryOptions {
+ id: Option<String>,
+ name: Option<String>,
+}
+
+#[get("/song")]
+pub async fn song(
+ app_state: web::Data<AppState>,
+ get_args: web::Query<SongQueryOptions>,
+) -> HttpResponse {
+ let search_attempt: sqlx::Result<Vec<Song>>;
+
+ match true {
+ _ if check_if_exists(&get_args.id) => {
+ search_attempt = sqlx::query_as!(
+ Song,
+ "SELECT name, lyrics FROM song WHERE id=?",
+ &get_args.id,
+ )
+ .fetch_all(&app_state.pool)
+ .await;
+ }
+ _ if check_if_exists(&get_args.name) => {
+ search_attempt = sqlx::query_as!(
+ Song,
+ "SELECT name, lyrics FROM song WHERE LOWER(name) LIKE '%' + LOWER(?) + '%'",
+ &get_args.name,
+ )
+ .fetch_all(&app_state.pool)
+ .await;
+ }
+ _ => {
+ search_attempt = sqlx::query_as!(Song, "SELECT name, lyrics FROM song",)
+ .fetch_all(&app_state.pool)
+ .await;
+ }
+ };
+
+ match search_attempt {
+ Ok(song_list) => HttpResponse::Ok().json(song_list),
+ Err(e) => HttpResponse::Ok().body(format!("{}", e)),
+ }
+}
+
+fn check_if_exists(value: &Option<String>) -> bool {
+ match value {
+ Some(_) => true,
+ None => false,
+ }
+}