revolt_database/models/emojis/ops/
mongodb.rs1use bson::Document;
2use revolt_result::Result;
3
4use crate::Emoji;
5use crate::MongoDb;
6
7use super::AbstractEmojis;
8
9static COL: &str = "emojis";
10
11#[async_trait]
12impl AbstractEmojis for MongoDb {
13 async fn insert_emoji(&self, emoji: &Emoji) -> Result<()> {
15 query!(self, insert_one, COL, &emoji).map(|_| ())
16 }
17
18 async fn fetch_emoji(&self, id: &str) -> Result<Emoji> {
20 query!(self, find_one_by_id, COL, id)?.ok_or_else(|| create_error!(NotFound))
21 }
22
23 async fn fetch_emoji_by_parent_id(&self, parent_id: &str) -> Result<Vec<Emoji>> {
25 query!(
26 self,
27 find,
28 COL,
29 doc! {
30 "parent.id": parent_id
31 }
32 )
33 }
34
35 async fn fetch_emoji_by_parent_ids(&self, parent_ids: &[String]) -> Result<Vec<Emoji>> {
37 query!(
38 self,
39 find,
40 COL,
41 doc! {
42 "parent.id": {
43 "$in": parent_ids
44 }
45 }
46 )
47 }
48
49 async fn detach_emoji(&self, emoji: &Emoji) -> Result<()> {
51 self.col::<Document>(COL)
52 .update_one(
53 doc! {
54 "_id": &emoji.id
55 },
56 doc! {
57 "$set": {
58 "parent": {
59 "type": "Detached"
60 }
61 }
62 },
63 )
64 .await
65 .map(|_| ())
66 .map_err(|_| create_database_error!("update_one", COL))
67 }
68}