Private
Public Access
1
0

kordophone: add support for /messages

This commit is contained in:
2025-01-20 19:43:21 -08:00
parent 793faab721
commit a8104c379c
8 changed files with 206 additions and 6 deletions

View File

@@ -2,6 +2,10 @@ use serde::Deserialize;
use time::OffsetDateTime;
use uuid::Uuid;
use super::Identifiable;
pub type ConversationID = <Conversation as Identifiable>::ID;
#[derive(Debug, Clone, Deserialize)]
pub struct Conversation {
pub guid: String,
@@ -28,6 +32,14 @@ impl Conversation {
}
}
impl Identifiable for Conversation {
type ID = String;
fn id(&self) -> &Self::ID {
&self.guid
}
}
#[derive(Default)]
pub struct ConversationBuilder {
guid: Option<String>,

View File

@@ -0,0 +1,67 @@
use serde::Deserialize;
use time::OffsetDateTime;
use uuid::Uuid;
#[derive(Debug, Clone, Deserialize)]
pub struct Message {
pub guid: String,
#[serde(rename = "text")]
pub text: String,
#[serde(rename = "sender")]
pub sender: Option<String>,
#[serde(with = "time::serde::iso8601")]
pub date: OffsetDateTime,
}
impl Message {
pub fn builder() -> MessageBuilder {
MessageBuilder::new()
}
}
#[derive(Default)]
pub struct MessageBuilder {
guid: Option<String>,
text: Option<String>,
sender: Option<String>,
date: Option<OffsetDateTime>,
}
impl MessageBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn guid(mut self, guid: String) -> Self {
self.guid = Some(guid);
self
}
pub fn text(mut self, text: String) -> Self {
self.text = Some(text);
self
}
pub fn sender(mut self, sender: String) -> Self {
self.sender = Some(sender);
self
}
pub fn date(mut self, date: OffsetDateTime) -> Self {
self.date = Some(date);
self
}
pub fn build(self) -> Message {
Message {
guid: self.guid.unwrap_or(Uuid::new_v4().to_string()),
text: self.text.unwrap_or("".to_string()),
sender: self.sender,
date: self.date.unwrap_or(OffsetDateTime::now_utc()),
}
}
}

View File

@@ -1,5 +1,15 @@
pub mod conversation;
pub mod message;
pub use conversation::Conversation;
pub use conversation::ConversationID;
pub use message::Message;
pub mod jwt;
pub use jwt::JwtToken;
pub use jwt::JwtToken;
pub trait Identifiable {
type ID;
fn id(&self) -> &Self::ID;
}