Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 69 additions & 7 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
branch = "master"

[[constraint]]
name = "github.com/fiorix/wsdl2go"
branch = "master"
name = "github.com/devimteam/wsdl2go"
revision = "5c4e6c7ba9d9355bba952997eb0c639cb90f672e"

[[constraint]]
name = "github.com/satori/go.uuid"
Expand Down
98 changes: 0 additions & 98 deletions internal/connector/soap.go

This file was deleted.

118 changes: 86 additions & 32 deletions pkg/client/client.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
package client

import (
"context"
"net/http"
"time"

wsse "github.com/casualcode/soap"
"github.com/devimteam/creditinfo/internal/connector"
"github.com/devimteam/creditinfo/pkg/connector"
"github.com/devimteam/creditinfo/pkg/request"
"github.com/devimteam/creditinfo/pkg/response"
"github.com/fiorix/wsdl2go/soap"
"github.com/satori/go.uuid"
"github.com/devimteam/wsdl2go/soap"
"github.com/gofrs/uuid"
)

//Soap Client provides an interface for getting data out creditinfo service
type Client interface {
GetIndividualReport(nationalId *string, phone *string, birthDate *time.Time) (*response.ResultResponse, error)
GetIndividualReport(ctx context.Context, nationalId *string, phone *string, birthDate *time.Time) (*response.ResultResponse, error)
GetIndividualReportBeginQuery(ctx context.Context, nationalId *string, phone *string, birthDate *time.Time) (ticket *connector.MultiConnectorTicket, err error)
EndQuery(ctx context.Context, ticket *connector.MultiConnectorTicket) (*response.ResultResponse, error)
}

type CreditInfoParams struct {
Username string
Password string
ConnectorId string
StrategyId string
Endpoint string
Timeout *time.Duration
}

type creditInfo struct {
Expand All @@ -29,13 +35,15 @@ type creditInfo struct {
}

// NewClient returns a Client interface for given soap api creditinfo
func NewCreditInfoClient(params CreditInfoParams) Client {
func NewCreditInfoClient(params CreditInfoParams, pre func(context.Context, *http.Request), post func(context.Context, *http.Response)) *creditInfo {

svc := connector.NewMultiConnectorService(&soap.Client{
URL: params.Endpoint,
Header: getWsseHeader(params.Username, params.Password),
Namespace: connector.Namespace,
ExcludeActionNamespace: true,
Pre: pre,
Post: post,
})

return &creditInfo{
Expand All @@ -44,42 +52,88 @@ func NewCreditInfoClient(params CreditInfoParams) Client {
}
}

func (client creditInfo) GetIndividualReport(nationalId *string, phone *string, birthDate *time.Time) (*response.ResultResponse, error) {
messageId := uuid.NewV4().String()
dataId := uuid.NewV4().String()
connectorGuuid := client.params.ConnectorId
var birthDdateFormat string
func (client *creditInfo) GetIndividualReport(ctx context.Context, nationalId *string, phone *string, birthDate *time.Time) (response *response.ResultResponse, err error) {
messageId, err := uuid.NewV4()
if err != nil {
return nil, err
}
dataId, err := uuid.NewV4()
if err != nil {
return nil, err
}

var bdate *request.Date
if birthDate != nil {
birthDdateFormat = birthDate.Format("2006-01-02")
t := request.Date(*birthDate)
bdate = &t
}

return client.svc.Query(&connector.Query{
Request: &request.MultiConnectorRequest{
MessageId: &messageId,
RequestXml: &request.RequestXml{
RequestXmlItem: &request.RequestXmlItem{
Connector: &request.ConnectorRequest{
Id: &connectorGuuid,
Data: &request.ConnectorDataRequest{
Id: &dataId,
Request: &request.Request{
Strategy: &request.Strategy{
Id: client.params.StrategyId,
},
Cb5SearchParameters: request.Cb5SearchParameters{
NationalId: nationalId,
},
CustomFields: &request.CustomFields{
MobilePhone: phone,
DateOfBirth: &birthDdateFormat,
},
Consent: true,
return client.svc.Query(ctx, &connector.Query{
Request: client.getMultiConnectorRequest(
messageId.String(),
dataId.String(),
*nationalId,
&request.CustomFields{
MobilePhone: phone,
DateOfBirth: bdate,
},
),
})
}

func (client *creditInfo) getMultiConnectorRequest(messageId, dataId, nationalId string, customFields *request.CustomFields) *request.MultiConnectorRequest {
return &request.MultiConnectorRequest{
MessageId: &messageId,
Timeout: request.NilDuration(client.params.Timeout),
RequestXml: &request.RequestXml{
RequestXmlItem: &request.RequestXmlItem{
Connector: &request.ConnectorRequest{
Id: &client.params.ConnectorId,
Data: &request.ConnectorDataRequest{
Id: &dataId,
Request: &request.Request{
Strategy: &request.Strategy{
Id: client.params.StrategyId,
},
Cb5SearchParameters: request.Cb5SearchParameters{
NationalId: &nationalId,
},
CustomFields: customFields,
Consent: true,
},
},
},
},
},
}
}
func (client *creditInfo) GetIndividualReportBeginQuery(ctx context.Context, nationalId *string, phone *string, birthDate *time.Time) (ticket *connector.MultiConnectorTicket, err error) {
messageId, err := uuid.NewV4()
if err != nil {
return nil, err
}
dataId, err := uuid.NewV4()
if err != nil {
return nil, err
}

var bdate *request.Date
if birthDate != nil {
t := request.Date(*birthDate)
bdate = &t
}

return client.svc.BeginQuery(ctx, &connector.BeginQuery{
Request: client.getMultiConnectorRequest(messageId.String(), dataId.String(), *nationalId, &request.CustomFields{
MobilePhone: phone,
DateOfBirth: bdate,
}),
})
}

func (client *creditInfo) EndQuery(ctx context.Context, ticket *connector.MultiConnectorTicket) (*response.ResultResponse, error) {
return client.svc.EndQuery(ctx, &connector.EndQuery{
Ticket: ticket,
})
}

Expand Down
Loading