2 newtypes::{DbUrl, PersonId, PrivateMessageId},
3 source::private_message::*,
4 traits::{Crud, DeleteableOrRemoveable},
6 use diesel::{dsl::*, result::Error, *};
7 use lemmy_utils::error::LemmyError;
10 impl Crud for PrivateMessage {
11 type InsertForm = PrivateMessageInsertForm;
12 type UpdateForm = PrivateMessageUpdateForm;
13 type IdType = PrivateMessageId;
14 fn read(conn: &mut PgConnection, private_message_id: PrivateMessageId) -> Result<Self, Error> {
15 use crate::schema::private_message::dsl::*;
16 private_message.find(private_message_id).first::<Self>(conn)
19 fn create(conn: &mut PgConnection, form: &Self::InsertForm) -> Result<Self, Error> {
20 use crate::schema::private_message::dsl::*;
21 insert_into(private_message)
26 .get_result::<Self>(conn)
30 conn: &mut PgConnection,
31 private_message_id: PrivateMessageId,
32 form: &Self::UpdateForm,
33 ) -> Result<Self, Error> {
34 use crate::schema::private_message::dsl::*;
35 diesel::update(private_message.find(private_message_id))
37 .get_result::<Self>(conn)
39 fn delete(conn: &mut PgConnection, pm_id: Self::IdType) -> Result<usize, Error> {
40 use crate::schema::private_message::dsl::*;
41 diesel::delete(private_message.find(pm_id)).execute(conn)
46 pub fn mark_all_as_read(
47 conn: &mut PgConnection,
48 for_recipient_id: PersonId,
49 ) -> Result<Vec<PrivateMessage>, Error> {
50 use crate::schema::private_message::dsl::*;
53 .filter(recipient_id.eq(for_recipient_id))
54 .filter(read.eq(false)),
57 .get_results::<Self>(conn)
60 pub fn read_from_apub_id(
61 conn: &mut PgConnection,
63 ) -> Result<Option<Self>, LemmyError> {
64 use crate::schema::private_message::dsl::*;
65 let object_id: DbUrl = object_id.into();
68 .filter(ap_id.eq(object_id))
69 .first::<PrivateMessage>(conn)
76 impl DeleteableOrRemoveable for PrivateMessage {
77 fn blank_out_deleted_or_removed_info(mut self) -> Self {
78 self.content = "".into();
86 source::{instance::Instance, person::*, private_message::*},
88 utils::establish_unpooled_connection,
90 use serial_test::serial;
95 let conn = &mut establish_unpooled_connection();
97 let inserted_instance = Instance::create(conn, "my_domain.tld").unwrap();
99 let creator_form = PersonInsertForm::builder()
100 .name("creator_pm".into())
101 .public_key("pubkey".to_string())
102 .instance_id(inserted_instance.id)
105 let inserted_creator = Person::create(conn, &creator_form).unwrap();
107 let recipient_form = PersonInsertForm::builder()
108 .name("recipient_pm".into())
109 .public_key("pubkey".to_string())
110 .instance_id(inserted_instance.id)
113 let inserted_recipient = Person::create(conn, &recipient_form).unwrap();
115 let private_message_form = PrivateMessageInsertForm::builder()
116 .content("A test private message".into())
117 .creator_id(inserted_creator.id)
118 .recipient_id(inserted_recipient.id)
121 let inserted_private_message = PrivateMessage::create(conn, &private_message_form).unwrap();
123 let expected_private_message = PrivateMessage {
124 id: inserted_private_message.id,
125 content: "A test private message".into(),
126 creator_id: inserted_creator.id,
127 recipient_id: inserted_recipient.id,
131 published: inserted_private_message.published,
132 ap_id: inserted_private_message.ap_id.to_owned(),
136 let read_private_message = PrivateMessage::read(conn, inserted_private_message.id).unwrap();
138 let private_message_update_form = PrivateMessageUpdateForm::builder()
139 .content(Some("A test private message".into()))
141 let updated_private_message = PrivateMessage::update(
143 inserted_private_message.id,
144 &private_message_update_form,
148 let deleted_private_message = PrivateMessage::update(
150 inserted_private_message.id,
151 &PrivateMessageUpdateForm::builder()
156 let marked_read_private_message = PrivateMessage::update(
158 inserted_private_message.id,
159 &PrivateMessageUpdateForm::builder().read(Some(true)).build(),
162 Person::delete(conn, inserted_creator.id).unwrap();
163 Person::delete(conn, inserted_recipient.id).unwrap();
164 Instance::delete(conn, inserted_instance.id).unwrap();
166 assert_eq!(expected_private_message, read_private_message);
167 assert_eq!(expected_private_message, updated_private_message);
168 assert_eq!(expected_private_message, inserted_private_message);
169 assert!(deleted_private_message.deleted);
170 assert!(marked_read_private_message.read);