Skip to content

Commit 347d9e4

Browse files
authored
Add fraud rule search functionality to API integrations (#13)
1 parent e67fcee commit 347d9e4

6 files changed

Lines changed: 80 additions & 0 deletions

File tree

craftgate/adapter/fraud_adapter.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
from craftgate.request.fraud_add_card_fingerprint_to_list_request import FraudAddCardFingerprintToListRequest
66
from craftgate.request.fraud_value_list_request import FraudValueListRequest
77
from craftgate.request.search_fraud_checks_request import SearchFraudChecksRequest
8+
from craftgate.request.search_fraud_rule_request import SearchFraudRuleRequest
89
from craftgate.request.update_fraud_check_request import UpdateFraudCheckRequest
910
from craftgate.request_options import RequestOptions
1011
from craftgate.response.fraud_all_value_lists_response import FraudAllValueListsResponse
1112
from craftgate.response.fraud_check_list_response import FraudCheckListResponse
13+
from craftgate.response.fraud_rule_response import FraudRuleResponse
1214
from craftgate.response.fraud_value_list_response import FraudValueListResponse
1315
from craftgate.utils.request_query_params_builder import RequestQueryParamsBuilder
1416

@@ -30,6 +32,18 @@ def search_fraud_checks(self, request: SearchFraudChecksRequest) -> FraudCheckLi
3032
response_type=FraudCheckListResponse
3133
)
3234

35+
def search_fraud_rules(self, request: SearchFraudRuleRequest) -> FraudRuleResponse:
36+
query = RequestQueryParamsBuilder.build_query_params(request)
37+
path = "/fraud/v1/rules" + query
38+
headers = self._create_headers(None, path)
39+
return self._http_client.request(
40+
method="GET",
41+
url=self.request_options.base_url + path,
42+
headers=headers,
43+
body=None,
44+
response_type=FraudCheckListResponse
45+
)
46+
3347
def update_fraud_check_status(self, id: int, fraud_check_status: FraudCheckStatus) -> None:
3448
path = "/fraud/v1/fraud-checks/{}/check-status".format(id)
3549
body = UpdateFraudCheckRequest(check_status=fraud_check_status)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from datetime import datetime
2+
from typing import Optional
3+
4+
from craftgate.model.fraud_action import FraudAction
5+
from craftgate.model.fraud_operation import FraudOperation
6+
7+
class SearchFraudRuleRequest(object):
8+
def __init__(
9+
self,
10+
name: Optional[str] = None,
11+
min_created_date: Optional[datetime] = None,
12+
max_created_date: Optional[datetime] = None,
13+
action: Optional[FraudAction] = None,
14+
operation: Optional[FraudOperation] = None,
15+
page: Optional[int] = None,
16+
size: Optional[int] = None,
17+
) -> None:
18+
self.page = page
19+
self.size = size
20+
self.action = action
21+
self.operation = operation
22+
self.name = name
23+
self.min_created_date = min_created_date
24+
self.max_created_date = max_created_date

craftgate/response/common/base_payment_response.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def __init__(
6262
fraud_id: Optional[int] = None,
6363
fraud_action: Optional[FraudAction] = None,
6464
fraud_score: Optional[float] = None,
65+
fraud_rule_id: Optional[int] = None,
6566
pos: Optional[MerchantPos] = None,
6667
loyalty: Optional[Loyalty] = None,
6768
payment_error: Optional[PaymentError] = None
@@ -108,6 +109,7 @@ def __init__(
108109
self.fraud_id = fraud_id
109110
self.fraud_action = fraud_action
110111
self.fraud_score = fraud_score
112+
self.fraud_rule_id = fraud_rule_id
111113
self.pos = pos
112114
self.loyalty = loyalty
113115
self.payment_error = payment_error
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import Optional, List
2+
3+
from craftgate.model.fraud_action import FraudAction
4+
from craftgate.model.fraud_operation import FraudOperation
5+
from craftgate.model.status import Status
6+
7+
class FraudRule(object):
8+
def __init__(
9+
self,
10+
id: Optional[int] = None,
11+
status: Optional[Status] = None,
12+
name: Optional[str] = None,
13+
action: Optional[FraudAction] = None,
14+
conditions: Optional[str] = None,
15+
operations: Optional[List[FraudOperation]] = None
16+
) -> None:
17+
self.id = id
18+
self.status = status
19+
self.action = action
20+
self.name = name
21+
self.conditions = conditions
22+
self.operations = operations
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from craftgate.response.common.list_response import ListResponse
2+
from craftgate.response.dto.fraud_rule import FraudRule
3+
4+
class FraudRuleResponse(ListResponse[FraudRule]):
5+
item_type = FraudRule

tests/test_fraud_adapter.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from craftgate.model.fraud_operation import FraudOperation
99
from craftgate.request import FraudValueListRequest, SearchFraudChecksRequest
1010
from craftgate.request.fraud_add_card_fingerprint_to_list_request import FraudAddCardFingerprintToListRequest
11+
from craftgate.request.search_fraud_rule_request import SearchFraudRuleRequest
1112

1213

1314
class FraudAdapterSample(unittest.TestCase):
@@ -80,6 +81,18 @@ def test_search_fraud_checks(self):
8081
self.assertIsNotNone(resp)
8182
self.assertTrue(resp.items)
8283

84+
def test_search_fraud_rules(self):
85+
now = datetime.now()
86+
req = SearchFraudRuleRequest(
87+
min_created_date=now - timedelta(days=25),
88+
max_created_date=now,
89+
)
90+
resp = self.fraud.search_fraud_rules(req)
91+
print(resp)
92+
93+
self.assertIsNotNone(resp)
94+
self.assertTrue(resp.items)
95+
8396
def test_update_fraud_check_status(self):
8497
self.fraud.update_fraud_check_status(int(2613), FraudCheckStatus.FRAUD)
8598

0 commit comments

Comments
 (0)