Initial commit
This commit is contained in:
commit
0ce1c108ed
|
@ -0,0 +1,3 @@
|
|||
# COOPGO RPC Gov Registry
|
||||
|
||||
This library implements the RPC (Registre de Preuve de Covoiturage) API : more informations : https://tech.covoiturage.beta.gouv.fr
|
|
@ -0,0 +1,91 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type RPCShortDistanceCEERequest struct {
|
||||
JourneyType string `json:"journey_type"`
|
||||
DrivingLicence string `json:"driving_licence"`
|
||||
LastNameTrunc string `json:"last_name_trunc"`
|
||||
OperatorJourneyId string `json:"operator_journey_id"`
|
||||
ApplicationTimestamp RPCTime `json:"application_timestamp"`
|
||||
}
|
||||
|
||||
type RPCCEEResponse struct {
|
||||
Datetime RPCTimestamp `json:"datetime"`
|
||||
UUID string `json:"uuid"`
|
||||
JourneyId string `json:"journey_id"`
|
||||
Status string `json:"status"`
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
type RPCCEESimulate struct {
|
||||
JourneyType string `json:"journey_type"`
|
||||
DrivingLicence string `json:"driving_licence"`
|
||||
LastNameTrunc string `json:"last_name_trunc"`
|
||||
PhoneTrunc string `json:"phone_trunc"`
|
||||
}
|
||||
|
||||
type RPCCEESimulateResponse struct {
|
||||
Datetime RPCTime `json:"datetime"`
|
||||
UUID string `json:"uuid"`
|
||||
}
|
||||
|
||||
type RPCTimestamp time.Time
|
||||
|
||||
func (h RPCHandler) PolicyCEESimulate(req RPCCEESimulate) (success bool, issue *RPCCEESimulateResponse, err error) {
|
||||
// Test case
|
||||
if req.DrivingLicence == "0123456789" {
|
||||
return true, nil, nil
|
||||
}
|
||||
|
||||
j, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
|
||||
request, err := http.NewRequest("POST", h.BaseURL+"/policy/cee/simulate", bytes.NewBuffer(j))
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
|
||||
request.Header.Add("Authorization", "Bearer "+h.Token)
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(request)
|
||||
|
||||
if err != nil {
|
||||
|
||||
log.Error().
|
||||
Err(err).
|
||||
Str("driving_licence", req.DrivingLicence).
|
||||
Str("last_name_trunc", req.LastNameTrunc).
|
||||
Str("phone_trunc", req.PhoneTrunc).
|
||||
Msg("RPC CEE simulate returned an error")
|
||||
|
||||
if resp != nil {
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
log.Debug().Str("body", string(body)).Msg("returned body content")
|
||||
|
||||
var result *RPCCEESimulateResponse
|
||||
err = json.Unmarshal(body, result)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
return false, result, err
|
||||
}
|
||||
|
||||
return false, nil, err
|
||||
}
|
||||
|
||||
return true, nil, nil
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
module git.coopgo.io/coopgo-platform/rpc-gov-registry
|
||||
|
||||
go 1.18
|
|
@ -0,0 +1,42 @@
|
|||
package rpc
|
||||
|
||||
type RPCJourney struct {
|
||||
JourneyId string `json:"journey_id"`
|
||||
OperatorJourneyId string `json:"operator_journey_id"`
|
||||
OperatorClass string `json:"operator_class"`
|
||||
}
|
||||
|
||||
type RPCDriver struct {
|
||||
Revenue int64 `json:"revenue"`
|
||||
Incentives []RPCIncentive `json:"incentive"`
|
||||
Identity RPCIdentity `json:"identity"`
|
||||
Start RPCLoc `json:"start"`
|
||||
End RPCLoc `json:"end"`
|
||||
}
|
||||
|
||||
type RPCPassenger struct {
|
||||
Contribution int64 `json:"contribution"`
|
||||
Seats int64 `json:"seats"`
|
||||
Incentives []RPCIncentive `json:"incentive"`
|
||||
Identity RPCIdentity `json:"identity"`
|
||||
Start RPCLoc `json:"start"`
|
||||
End RPCLoc `json:"end"`
|
||||
}
|
||||
|
||||
type RPCIncentive struct {
|
||||
Index int64 `json:"index"`
|
||||
Amount int64 `json:"amount"`
|
||||
SIRET string `json:"siret"`
|
||||
}
|
||||
|
||||
type RPCIdentity struct {
|
||||
PhoneTrunc string `json:"phone_trunc"`
|
||||
OperatorUserId string `json:"operator_user_id"`
|
||||
Over18 bool `json:"over_18"`
|
||||
}
|
||||
|
||||
type RPCLoc struct {
|
||||
Datetime RPCTime `json:"datetime"`
|
||||
Lat float64 `json:"lat"`
|
||||
Lon float64 `json:"lon"`
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package rpc
|
||||
|
||||
import "time"
|
||||
|
||||
const (
|
||||
ProductionBaseURL = "https://api.covoiturage.beta.gouv.fr/v2"
|
||||
DemoBaseURL = "https://api.demo.covoiturage.beta.gouv.fr/v2"
|
||||
)
|
||||
|
||||
type RPCHandler struct {
|
||||
BaseURL string
|
||||
Token string
|
||||
}
|
||||
|
||||
func NewRPCHandler(baseurl string, token string) RPCHandler {
|
||||
return RPCHandler{
|
||||
BaseURL: baseurl,
|
||||
Token: token,
|
||||
}
|
||||
}
|
||||
|
||||
type RPCTime time.Time
|
||||
|
||||
func (t RPCTime) MarshalJSON() ([]byte, error) {
|
||||
return []byte(`"` + time.Time(t).Format("2006-01-02T15:04:05Z") + `"`), nil
|
||||
}
|
Loading…
Reference in New Issue