From 1ffa0b960997fdada7c8be1e64c91bfca1b1506a Mon Sep 17 00:00:00 2001 From: Mudassir Date: Thu, 22 Aug 2024 23:12:45 +0800 Subject: [PATCH] feat: add config to disable modify the data (#15) * feat: use mock when register to avoid spam * feat: support mock response when edit or delete user * chore: rename ALLOW_MODIFIED to IS_SUPPORT_MODIFIED * fix: temporary to remove the never warning --- .env | 4 +- src/core/middlewares/general.rs | 1 + .../data/repository/user_repository_impl.rs | 43 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/.env b/.env index 6e7a30f..af68fe3 100644 --- a/.env +++ b/.env @@ -23,4 +23,6 @@ MAIL_API_KEY=your_mailjet_api_key MAIL_SECRET_KEY=your_mailjet_secret_key APP_HOST=localhost -APP_PORT=8000 \ No newline at end of file +APP_PORT=8000 + +IS_SUPPORT_MODIFIED=false \ No newline at end of file diff --git a/src/core/middlewares/general.rs b/src/core/middlewares/general.rs index 013b2c0..20f3e74 100644 --- a/src/core/middlewares/general.rs +++ b/src/core/middlewares/general.rs @@ -14,6 +14,7 @@ use crate::{ features::auth::data::models::general_token::GeneralToken, }; +#[allow(dead_code)] pub struct GeneralMiddleware { pub data: TokenData, } diff --git a/src/features/user/data/repository/user_repository_impl.rs b/src/features/user/data/repository/user_repository_impl.rs index c76e440..8fed724 100644 --- a/src/features/user/data/repository/user_repository_impl.rs +++ b/src/features/user/data/repository/user_repository_impl.rs @@ -1,3 +1,5 @@ +use std::env; + use chrono::Utc; use diesel::prelude::*; use diesel::{ExpressionMethods, RunQueryDsl}; @@ -38,6 +40,22 @@ impl UserRepositoryImpl for UserRepository { let _ = user.hash_password(); let email_register = user.email.clone(); + let is_allow_modified = + env::var("IS_SUPPORT_MODIFIED").expect("DATABASE_URL not found.") == "true"; + + if !is_allow_modified { + // return mock user + return Ok(UserResponse { + id: user.id, + name: user.name, + email: user.email, + photo: user.photo, + verified: user.verified, + created_at: user.created_at, + updated_at: user.updated_at, + }); + } + diesel::insert_into(users::table) .values(&user) .execute(&mut self.source.get().unwrap()) @@ -78,8 +96,24 @@ impl UserRepositoryImpl for UserRepository { } fn update_user(&self, user_id: Uuid, params: UpdateUserParams) -> AppResult { + let is_allow_modified = + env::var("IS_SUPPORT_MODIFIED").expect("DATABASE_URL not found.") == "true"; + self.find_user_by_id(user_id) .map(|user| { + if !is_allow_modified { + // return mock response + return Ok(UserResponse { + id: user_id, + name: params.name.unwrap_or("".to_string()), + email: user.email.to_string(), + photo: params.photo.unwrap_or("".to_string()), + verified: params.verified.unwrap_or(false), + created_at: user.created_at, + updated_at: Utc::now().naive_utc(), + }); + } + diesel::update(users.find(user.id)) .set(( name.eq(params.name.unwrap_or(user.name)), @@ -103,8 +137,17 @@ impl UserRepositoryImpl for UserRepository { } fn delete(&self, user_id: Uuid) -> AppResult { + let is_allow_modified = + env::var("IS_SUPPORT_MODIFIED").expect("DATABASE_URL not found.") == "true"; + self.find_user_by_id(user_id) .map(|user| { + if !is_allow_modified { + return Ok(format!( + "User with id '{}' deleted successfully", + user.email + )); + } diesel::delete(users.find(user.id)) .execute(&mut self.source.get().unwrap()) .map(|_| format!("User with email '{}' deleted successfully", user.email))