+ query.load::<PrivateMessageViewTuple>(&mut conn).await
+ };
+
+ Queries::new(read, list)
+}
+
+impl PrivateMessageView {
+ pub async fn read(
+ pool: &mut DbPool<'_>,
+ private_message_id: PrivateMessageId,
+ ) -> Result<Self, Error> {
+ queries().read(pool, private_message_id).await
+ }
+
+ /// Gets the number of unread messages
+ pub async fn get_unread_messages(
+ pool: &mut DbPool<'_>,
+ my_person_id: PersonId,
+ ) -> Result<i64, Error> {
+ use diesel::dsl::count;
+ let conn = &mut get_conn(pool).await?;
+ private_message::table
+ .filter(private_message::read.eq(false))
+ .filter(private_message::recipient_id.eq(my_person_id))
+ .filter(private_message::deleted.eq(false))
+ .select(count(private_message::id))
+ .first::<i64>(conn)
+ .await
+ }
+}
+
+#[derive(Default)]
+pub struct PrivateMessageQuery {
+ pub unread_only: Option<bool>,
+ pub page: Option<i64>,
+ pub limit: Option<i64>,
+}