Skip to main content

revolt_database/models/account_invites/ops/
mongodb.rs

1use crate::{AbstractAccountInvites, AccountInvite, MongoDb};
2use bson::to_document;
3use mongodb::options::UpdateOptions;
4use revolt_result::Result;
5
6const COL: &str = "account_invites";
7
8#[async_trait]
9impl AbstractAccountInvites for MongoDb {
10    /// Find invite by id
11    async fn fetch_account_invite(&self, id: &str) -> Result<AccountInvite> {
12        query!(self, find_one_by_id, COL, id)?.ok_or_else(|| create_error!(InvalidInvite))
13    }
14
15    /// Save invite
16    async fn save_account_invite(&self, invite: &AccountInvite) -> Result<()> {
17        self.col::<AccountInvite>(COL)
18            .update_one(
19                doc! {
20                    "_id": &invite.id
21                },
22                doc! {
23                    "$set": to_document(invite).map_err(|_| create_database_error!("to_document", COL))?,
24                },
25            )
26            .with_options(UpdateOptions::builder().upsert(true).build())
27            .await
28            .map_err(|_| create_database_error!("upsert_one", COL))
29            .map(|_| ())
30    }
31}