Skip to content

Commit

Permalink
chore: add api reference for blocklist (#3336)
Browse files Browse the repository at this point in the history
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
  • Loading branch information
prajjwalkumar17 and hyperswitch-bot[bot] authored Jan 12, 2024
1 parent 57f2cff commit f381d86
Show file tree
Hide file tree
Showing 7 changed files with 319 additions and 32 deletions.
9 changes: 6 additions & 3 deletions crates/api_models/src/blocklist.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use common_enums::enums;
use common_utils::events::ApiEventMetric;
use utoipa::ToSchema;

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
#[serde(rename_all = "snake_case", tag = "type", content = "data")]
pub enum BlocklistRequest {
CardBin(String),
Expand All @@ -12,9 +13,10 @@ pub enum BlocklistRequest {
pub type AddToBlocklistRequest = BlocklistRequest;
pub type DeleteFromBlocklistRequest = BlocklistRequest;

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
pub struct BlocklistResponse {
pub fingerprint_id: String,
#[schema(value_type = BlocklistDataKind)]
pub data_kind: enums::BlocklistDataKind,
#[serde(with = "common_utils::custom_serde::iso8601")]
pub created_at: time::PrimitiveDateTime,
Expand All @@ -23,8 +25,9 @@ pub struct BlocklistResponse {
pub type AddToBlocklistResponse = BlocklistResponse;
pub type DeleteFromBlocklistResponse = BlocklistResponse;

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, ToSchema)]
pub struct ListBlocklistQuery {
#[schema(value_type = BlocklistDataKind)]
pub data_kind: enums::BlocklistDataKind,
#[serde(default = "default_list_limit")]
pub limit: u16,
Expand Down
38 changes: 23 additions & 15 deletions crates/router/src/db/blocklist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,41 +163,49 @@ impl BlocklistInterface for KafkaStore {
#[instrument(skip_all)]
async fn insert_blocklist_entry(
&self,
_pm_blocklist: storage::BlocklistNew,
pm_blocklist: storage::BlocklistNew,
) -> CustomResult<storage::Blocklist, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store.insert_blocklist_entry(pm_blocklist).await
}

async fn find_blocklist_entry_by_merchant_id_fingerprint_id(
&self,
_merchant_id: &str,
_fingerprint_id: &str,
merchant_id: &str,
fingerprint: &str,
) -> CustomResult<storage::Blocklist, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.find_blocklist_entry_by_merchant_id_fingerprint_id(merchant_id, fingerprint)
.await
}

async fn delete_blocklist_entry_by_merchant_id_fingerprint_id(
&self,
_merchant_id: &str,
_fingerprint_id: &str,
merchant_id: &str,
fingerprint: &str,
) -> CustomResult<storage::Blocklist, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.delete_blocklist_entry_by_merchant_id_fingerprint_id(merchant_id, fingerprint)
.await
}

async fn list_blocklist_entries_by_merchant_id_data_kind(
&self,
_merchant_id: &str,
_data_kind: common_enums::BlocklistDataKind,
_limit: i64,
_offset: i64,
merchant_id: &str,
data_kind: common_enums::BlocklistDataKind,
limit: i64,
offset: i64,
) -> CustomResult<Vec<storage::Blocklist>, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.list_blocklist_entries_by_merchant_id_data_kind(merchant_id, data_kind, limit, offset)
.await
}

async fn list_blocklist_entries_by_merchant_id(
&self,
_merchant_id: &str,
merchant_id: &str,
) -> CustomResult<Vec<storage::Blocklist>, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.list_blocklist_entries_by_merchant_id(merchant_id)
.await
}
}
14 changes: 9 additions & 5 deletions crates/router/src/db/blocklist_fingerprint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,16 +80,20 @@ impl BlocklistFingerprintInterface for KafkaStore {
#[instrument(skip_all)]
async fn insert_blocklist_fingerprint_entry(
&self,
_pm_fingerprint_new: storage::BlocklistFingerprintNew,
pm_fingerprint_new: storage::BlocklistFingerprintNew,
) -> CustomResult<storage::BlocklistFingerprint, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.insert_blocklist_fingerprint_entry(pm_fingerprint_new)
.await
}

async fn find_blocklist_fingerprint_by_merchant_id_fingerprint_id(
&self,
_merchant_id: &str,
_fingerprint_id: &str,
merchant_id: &str,
fingerprint: &str,
) -> CustomResult<storage::BlocklistFingerprint, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.find_blocklist_fingerprint_by_merchant_id_fingerprint_id(merchant_id, fingerprint)
.await
}
}
22 changes: 14 additions & 8 deletions crates/router/src/db/blocklist_lookup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,24 +102,30 @@ impl BlocklistLookupInterface for KafkaStore {
#[instrument(skip_all)]
async fn insert_blocklist_lookup_entry(
&self,
_blocklist_lookup_entry: storage::BlocklistLookupNew,
blocklist_lookup_entry: storage::BlocklistLookupNew,
) -> CustomResult<storage::BlocklistLookup, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.insert_blocklist_lookup_entry(blocklist_lookup_entry)
.await
}

async fn find_blocklist_lookup_entry_by_merchant_id_fingerprint(
&self,
_merchant_id: &str,
_fingerprint: &str,
merchant_id: &str,
fingerprint: &str,
) -> CustomResult<storage::BlocklistLookup, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.find_blocklist_lookup_entry_by_merchant_id_fingerprint(merchant_id, fingerprint)
.await
}

async fn delete_blocklist_lookup_entry_by_merchant_id_fingerprint(
&self,
_merchant_id: &str,
_fingerprint: &str,
merchant_id: &str,
fingerprint: &str,
) -> CustomResult<storage::BlocklistLookup, errors::StorageError> {
Err(errors::StorageError::KafkaError)?
self.diesel_store
.delete_blocklist_lookup_entry_by_merchant_id_fingerprint(merchant_id, fingerprint)
.await
}
}
9 changes: 8 additions & 1 deletion crates/router/src/openapi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ Never share your secret api keys. Keep them guarded and secure.
crate::routes::gsm::get_gsm_rule,
crate::routes::gsm::update_gsm_rule,
crate::routes::gsm::delete_gsm_rule,
crate::routes::blocklist::add_entry_to_blocklist,
crate::routes::blocklist::list_blocked_payment_methods,
crate::routes::blocklist::remove_entry_from_blocklist
),
components(schemas(
crate::types::api::refunds::RefundRequest,
Expand Down Expand Up @@ -370,7 +373,11 @@ Never share your secret api keys. Keep them guarded and secure.
api_models::payments::PaymentLinkResponse,
api_models::payments::RetrievePaymentLinkResponse,
api_models::payments::PaymentLinkInitiateRequest,
api_models::payments::PaymentLinkStatus
api_models::payments::PaymentLinkStatus,
api_models::blocklist::BlocklistRequest,
api_models::blocklist::BlocklistResponse,
api_models::blocklist::ListBlocklistQuery,
common_enums::enums::BlocklistDataKind
)),
modifiers(&SecurityAddon)
)]
Expand Down
38 changes: 38 additions & 0 deletions crates/router/src/routes/blocklist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ use crate::{
services::{api, authentication as auth, authorization::permissions::Permission},
};

#[utoipa::path(
post,
path = "/blocklist",
request_body = BlocklistRequest,
responses(
(status = 200, description = "Fingerprint Blocked", body = BlocklistResponse),
(status = 400, description = "Invalid Data")
),
tag = "Blocklist",
operation_id = "Block a Fingerprint",
security(("api_key" = []))
)]
pub async fn add_entry_to_blocklist(
state: web::Data<AppState>,
req: HttpRequest,
Expand All @@ -32,6 +44,18 @@ pub async fn add_entry_to_blocklist(
.await
}

#[utoipa::path(
delete,
path = "/blocklist",
request_body = BlocklistRequest,
responses(
(status = 200, description = "Fingerprint Unblocked", body = BlocklistResponse),
(status = 400, description = "Invalid Data")
),
tag = "Blocklist",
operation_id = "Unblock a Fingerprint",
security(("api_key" = []))
)]
pub async fn remove_entry_from_blocklist(
state: web::Data<AppState>,
req: HttpRequest,
Expand All @@ -56,6 +80,20 @@ pub async fn remove_entry_from_blocklist(
.await
}

#[utoipa::path(
get,
path = "/blocklist",
params (
("data_kind" = BlocklistDataKind, Query, description = "Kind of the fingerprint list requested"),
),
responses(
(status = 200, description = "Blocked Fingerprints", body = BlocklistResponse),
(status = 400, description = "Invalid Data")
),
tag = "Blocklist",
operation_id = "List Blocked fingerprints of a particular kind",
security(("api_key" = []))
)]
pub async fn list_blocked_payment_methods(
state: web::Data<AppState>,
req: HttpRequest,
Expand Down
Loading

0 comments on commit f381d86

Please sign in to comment.