revolt_database/models/account_invites/ops/
mongodb.rs1use 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 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 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}