subgraph/graphql/schema/create_auth_service/delete_user/
mod.rs

1use bson::doc;
2use log::debug;
3
4use crate::{
5    configuration::subgraph::data_sources::sql::DialectEnum,
6    data_sources::{sql::PoolEnum, DataSource},
7    graphql::schema::{create_auth_service::ServiceUser, ServiceSchema},
8};
9
10impl ServiceSchema {
11    pub async fn delete_user(
12        data_source: &DataSource,
13        identifier: &str,
14    ) -> Result<(), async_graphql::Error> {
15        debug!("Deleting user: {:?}", identifier);
16        match &data_source {
17            DataSource::Mongo(mongo_ds) => {
18                let filter = doc! {
19                    "identifier": &identifier
20                };
21
22                mongo_ds
23                    .db
24                    .collection::<ServiceUser>("subgraph_user")
25                    .delete_one(filter, None)
26                    .await
27                    .map(|_| ())
28                    .map_err(|e| {
29                        async_graphql::Error::new(format!(
30                            "Failed to delete user from mongo: {:?}",
31                            e
32                        ))
33                    })
34            }
35            DataSource::SQL(sql_ds) => match sql_ds.config.dialect {
36                DialectEnum::MYSQL => {
37                    let query = sqlx::query("DELETE FROM subgraph_user WHERE identifier = ?;")
38                        .bind(&identifier);
39                    match sql_ds.pool.clone() {
40                        PoolEnum::MySql(pool) => query.execute(&pool).await,
41                        _ => unreachable!(),
42                    }
43                    .map(|_| ())
44                    .map_err(|e| {
45                        async_graphql::Error::new(format!(
46                            "Failed to delete user from mysql: {:?}",
47                            e
48                        ))
49                    })
50                }
51                DialectEnum::SQLITE => {
52                    let query = sqlx::query("DELETE FROM subgraph_user WHERE identifier = ?;")
53                        .bind(&identifier);
54
55                    match sql_ds.pool.clone() {
56                        PoolEnum::SqLite(pool) => query.execute(&pool).await,
57                        _ => panic!("Pool not supported."),
58                    }
59                    .map(|_| ())
60                    .map_err(|e| {
61                        async_graphql::Error::new(format!(
62                            "Failed to delete user from sqlite: {:?}",
63                            e
64                        ))
65                    })
66                }
67                DialectEnum::POSTGRES => {
68                    let query = sqlx::query("DELETE FROM subgraph_user WHERE identifier = $1;")
69                        .bind(&identifier);
70                    match sql_ds.pool.clone() {
71                        PoolEnum::Postgres(pool) => query.execute(&pool).await,
72                        _ => unreachable!(),
73                    }
74                    .map(|_| ())
75                    .map_err(|e| {
76                        async_graphql::Error::new(format!(
77                            "Failed to delete user from postgres: {:?}",
78                            e
79                        ))
80                    })
81                }
82            },
83            _ => panic!("Data Source not supported."),
84        }
85    }
86}