1 use crate::{ApubObject, Crud, DeleteableOrRemoveable};
2 use chrono::NaiveDateTime;
3 use diesel::{dsl::*, result::Error, *};
4 use lemmy_db_schema::{naive_now, source::private_message::*, DbUrl, PersonId, PrivateMessageId};
6 impl Crud for PrivateMessage {
7 type Form = PrivateMessageForm;
8 type IdType = PrivateMessageId;
9 fn read(conn: &PgConnection, private_message_id: PrivateMessageId) -> Result<Self, Error> {
10 use lemmy_db_schema::schema::private_message::dsl::*;
11 private_message.find(private_message_id).first::<Self>(conn)
14 fn create(conn: &PgConnection, private_message_form: &PrivateMessageForm) -> Result<Self, Error> {
15 use lemmy_db_schema::schema::private_message::dsl::*;
16 insert_into(private_message)
17 .values(private_message_form)
18 .get_result::<Self>(conn)
23 private_message_id: PrivateMessageId,
24 private_message_form: &PrivateMessageForm,
25 ) -> Result<Self, Error> {
26 use lemmy_db_schema::schema::private_message::dsl::*;
27 diesel::update(private_message.find(private_message_id))
28 .set(private_message_form)
29 .get_result::<Self>(conn)
33 impl ApubObject for PrivateMessage {
34 fn last_refreshed_at(&self) -> Option<NaiveDateTime> {
38 fn read_from_apub_id(conn: &PgConnection, object_id: &DbUrl) -> Result<Self, Error>
42 use lemmy_db_schema::schema::private_message::dsl::*;
44 .filter(ap_id.eq(object_id))
49 pub trait PrivateMessage_ {
52 private_message_id: PrivateMessageId,
54 ) -> Result<PrivateMessage, Error>;
57 private_message_id: PrivateMessageId,
59 ) -> Result<PrivateMessage, Error>;
62 private_message_id: PrivateMessageId,
64 ) -> Result<PrivateMessage, Error>;
67 private_message_id: PrivateMessageId,
69 ) -> Result<PrivateMessage, Error>;
72 for_recipient_id: PersonId,
73 ) -> Result<Vec<PrivateMessage>, Error>;
76 private_message_form: &PrivateMessageForm,
77 ) -> Result<PrivateMessage, Error>;
80 impl PrivateMessage_ for PrivateMessage {
83 private_message_id: PrivateMessageId,
85 ) -> Result<PrivateMessage, Error> {
86 use lemmy_db_schema::schema::private_message::dsl::*;
88 diesel::update(private_message.find(private_message_id))
89 .set(ap_id.eq(apub_id))
90 .get_result::<Self>(conn)
95 private_message_id: PrivateMessageId,
97 ) -> Result<PrivateMessage, Error> {
98 use lemmy_db_schema::schema::private_message::dsl::*;
99 diesel::update(private_message.find(private_message_id))
100 .set((content.eq(new_content), updated.eq(naive_now())))
101 .get_result::<Self>(conn)
106 private_message_id: PrivateMessageId,
108 ) -> Result<PrivateMessage, Error> {
109 use lemmy_db_schema::schema::private_message::dsl::*;
110 diesel::update(private_message.find(private_message_id))
111 .set(deleted.eq(new_deleted))
112 .get_result::<Self>(conn)
117 private_message_id: PrivateMessageId,
119 ) -> Result<PrivateMessage, Error> {
120 use lemmy_db_schema::schema::private_message::dsl::*;
121 diesel::update(private_message.find(private_message_id))
122 .set(read.eq(new_read))
123 .get_result::<Self>(conn)
128 for_recipient_id: PersonId,
129 ) -> Result<Vec<PrivateMessage>, Error> {
130 use lemmy_db_schema::schema::private_message::dsl::*;
133 .filter(recipient_id.eq(for_recipient_id))
134 .filter(read.eq(false)),
137 .get_results::<Self>(conn)
142 private_message_form: &PrivateMessageForm,
143 ) -> Result<PrivateMessage, Error> {
144 use lemmy_db_schema::schema::private_message::dsl::*;
145 insert_into(private_message)
146 .values(private_message_form)
149 .set(private_message_form)
150 .get_result::<Self>(conn)
154 impl DeleteableOrRemoveable for PrivateMessage {
155 fn blank_out_deleted_or_removed_info(mut self) -> Self {
156 self.content = "".into();
163 use crate::{establish_unpooled_connection, source::private_message::PrivateMessage_, Crud};
164 use lemmy_db_schema::source::{person::*, private_message::*};
165 use serial_test::serial;
170 let conn = establish_unpooled_connection();
172 let creator_form = PersonForm {
173 name: "creator_pm".into(),
174 ..PersonForm::default()
177 let inserted_creator = Person::create(&conn, &creator_form).unwrap();
179 let recipient_form = PersonForm {
180 name: "recipient_pm".into(),
181 ..PersonForm::default()
184 let inserted_recipient = Person::create(&conn, &recipient_form).unwrap();
186 let private_message_form = PrivateMessageForm {
187 content: "A test private message".into(),
188 creator_id: inserted_creator.id,
189 recipient_id: inserted_recipient.id,
190 ..PrivateMessageForm::default()
193 let inserted_private_message = PrivateMessage::create(&conn, &private_message_form).unwrap();
195 let expected_private_message = PrivateMessage {
196 id: inserted_private_message.id,
197 content: "A test private message".into(),
198 creator_id: inserted_creator.id,
199 recipient_id: inserted_recipient.id,
203 published: inserted_private_message.published,
204 ap_id: inserted_private_message.ap_id.to_owned(),
208 let read_private_message = PrivateMessage::read(&conn, inserted_private_message.id).unwrap();
209 let updated_private_message =
210 PrivateMessage::update(&conn, inserted_private_message.id, &private_message_form).unwrap();
211 let deleted_private_message =
212 PrivateMessage::update_deleted(&conn, inserted_private_message.id, true).unwrap();
213 let marked_read_private_message =
214 PrivateMessage::update_read(&conn, inserted_private_message.id, true).unwrap();
215 Person::delete(&conn, inserted_creator.id).unwrap();
216 Person::delete(&conn, inserted_recipient.id).unwrap();
218 assert_eq!(expected_private_message, read_private_message);
219 assert_eq!(expected_private_message, updated_private_message);
220 assert_eq!(expected_private_message, inserted_private_message);
221 assert!(deleted_private_message.deleted);
222 assert!(marked_read_private_message.read);