1 use crate::newtypes::{DbUrl, PersonId, PrivateMessageId};
2 #[cfg(feature = "full")]
3 use crate::schema::private_message;
4 use serde::{Deserialize, Serialize};
5 use serde_with::skip_serializing_none;
6 #[cfg(feature = "full")]
8 use typed_builder::TypedBuilder;
10 #[skip_serializing_none]
11 #[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
12 #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable, TS))]
15 diesel(belongs_to(crate::source::person::Person, foreign_key = creator_id)
16 ))] // Is this the right assoc?
17 #[cfg_attr(feature = "full", diesel(table_name = private_message))]
18 #[cfg_attr(feature = "full", ts(export))]
19 /// A private message.
20 pub struct PrivateMessage {
21 pub id: PrivateMessageId,
22 pub creator_id: PersonId,
23 pub recipient_id: PersonId,
27 pub published: chrono::NaiveDateTime,
28 pub updated: Option<chrono::NaiveDateTime>,
33 #[derive(Clone, TypedBuilder)]
34 #[builder(field_defaults(default))]
35 #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
36 #[cfg_attr(feature = "full", diesel(table_name = private_message))]
37 pub struct PrivateMessageInsertForm {
39 pub creator_id: PersonId,
41 pub recipient_id: PersonId,
44 pub deleted: Option<bool>,
45 pub read: Option<bool>,
46 pub published: Option<chrono::NaiveDateTime>,
47 pub updated: Option<chrono::NaiveDateTime>,
48 pub ap_id: Option<DbUrl>,
49 pub local: Option<bool>,
52 #[derive(Clone, Default)]
53 #[cfg_attr(feature = "full", derive(AsChangeset))]
54 #[cfg_attr(feature = "full", diesel(table_name = private_message))]
55 pub struct PrivateMessageUpdateForm {
56 pub content: Option<String>,
57 pub deleted: Option<bool>,
58 pub read: Option<bool>,
59 pub published: Option<chrono::NaiveDateTime>,
60 pub updated: Option<Option<chrono::NaiveDateTime>>,
61 pub ap_id: Option<DbUrl>,
62 pub local: Option<bool>,