Initial implementation of db stuffs

Got the migrations and datastructures in. Next step is building db
utility function into the db module or client module
This commit is contained in:
2026-05-18 14:54:57 -07:00
parent 907c6a8fb0
commit c92ee309a9
21 changed files with 262 additions and 1 deletions
+2
View File
@@ -0,0 +1,2 @@
pub mod models;
pub mod schema;
+68
View File
@@ -0,0 +1,68 @@
use diesel::prelude::*;
use diesel::deserialize::FromSqlRow;
use diesel::expression::AsExpression;
// Man this library is brittle
use diesel_derive_composite::Composite;
use diesel::pg::Pg;
// Gets around broken macro in diesel_derive_composite
type MyArr = diesel::sql_types::Array<diesel::sql_types::BigInt>;
#[derive(Debug, Composite, FromSqlRow, AsExpression)]
#[diesel(sql_type = crate::db::schema::sql_types::UserT)]
pub struct UserT {
#[diesel_composite(sql_type = diesel::sql_types::Text)]
pub name: String,
#[diesel_composite(sql_type = diesel::sql_types::Text)]
pub server: String
}
#[derive(Debug, Composite, FromSqlRow, AsExpression)]
#[diesel(sql_type = crate::db::schema::sql_types::UserT)]
pub struct RoomId {
#[diesel_composite(sql_type = MyArr)]
pub coordinates: Vec<i64>,
#[diesel_composite(sql_type = diesel::sql_types::Text)]
pub server: String
}
#[derive(Queryable, Selectable)]
#[diesel(table_name = crate::db::schema::groups)]
pub struct Group {
pub id: i32,
pub groupname: String,
pub role: Option<String>,
pub username: UserT
}
#[derive(Queryable, Selectable)]
#[diesel(table_name = crate::db::schema::roles)]
pub struct Role {
pub id: i32,
pub rolename: String,
pub groupname: String,
pub permission: String
}
#[derive(Queryable, Selectable)]
#[diesel(table_name = crate::db::schema::users)]
pub struct User {
pub id: i32,
pub username: String,
pub password: String,
}
#[derive(Queryable, Selectable)]
#[diesel(table_name = crate::db::schema::messages)]
pub struct Messages {
pub id: i64,
pub room: RoomId,
pub body: String,
pub signature: String,
pub client_timestamp: i64,
pub server_timestamp: i64,
pub username: UserT
}
+58
View File
@@ -0,0 +1,58 @@
// @generated automatically by Diesel CLI.
pub mod sql_types {
#[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)]
#[diesel(postgres_type(name = "room_id"))]
pub struct RoomId;
#[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)]
#[diesel(postgres_type(name = "user_t"))]
pub struct UserT;
}
diesel::table! {
use diesel::sql_types::*;
use super::sql_types::UserT;
groups (id) {
id -> Int4,
groupname -> Text,
role -> Nullable<Text>,
username -> UserT,
}
}
diesel::table! {
use diesel::sql_types::*;
use super::sql_types::RoomId;
use super::sql_types::UserT;
messages (id) {
id -> Int8,
room -> RoomId,
body -> Text,
signature -> Text,
client_timestamp -> Int8,
server_timestamp -> Int8,
username -> UserT,
}
}
diesel::table! {
roles (id) {
id -> Int4,
rolename -> Text,
groupname -> Text,
permission -> Text,
}
}
diesel::table! {
users (id) {
id -> Int4,
username -> Text,
password -> Text,
}
}
diesel::allow_tables_to_appear_in_same_query!(groups, messages, roles, users,);