Skip to content
Snippets Groups Projects

Feat/fe connect

Merged Dominik Ujházy requested to merge feat/fe-connect into develop
21 files
+ 491
1987
Compare changes
  • Side-by-side
  • Inline
Files
21
@@ -9,10 +9,13 @@ use askama::Template;
use strum::IntoEnumIterator;
use crate::models::Category;
use crate::repositories::video::models::{SelectVideoManyFilter, SortBy};
use crate::repositories::video::models::{SelectVideoManyFilter, SelectVideoManyFilterRaw, SortBy};
use crate::repositories::video::repository::PgVideoRepository;
use crate::templates::IndexTemplate;
use crate::utils::auth_handler::AuthHandler;
use crate::utils::params_mapper::{
map_select_video_many_filter_raw_to_mapper, map_sort_by_to_string,
};
use crate::utils::query_process::filter_videos;
#[get("/")]
@@ -20,31 +23,29 @@ pub async fn get_index(
data: HttpRequest,
video_repo: Data<PgVideoRepository>,
) -> ActixResult<HttpResponse> {
let parsed_params = web::Query::<SelectVideoManyFilter>::from_query(data.query_string())
.unwrap_or(web::Query(SelectVideoManyFilter::default()));
let parsed_params =
web::Query::<SelectVideoManyFilterRaw>::from_query(data.query_string()).unwrap();
let cookies = data.cookies().map(|c| c.to_owned()).unwrap_or_default();
let auth = AuthHandler::new(cookies);
let user_info = auth.get_user_info_from_token();
let videos = filter_videos(parsed_params.clone(), video_repo, auth.is_user_premium());
let mapped_params = map_select_video_many_filter_raw_to_mapper(parsed_params.clone());
let videos = filter_videos(mapped_params.clone(), video_repo, auth.is_user_premium());
let template = IndexTemplate {
categories: Category::iter().map(|c| c.to_string()).collect(),
category: parsed_params
category: mapped_params
.category
.clone()
.unwrap_or(Category::Vanilla)
.to_string(),
search: parsed_params
title_substring: mapped_params
.title_substring
.clone()
.unwrap_or(String::from("")),
sort_by: parsed_params
.sort_by
.clone()
.unwrap_or(SortBy::Newest)
.to_string(),
sort_by: map_sort_by_to_string(mapped_params.sort_by.clone().unwrap_or(SortBy::Newest)),
already_logged_in: auth.user_logged_in(),
user_info,
videos,
@@ -64,13 +65,25 @@ struct FilterVideosForm {
pub async fn filter_index_videos(
user_input: web::Form<FilterVideosForm>,
data: HttpRequest,
video_repo: Data<PgVideoRepository>,
) -> ActixResult<HttpResponse> {
let parsed_params = web::Query::<SelectVideoManyFilter>::from_query(data.query_string())
.unwrap_or(web::Query(SelectVideoManyFilter::default()));
let parsed_params =
web::Query::<SelectVideoManyFilterRaw>::from_query(data.query_string()).unwrap();
let mapped_params = map_select_video_many_filter_raw_to_mapper(parsed_params.clone());
let cookies = data.cookies().map(|c| c.to_owned()).unwrap_or_default();
let auth = AuthHandler::new(cookies);
let videos = filter_videos(mapped_params.clone(), video_repo, auth.is_user_premium());
let template = crate::templates::VideosTemplate { videos };
let body = template.render().map_err(ErrorInternalServerError)?;
let redirect_url = format!(
"/?category={}&title_substring={}&sort_by={}",
parsed_params.category.clone().unwrap_or(Category::Vanilla),
mapped_params.category.clone().unwrap_or(Category::Vanilla),
user_input.search,
user_input.sort
);
@@ -78,5 +91,5 @@ pub async fn filter_index_videos(
Ok(HttpResponse::Ok()
.content_type("text/html")
.append_header(("HX-Push-Url", redirect_url))
.body(""))
.body(body))
}
Loading