WIP: data(base)type

This commit is contained in:
cel 🌸 2025-02-14 12:57:21 +00:00
parent 05b0d38490
commit 8dcdfe405e
5 changed files with 30 additions and 14 deletions

View File

@ -4,6 +4,7 @@ PRAGMA foreign_keys = on;
-- TODO: avatar, nick, etc.
create table user(
jid jid primary key,
-- can receive presence status from non-contacts
cached_status text,
);
@ -36,9 +37,11 @@ create table groups_roster(
);
-- chat includes reference to user jid chat is with
-- specifically for dms, groups should be different
-- can send chat message to user (creating a new chat if not already exists)
create table chats (
id uuid primary key,
contact_id jid not null unique,
user_id jid not null unique,
);
-- messages include reference to chat they are in, and who sent them.
@ -46,6 +49,7 @@ create table messages (
id uuid primary key,
body text,
chat_id uuid not null,
-- TODO: from can be either a jid, a moved jid (for when a contact moves, save original sender jid/user but link to new user), or imported (from another service (save details), linked to new user)
from jid not null,
-- TODO: read bool not null,
foreign key(chat_id) references chats(id),

View File

@ -1,17 +1,12 @@
use uuid::Uuid;
use crate::roster::Contact;
pub enum Chat {
Direct(DM),
Channel(Channel),
}
use crate::{roster::Contact, user::User};
#[derive(Debug)]
pub struct Message {
id: Uuid,
// contains full contact information
from: Contact,
// contains full user information
from: User,
// TODO: rich text, other contents, threads
body: Body,
}
@ -21,10 +16,15 @@ pub struct Body {
body: String,
}
pub struct DM {
contact: Contact,
pub struct Chat {
id: Uuid,
user: User,
message_history: Vec<Message>,
}
// TODO: group chats
pub struct Channel {}
// pub enum Chat {
// Direct(DirectChat),
// Channel(Channel),
// }
// pub struct Channel {}

View File

@ -29,6 +29,7 @@ mod connection;
mod error;
mod presence;
mod roster;
mod user;
pub struct Luz {
receiver: mpsc::Receiver<CommandMessage>,
@ -269,9 +270,10 @@ impl LuzHandle {
}
pub enum CommandMessage {
/// connect to XMPP chat server. gets roster and
// TODO: login invisible xep-0186
/// connect to XMPP chat server. gets roster and publishes initial presence.
Connect,
/// disconnect from XMPP chat server.
/// disconnect from XMPP chat server, sending unavailable presence then closing stream.
Disconnect,
/// get the roster. if offline, retreive cached version from database. should be stored in application memory
GetRoster,

View File

@ -3,9 +3,12 @@ use std::collections::HashSet;
use jid::JID;
use uuid::Uuid;
use crate::user::User;
#[derive(Debug)]
pub struct Contact {
// jid is the id used to reference everything, but not the primary key
user: User,
jid: JID,
subscription: Subscription,
/// client user defined name

7
luz/src/user.rs Normal file
View File

@ -0,0 +1,7 @@
use jid::JID;
#[derive(Debug)]
pub struct User {
jid: JID,
cached_status: Option<String>,
}