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