tetratto_core/model/
reactions.rs

1use serde::{Deserialize, Serialize};
2use tetratto_shared::{snow::Snowflake, unix_epoch_timestamp};
3
4/// All of the items which support reactions.
5#[derive(Clone, Serialize, Deserialize, PartialEq, Eq)]
6pub enum AssetType {
7    #[serde(alias = "community")]
8    Community,
9    #[serde(alias = "post")]
10    Post,
11    #[serde(alias = "question")]
12    Question,
13    #[serde(alias = "user")]
14    User,
15    #[serde(alias = "letter")]
16    Letter,
17}
18
19#[derive(Clone, Serialize, Deserialize)]
20pub struct Reaction {
21    pub id: usize,
22    pub created: usize,
23    pub owner: usize,
24    pub asset: usize,
25    pub asset_type: AssetType,
26    pub is_like: bool,
27}
28
29impl Reaction {
30    /// Create a new [`Reaction`].
31    pub fn new(owner: usize, asset: usize, asset_type: AssetType, is_like: bool) -> Self {
32        Self {
33            id: Snowflake::new().to_string().parse::<usize>().unwrap(),
34            created: unix_epoch_timestamp(),
35            owner,
36            asset,
37            asset_type,
38            is_like,
39        }
40    }
41}