simplify search more and add more convenience views.
This commit is contained in:
parent
0e170c0428
commit
4d8706d6bf
3 changed files with 9 additions and 15 deletions
|
@ -1,4 +1,5 @@
|
||||||
create view if not exists w as select julid_string(id) id, kind, title, metadata_url, length, release_date, last_updated from watches;
|
create view if not exists w as select julid_string(id) id, kind, title, metadata_url, length, release_date, last_updated from watches;
|
||||||
create view if not exists s as select julid_string(id) id, name, born, died from stars;
|
create view if not exists s as select julid_string(id) id, name, born, died from stars;
|
||||||
create view if not exists u as select julid_string(id) id, username, displayname, email, last_seen, last_updated from users;
|
create view if not exists u as select julid_string(id) id, username, displayname, email, last_seen, last_updated from users;
|
||||||
create view if not exists i as select julid_string(id) id, julid_string(owner) owner, expires_at, remaining, last_updated from invites;
|
create view if not exists i as select julid_string(invites.id) id, users.username, expires_at, remaining, invites.last_updated from invites inner join users on users.id = owner;
|
||||||
|
create view if not exists q as select users.username, watches.title from watch_quests inner join users on users.id = user inner join watches on watch = watches.id;
|
||||||
|
|
|
@ -6,6 +6,7 @@ pub async fn handle_slash_redir() -> impl IntoResponse {
|
||||||
Redirect::to("/")
|
Redirect::to("/")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[axum::debug_handler]
|
||||||
pub async fn handle_slash(auth: AuthSession) -> impl IntoResponse {
|
pub async fn handle_slash(auth: AuthSession) -> impl IntoResponse {
|
||||||
if let Some(ref user) = auth.user {
|
if let Some(ref user) = auth.user {
|
||||||
let name = &user.username;
|
let name = &user.username;
|
||||||
|
|
|
@ -29,8 +29,6 @@ pub struct SearchQuery {
|
||||||
pub title: Option<String>,
|
pub title: Option<String>,
|
||||||
#[serde(default, deserialize_with = "empty_string_as_none")]
|
#[serde(default, deserialize_with = "empty_string_as_none")]
|
||||||
pub year: Option<String>,
|
pub year: Option<String>,
|
||||||
#[serde(default, deserialize_with = "empty_string_as_none")]
|
|
||||||
pub person: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_search_watch(
|
pub async fn get_search_watch(
|
||||||
|
@ -39,20 +37,14 @@ pub async fn get_search_watch(
|
||||||
Query(search): Query<SearchQuery>,
|
Query(search): Query<SearchQuery>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
let user = auth.user;
|
let user = auth.user;
|
||||||
let SearchQuery {
|
let SearchQuery { title, year } = &search;
|
||||||
title,
|
|
||||||
year,
|
|
||||||
person,
|
|
||||||
} = &search;
|
|
||||||
|
|
||||||
let watches: Vec<Watch> = match (title, year, person) {
|
let watches: Vec<Watch> = match (title, year) {
|
||||||
(Some(title), None, None) => sqlx::query_as(
|
(Some(title), None) => sqlx::query_as(
|
||||||
"select * from watches where id in (select id from watch_search where title match ? order by rank)").bind(
|
"select * from watches where id in (select id from watch_search where title match ? order by rank)").bind(
|
||||||
title).fetch_all(&pool).await.unwrap_or_default(),
|
title.trim()).fetch_all(&pool).await.unwrap_or_default(),
|
||||||
(Some(title), Some(year), None) => {todo!()},
|
(Some(title), Some(year)) => sqlx::query_as("select * from watches where id in (select id from watch_search where title match ? order by rank) and release_date = ?").bind(title.trim()).bind(year.trim()).fetch_all(&pool).await.unwrap_or_default(),
|
||||||
(None, Some(year), None) => {todo!()},
|
(None, Some(year)) => sqlx::query_as("select * from watches where release_date = ? order by title").bind(year.trim()).fetch_all(&pool).await.unwrap_or_default(),
|
||||||
(None, Some(year), Some(person)) => {todo!()},
|
|
||||||
(Some(title), Some(year), Some(person)) => {todo!()}
|
|
||||||
_ => sqlx::query_as("select * from (select * from watches order by random() limit 50) order by release_date asc").fetch_all(&pool).await.unwrap_or_default()
|
_ => sqlx::query_as("select * from (select * from watches order by random() limit 50) order by release_date asc").fetch_all(&pool).await.unwrap_or_default()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue