use std::ops::Deref; use reqwest::StatusCode; use rocket::{http::{CookieJar, Status}, State, Response}; use rocket_dyn_templates::{context, Template}; use crate::{ cookies::LANG_COOKIE, i18n::DEFAULT as DEFAULT_LANG, models::{Settings, SessionUser, Database, DatabaseError}, utils::AcceptLanguage, }; #[get("/users/")] pub async fn get_user( user: String, cookies: &CookieJar<'_>, settings: &State, database: &State, accept_language: AcceptLanguage, ) -> Result { let profile_user = match database.get_user_by_name(&user) { Ok(profile_user) => profile_user, Err(DatabaseError::Rusqlite(rusqlite::Error::QueryReturnedNoRows)) => return Err(Status::NotFound), Err(error) => { eprintln!("{:?}", error); return Err(Status::InternalServerError); }, }; Ok(Template::render( "user", context! { profile_user, submissions: database.get_submissions_by_user_name(&user).unwrap(), settings: settings.deref(), lang: cookies .get(LANG_COOKIE) .map(|cookie| vec![cookie.value().to_owned()]) .or(accept_language.0) .unwrap_or_else(|| vec![DEFAULT_LANG.to_owned()]), user: SessionUser::get(cookies).await.unwrap(), }, )) }