add: journals/notes database interfaces
This commit is contained in:
parent
0f48a46c40
commit
102ea0ee35
14 changed files with 386 additions and 6 deletions
69
crates/core/src/model/journals.rs
Normal file
69
crates/core/src/model/journals.rs
Normal file
|
@ -0,0 +1,69 @@
|
|||
use serde::{Serialize, Deserialize};
|
||||
use tetratto_shared::{snow::Snowflake, unix_epoch_timestamp};
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
pub enum JournalViewPermission {
|
||||
/// Can be accessed by anyone via link.
|
||||
Public,
|
||||
/// Visible only to the journal owner.
|
||||
Private,
|
||||
}
|
||||
|
||||
impl Default for JournalViewPermission {
|
||||
fn default() -> Self {
|
||||
Self::Private
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
pub struct Journal {
|
||||
pub id: usize,
|
||||
pub created: usize,
|
||||
pub owner: usize,
|
||||
pub title: String,
|
||||
pub view: JournalViewPermission,
|
||||
}
|
||||
|
||||
impl Journal {
|
||||
/// Create a new [`Journal`].
|
||||
pub fn new(owner: usize, title: String) -> Self {
|
||||
Self {
|
||||
id: Snowflake::new().to_string().parse::<usize>().unwrap(),
|
||||
created: unix_epoch_timestamp(),
|
||||
owner,
|
||||
title,
|
||||
view: JournalViewPermission::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
pub struct Note {
|
||||
pub id: usize,
|
||||
pub created: usize,
|
||||
pub owner: usize,
|
||||
pub title: String,
|
||||
/// The ID of the [`Journal`] this note belongs to.
|
||||
///
|
||||
/// The note is subject to the settings set for the journal it's in.
|
||||
pub journal: usize,
|
||||
pub content: String,
|
||||
pub edited: usize,
|
||||
}
|
||||
|
||||
impl Note {
|
||||
/// Create a new [`Note`].
|
||||
pub fn new(owner: usize, title: String, journal: usize, content: String) -> Self {
|
||||
let created = unix_epoch_timestamp();
|
||||
|
||||
Self {
|
||||
id: Snowflake::new().to_string().parse::<usize>().unwrap(),
|
||||
created,
|
||||
owner,
|
||||
title,
|
||||
journal,
|
||||
content,
|
||||
edited: created,
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ pub mod auth;
|
|||
pub mod channels;
|
||||
pub mod communities;
|
||||
pub mod communities_permissions;
|
||||
pub mod journals;
|
||||
pub mod moderation;
|
||||
pub mod oauth;
|
||||
pub mod permissions;
|
||||
|
|
|
@ -37,6 +37,8 @@ bitflags! {
|
|||
const MANAGE_STACKS = 1 << 26;
|
||||
const STAFF_BADGE = 1 << 27;
|
||||
const MANAGE_APPS = 1 << 28;
|
||||
const MANAGE_JOURNALS = 1 << 29;
|
||||
const MANAGE_NOTES = 1 << 30;
|
||||
|
||||
const _ = !0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue