tetratto_core/model/
mail.rs1use serde::{Serialize, Deserialize};
2use tetratto_shared::{snow::Snowflake, unix_epoch_timestamp};
3use crate::model::auth::User;
4
5#[derive(Serialize, Deserialize)]
8pub struct Letter {
9 pub id: usize,
10 pub created: usize,
11 pub owner: usize,
12 pub receivers: Vec<usize>,
13 pub subject: String,
14 pub content: String,
15 pub read_by: Vec<usize>,
21 pub replying_to: usize,
23 pub likes: isize,
24 pub dislikes: isize,
25}
26
27impl Letter {
28 pub fn new(
30 owner: usize,
31 receivers: Vec<usize>,
32 subject: String,
33 content: String,
34 replying_to: usize,
35 ) -> Self {
36 Self {
37 id: Snowflake::new().to_string().parse::<usize>().unwrap(),
38 created: unix_epoch_timestamp(),
39 owner,
40 receivers,
41 subject,
42 content,
43 read_by: Vec::new(),
44 replying_to,
45 likes: 0,
46 dislikes: 0,
47 }
48 }
49
50 pub fn can_read(&self, user: &User) -> bool {
52 (user.id == self.owner) | self.receivers.contains(&user.id)
53 }
54}