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