generated from t/malachite
add: working chat ui
This commit is contained in:
parent
f53eb3d367
commit
b360c5e737
14 changed files with 319 additions and 53 deletions
|
@ -11,6 +11,7 @@ use axum::{
|
|||
response::{Html, IntoResponse},
|
||||
};
|
||||
use axum_extra::extract::CookieJar;
|
||||
use serde::Deserialize;
|
||||
use tetratto_core::model::Error;
|
||||
|
||||
pub async fn list_request(
|
||||
|
@ -106,33 +107,21 @@ pub async fn single_message_request(
|
|||
}
|
||||
};
|
||||
|
||||
let mut chat = match data.get_chat_by_id(message.chat).await {
|
||||
Ok(x) => x,
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
};
|
||||
|
||||
if !chat.last_message_read_by.contains(&user.id) {
|
||||
// update chat
|
||||
chat.last_message_read_by.push(user.id);
|
||||
if let Err(e) = data
|
||||
.update_chat_last_message_read_by(user.id, chat.last_message_read_by)
|
||||
.await
|
||||
{
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
}
|
||||
|
||||
let mut ctx = default_context(&data.0.0, &build_code, &Some(user));
|
||||
ctx.insert("message", &message);
|
||||
Ok(Html(tera.render("message.lisp", &ctx).unwrap()))
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct MessagesProps {
|
||||
pub use_id: String,
|
||||
}
|
||||
|
||||
pub async fn messages_request(
|
||||
jar: CookieJar,
|
||||
Extension(data): Extension<State>,
|
||||
Path((id, before)): Path<(usize, usize)>,
|
||||
Query(props): Query<MessagesProps>,
|
||||
) -> impl IntoResponse {
|
||||
let (ref data, ref tera, ref build_code) = *data.read().await;
|
||||
let user = match get_user_from_token!(jar, data.2) {
|
||||
|
@ -142,7 +131,11 @@ pub async fn messages_request(
|
|||
}
|
||||
};
|
||||
|
||||
let messages = match data.get_messages_by_chat_before(id, before, 12, 0).await {
|
||||
let messages = match if before > 0 {
|
||||
data.get_messages_by_chat_before(id, before, 12, 0).await
|
||||
} else {
|
||||
data.get_messages_by_chat(id, 12, 0).await
|
||||
} {
|
||||
Ok(x) => x,
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
|
@ -150,6 +143,42 @@ pub async fn messages_request(
|
|||
};
|
||||
|
||||
let mut ctx = default_context(&data.0.0, &build_code, &Some(user));
|
||||
|
||||
ctx.insert(
|
||||
"first_message_time",
|
||||
&match messages.first() {
|
||||
Some(x) => x.created,
|
||||
None => 0,
|
||||
},
|
||||
);
|
||||
|
||||
ctx.insert("messages", &messages);
|
||||
ctx.insert("id", &props.use_id);
|
||||
|
||||
Ok(Html(tera.render("messages.lisp", &ctx).unwrap()))
|
||||
}
|
||||
|
||||
pub async fn read_receipt_request(
|
||||
jar: CookieJar,
|
||||
Extension(data): Extension<State>,
|
||||
Path(id): Path<usize>,
|
||||
) -> impl IntoResponse {
|
||||
let (ref data, ref tera, ref build_code) = *data.read().await;
|
||||
let user = match get_user_from_token!(jar, data.2) {
|
||||
Some(x) => x,
|
||||
None => {
|
||||
return Err(render_error(Error::NotAllowed, tera, data.0.0.clone(), None).await);
|
||||
}
|
||||
};
|
||||
|
||||
let chat = match data.get_chat_by_id(id).await {
|
||||
Ok(x) => x,
|
||||
Err(e) => {
|
||||
return Err(render_error(e, tera, data.0.0.clone(), Some(user)).await);
|
||||
}
|
||||
};
|
||||
|
||||
let mut ctx = default_context(&data.0.0, &build_code, &Some(user));
|
||||
ctx.insert("chat", &chat);
|
||||
Ok(Html(tera.render("read_receipt.lisp", &ctx).unwrap()))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue