use std::fmt::Debug; use common_utils::events::ApiEventMetric; use utoipa::ToSchema; use crate::enums; #[derive(serde::Deserialize, ToSchema)] pub struct CardsInfoRequestParams { #[schema(example = "pay_OSERgeV9qAy7tlK7aKpc_secret_TuDUoh11Msxh12sXn3Yp")] pub client_secret: Option, } #[derive(serde::Deserialize, Debug, serde::Serialize)] pub struct CardsInfoRequest { pub client_secret: Option, pub card_iin: String, } #[derive(serde::Serialize, Debug, ToSchema)] pub struct CardInfoResponse { #[schema(example = "374431")] pub card_iin: String, #[schema(example = "AMEX")] pub card_issuer: Option, #[schema(example = "AMEX")] pub card_network: Option, #[schema(example = "CREDIT")] pub card_type: Option, #[schema(example = "CLASSIC")] pub card_sub_type: Option, #[schema(example = "INDIA")] pub card_issuing_country: Option, } #[derive(serde::Serialize, Debug, ToSchema)] pub struct CardInfoMigrateResponseRecord { pub card_iin: Option, pub card_issuer: Option, pub card_network: Option, pub card_type: Option, pub card_sub_type: Option, pub card_issuing_country: Option, } #[derive(Debug, serde::Deserialize, serde::Serialize, ToSchema)] pub struct CardInfoCreateRequest { pub card_iin: String, pub card_issuer: Option, pub card_network: Option, pub card_type: Option, pub card_subtype: Option, pub card_issuing_country: Option, pub bank_code_id: Option, pub bank_code: Option, pub country_code: Option, pub last_updated_provider: Option, } impl ApiEventMetric for CardInfoCreateRequest {} #[derive(Debug, Clone, serde::Deserialize, serde::Serialize, ToSchema)] pub struct CardInfoUpdateRequest { pub card_iin: String, pub card_issuer: Option, pub card_network: Option, pub card_type: Option, pub card_subtype: Option, pub card_issuing_country: Option, pub bank_code_id: Option, pub bank_code: Option, pub country_code: Option, pub last_updated_provider: Option, pub line_number: Option, } impl ApiEventMetric for CardInfoUpdateRequest {} #[derive(Debug, Default, serde::Serialize)] pub enum CardInfoMigrationStatus { Success, #[default] Failed, } #[derive(Debug, Default, serde::Serialize)] pub struct CardInfoMigrationResponse { pub line_number: Option, pub card_iin: String, pub card_issuer: Option, pub card_network: Option, pub card_type: Option, pub card_sub_type: Option, pub card_issuing_country: Option, #[serde(skip_serializing_if = "Option::is_none")] pub migration_error: Option, pub migration_status: CardInfoMigrationStatus, } impl ApiEventMetric for CardInfoMigrationResponse {} type CardInfoMigrationResponseType = ( Result, CardInfoUpdateRequest, ); impl From for CardInfoMigrationResponse { fn from((response, record): CardInfoMigrationResponseType) -> Self { match response { Ok(res) => Self { card_iin: record.card_iin, line_number: record.line_number, card_issuer: res.card_issuer, card_network: res.card_network, card_type: res.card_type, card_sub_type: res.card_sub_type, card_issuing_country: res.card_issuing_country, migration_status: CardInfoMigrationStatus::Success, migration_error: None, }, Err(e) => Self { card_iin: record.card_iin, migration_status: CardInfoMigrationStatus::Failed, migration_error: Some(e), line_number: record.line_number, ..Self::default() }, } } }