Skip to content

Commit

Permalink
Merge branch 'master' into apple-pay
Browse files Browse the repository at this point in the history
  • Loading branch information
onurpolattimur committed Mar 22, 2024
2 parents 745a50d + 1e3bc06 commit fd87dff
Show file tree
Hide file tree
Showing 30 changed files with 2,100 additions and 640 deletions.
12 changes: 5 additions & 7 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,18 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Set up Go 1.19
uses: actions/setup-go@v3
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
go-version: '1.21.0'
cache: true
cache-dependency-path: go.sum

- name: Check out code into the Go module directory
uses: actions/checkout@v2
uses: actions/checkout@v4

- name: Go Lint
uses: golangci/golangci-lint-action@v3
uses: golangci/golangci-lint-action@v4

- name: Get dependencies
run: |
Expand Down
21 changes: 19 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,24 @@ client, _ := craftgate.New("<YOUR API KEY>", "<YOUR SECRET KEY>", "https://api.c
request := craftgate.SearchInstallmentsRequest{
BinNumber: "487074",
Price: 100,
Currency: craftgate.TRY,
Currency: craftgate.Currency_TRY,
}

res, err := client.Installment.SearchInstallments(context.Background(), request)

if err != nil {
t.Errorf("Error %s", err)
}
```

Also, you can pass the options to make localization for API responses. You can use `tr` or `en` right now.
```go
client, _ := craftgate.New("<YOUR API KEY>", "<YOUR SECRET KEY>", "https://api.craftgate.io", craftgate.WithLocalization("en"))

request := craftgate.SearchInstallmentsRequest{
BinNumber: "487074",
Price: 100,
Currency: craftgate.Currency_TRY,
}

res, err := client.Installment.SearchInstallments(context.Background(), request)
Expand Down Expand Up @@ -61,7 +78,7 @@ client, _ := craftgate.New("<YOUR API KEY>", "<YOUR SECRET KEY>", "https://sandb
request := craftgate.CreatePaymentRequest{
Price: 100,
PaidPrice: 100,
Currency: craftgate.TRY,
Currency: craftgate.Currency_TRY,
...
}

Expand Down
41 changes: 41 additions & 0 deletions adapter/bank_account_tracking.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package adapter

import (
"context"
"fmt"
"net/http"
)

type BankAccountTracking struct {
Client *Client
}

func (api *BankAccountTracking) SearchRecords(ctx context.Context, request SearchBankAccountTrackingRecordRequest) (*DataResponse[BankAccountTrackingRecordResponse], error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, "/bank-account-tracking/v1/merchant-bank-account-trackings/records", request)
if err != nil {
return nil, err
}
response := &Response[DataResponse[BankAccountTrackingRecordResponse]]{}
err = api.Client.Do(ctx, newRequest, response)

if err != nil {
return nil, err
}

return response.Data, nil
}

func (api *BankAccountTracking) RetrieveRecords(ctx context.Context, id int64) (*BankAccountTrackingRecordResponse, error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/bank-account-tracking/v1/merchant-bank-account-trackings/records/%d", id), nil)
if err != nil {
return nil, err
}
response := &Response[BankAccountTrackingRecordResponse]{}
err = api.Client.Do(ctx, newRequest, response)

if err != nil {
return nil, err
}

return response.Data, nil
}
33 changes: 31 additions & 2 deletions adapter/craftgate.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,28 @@ func init() {

type ClientOption func(*Client) error

func WithLocalization(lang string) ClientOption {
return func(client *Client) error {
if len(lang) > 0 {
client.headers["lang"] = strings.ToLower(lang)
} else {
client.headers["lang"] = "tr"
}
return nil
}
}

func WithCustomHTTPClient(httpClient *http.Client) ClientOption {
return func(client *Client) error {
if httpClient != nil {
client.httpClient = httpClient
} else {
client.httpClient = http.DefaultClient
}
return nil
}
}

type Client struct {
httpClient *http.Client
baseURL *url.URL
Expand All @@ -84,10 +106,15 @@ type Client struct {
Fraud *Fraud
Hook *Hook
Masterpass *Masterpass
BankAccountTracking *BankAccountTracking
Merchant *Merchant
Juzdan *Juzdan
}

func New(apiKey, apiSecret, baseURL string, opts ...ClientOption) (*Client, error) {
client := newClient(apiKey, apiSecret)
client.headers = make(map[string]string)

for _, option := range opts {
if err := option(client); err != nil {
return nil, err
Expand All @@ -100,7 +127,7 @@ func New(apiKey, apiSecret, baseURL string, opts ...ClientOption) (*Client, erro
if client.baseURL == nil {
client.baseURL, _ = url.Parse(baseURL)
}
client.headers = make(map[string]string)

return client, nil
}

Expand All @@ -109,8 +136,8 @@ func newClient(apiKey, secretKey string) *Client {

client.Installment = &Installment{Client: client}
client.Payment = &Payment{Client: client}
client.Onboarding = &Onboarding{Client: client}
client.PaymentReporting = &PaymentReporting{Client: client}
client.Onboarding = &Onboarding{Client: client}
client.PayByLink = &PayByLink{Client: client}
client.Wallet = &Wallet{Client: client}
client.Settlement = &Settlement{Client: client}
Expand All @@ -119,6 +146,8 @@ func newClient(apiKey, secretKey string) *Client {
client.Fraud = &Fraud{Client: client}
client.Hook = &Hook{Client: client}
client.Masterpass = &Masterpass{Client: client}
client.BankAccountTracking = &BankAccountTracking{Client: client}
client.Merchant = &Merchant{Client: client}

return client
}
Expand Down
7 changes: 4 additions & 3 deletions adapter/fraud.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,10 @@ func (api *Fraud) RetrieveFraudValueList(ctx context.Context, listName string) (
return response.Data, nil
}

func (api *Fraud) CreateFraudValueList(ctx context.Context, listName string) error {
func (api *Fraud) CreateFraudValueList(ctx context.Context, listName string, fraudValueType FraudValueType) error {
request := FraudValueListRequest{
ListName: listName,
Type: fraudValueType,
}

newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/fraud/v1/value-lists", request)
Expand Down Expand Up @@ -103,8 +104,8 @@ func (api *Fraud) AddValueToFraudValueList(ctx context.Context, request FraudVal
return nil
}

func (api *Fraud) RemoveValueFromFraudValueList(ctx context.Context, listName, value string) error {
newRequest, err := api.Client.NewRequest(ctx, http.MethodDelete, "/fraud/v1/value-lists/"+listName+"/values/"+value, nil)
func (api *Fraud) RemoveValueFromFraudValueList(ctx context.Context, listName, valueId string) error {
newRequest, err := api.Client.NewRequest(ctx, http.MethodDelete, "/fraud/v1/value-lists/"+listName+"/values/"+valueId, nil)
if err != nil {
return err
}
Expand Down
41 changes: 41 additions & 0 deletions adapter/juzdan.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package adapter

import (
"context"
"fmt"
"net/http"
)

type Juzdan struct {
Client *Client
}

func (api *Juzdan) InitJuzdanPayment(ctx context.Context, request InitJuzdanPaymentRequest) (*InitJuzdanPaymentResponse, error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/juzdan-payments/init", request)
if err != nil {
return nil, err
}

response := &Response[InitJuzdanPaymentResponse]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}

return response.Data, nil
}

func (api *Juzdan) RetrieveJuzdanPayment(ctx context.Context, referenceId string) (*PaymentResponse, error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/payment/v1/juzdan-payments/%s", referenceId), nil)

if err != nil {
return nil, err
}

response := &Response[PaymentResponse]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}
return response.Data, nil
}
116 changes: 116 additions & 0 deletions adapter/merchant.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package adapter

import (
"context"
"fmt"
"net/http"
)

type Merchant struct {
Client *Client
}

func (api *Merchant) CreateMerchantPos(ctx context.Context, request CreateMerchantPosRequest) (*MerchantPosResponse, error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/merchant/v1/merchant-poses", request)

if err != nil {
return nil, err
}

response := &Response[MerchantPosResponse]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}
return response.Data, nil
}

func (api *Merchant) RetrieveMerchantPos(ctx context.Context, id int64) (*MerchantPosResponse, error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/merchant/v1/merchant-poses/%d", id), nil)

if err != nil {
return nil, err
}

response := &Response[MerchantPosResponse]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}
return response.Data, nil
}

func (api *Merchant) SearchMerchantPos(ctx context.Context, request SearchMerchantPosRequest) (*DataResponse[MerchantPosResponse], error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, "/merchant/v1/merchant-poses", request)

if err != nil {
return nil, err
}

response := &Response[DataResponse[MerchantPosResponse]]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}
return response.Data, nil
}

func (api *Merchant) UpdateMerchantPosStatus(ctx context.Context, id int64, status PosStatus) error {
newRequest, err := api.Client.NewRequest(ctx, http.MethodPut, fmt.Sprintf("/merchant/v1/merchant-poses/%d/status/%s", id, status), nil)

if err != nil {
return err
}

response := &Void{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return err
}
return nil
}

func (api *Merchant) DeleteMerchantPosStatus(ctx context.Context, id int64) error {
newRequest, err := api.Client.NewRequest(ctx, http.MethodDelete, fmt.Sprintf("/merchant/v1/merchant-poses/%d", id), nil)

if err != nil {
return err
}

response := &Void{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return err
}
return nil
}

func (api *Merchant) RetrieveMerchantPosCommissions(ctx context.Context, id int64) (*DataResponse[MerchantPosCommissionResponse], error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/merchant/v1/merchant-poses/%d/commissions", id), nil)

if err != nil {
return nil, err
}

response := &Response[DataResponse[MerchantPosCommissionResponse]]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}
return response.Data, nil
}

func (api *Merchant) UpdateMerchantPosCommissions(ctx context.Context, id int64, request CreateMerchantPosCommissionRequest) (*DataResponse[MerchantPosCommissionResponse], error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, fmt.Sprintf("/merchant/v1/merchant-poses/%d/commissions", id), request)

if err != nil {
return nil, err
}

response := &Response[DataResponse[MerchantPosCommissionResponse]]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}
return response.Data, nil
}
Loading

0 comments on commit fd87dff

Please sign in to comment.