feat: add create post requests
This commit is contained in:
@@ -18,6 +18,7 @@ serde.workspace = true
|
||||
http.workspace = true
|
||||
cfg-if.workspace = true
|
||||
thiserror.workspace = true
|
||||
uuid.workspace = true
|
||||
reqwest = { version = "0.12.11", optional = true, features = ["json"] }
|
||||
serde_json = { version = "1.0.134", optional = true }
|
||||
web-sys = { version = "0.3.76", features = [
|
||||
|
@@ -49,7 +49,9 @@ pub fn ErrorTemplate(
|
||||
cfg_if! { if #[cfg(feature="ssr")] {
|
||||
let response = use_context::<ResponseOptions>();
|
||||
if let Some(response) = response {
|
||||
response.set_status(errors[0].status_code());
|
||||
if let Some(resp) = errors.first() {
|
||||
response.set_status(resp.status_code());
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
use std::any::Any;
|
||||
|
||||
use crate::error_template::{AppError, ErrorTemplate};
|
||||
|
||||
use leptos::{either::Either, ev::SubmitEvent, html, prelude::*};
|
||||
@@ -71,7 +73,18 @@ fn smooth_scroll_to_bottom() {
|
||||
|
||||
#[component]
|
||||
pub fn HomePage() -> impl IntoView {
|
||||
let messages = Resource::new(|| (), move |_| get_messages());
|
||||
let conversation_id = uuid::Uuid::new_v4();
|
||||
|
||||
let send_message = ServerAction::<SendMessage>::new();
|
||||
|
||||
let messages = Resource::new(
|
||||
move || (send_message.version().get()),
|
||||
move |_| {
|
||||
get_messages(GetMessagesRequest {
|
||||
conversation_id: conversation_id.clone(),
|
||||
})
|
||||
},
|
||||
);
|
||||
|
||||
let existing_messages = move || {
|
||||
Suspend::new(async move {
|
||||
@@ -111,19 +124,30 @@ pub fn HomePage() -> impl IntoView {
|
||||
})
|
||||
};
|
||||
|
||||
let (_, set_messages) = signal(
|
||||
message::get_messages()
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(index, value)| (index, ArcRwSignal::new(value)))
|
||||
.collect::<Vec<_>>(),
|
||||
);
|
||||
// let (_, set_messages) = signal(
|
||||
// message::get_messages()
|
||||
// .into_iter()
|
||||
// .enumerate()
|
||||
// .map(|(index, value)| (index, ArcRwSignal::new(value)))
|
||||
// .collect::<Vec<_>>(),
|
||||
// );
|
||||
let (input, set_input) = signal("".to_string());
|
||||
|
||||
let on_submit = move |ev: SubmitEvent| {
|
||||
// stop the page from reloading!
|
||||
ev.prevent_default();
|
||||
|
||||
leptos::logging::log!("sending request");
|
||||
send_message.dispatch(SendMessage {
|
||||
request: SendMessageRequest {
|
||||
conversation_id: Some(conversation_id.clone()),
|
||||
role: "user".into(),
|
||||
content: input.get(),
|
||||
},
|
||||
});
|
||||
|
||||
set_input.set("".into());
|
||||
|
||||
// let messages_len = messages.get().len();
|
||||
// let mut messages = set_messages.write();
|
||||
// messages.push((
|
||||
@@ -134,8 +158,6 @@ pub fn HomePage() -> impl IntoView {
|
||||
// }),
|
||||
// ));
|
||||
|
||||
// set_input.set("".into());
|
||||
|
||||
// request_animation_frame(move || {
|
||||
// smooth_scroll_to_bottom();
|
||||
// });
|
||||
@@ -196,20 +218,47 @@ pub fn HomePage() -> impl IntoView {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
pub struct GetMessagesRequest {
|
||||
conversation_id: uuid::Uuid,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
pub struct Messages {
|
||||
pub messages: Vec<Message>,
|
||||
}
|
||||
|
||||
#[server]
|
||||
pub async fn get_messages() -> Result<Messages, ServerFnError> {
|
||||
let messages: Messages =
|
||||
reqwest::get("https://lebusiness-service.prod.kjuulh.app/api/messages")
|
||||
.await
|
||||
.map_err(|e| ServerFnError::new(e.to_string()))?
|
||||
.json()
|
||||
.await
|
||||
.map_err(|e| ServerFnError::new(e.to_string()))?;
|
||||
pub async fn get_messages(req: GetMessagesRequest) -> Result<Messages, ServerFnError> {
|
||||
let messages: Vec<Message> = reqwest::get(format!(
|
||||
"https://lebusiness-service.prod.kjuulh.app/api/messages?conversation_id={}",
|
||||
req.conversation_id,
|
||||
))
|
||||
.await
|
||||
.map_err(|e| ServerFnError::new(e.to_string()))?
|
||||
.json()
|
||||
.await
|
||||
.map_err(|e| ServerFnError::new(e.to_string()))?;
|
||||
|
||||
Ok(messages)
|
||||
Ok(Messages { messages })
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
pub struct SendMessageRequest {
|
||||
conversation_id: Option<uuid::Uuid>,
|
||||
role: String,
|
||||
content: String,
|
||||
}
|
||||
|
||||
#[server]
|
||||
pub async fn send_message(request: SendMessageRequest) -> Result<(), ServerFnError> {
|
||||
let client = reqwest::Client::new();
|
||||
client
|
||||
.post("https://lebusiness-service.prod.kjuulh.app/api/messages")
|
||||
.json(&request)
|
||||
.send()
|
||||
.await
|
||||
.map_err(|e| ServerFnError::new(e.to_string()))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Reference in New Issue
Block a user