Skip to content

Commit

Permalink
transverses: add comments and remove options validations
Browse files Browse the repository at this point in the history
  • Loading branch information
antoine2116 committed Nov 20, 2023
1 parent 5304fc8 commit 73ea62b
Show file tree
Hide file tree
Showing 19 changed files with 322 additions and 763 deletions.
4 changes: 4 additions & 0 deletions date.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,24 @@ import (
"time"
)

// Date is a custom type to handle date format (YYYY-MM-DD)
type Date struct {
time.Time
}

// UnmarshalJSON is a custom unmarshaler for Date
func (t *Date) UnmarshalJSON(data []byte) error {
var err error
t.Time, err = time.Parse("\"2006-01-02\"", string(data))
return err
}

// Datetime is a custom type to handle datetime format (YYYY-MM-DD HH:MM)
type Datetime struct {
time.Time
}

// UnmarshalJSON is a custom unmarshaler for Datetime
func (t *Datetime) UnmarshalJSON(data []byte) error {
var err error
t.Time, err = time.Parse("\"2006-01-02 15:04\"", string(data))
Expand Down
29 changes: 3 additions & 26 deletions error.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@ import (
"net/http"
)

// APIError is the error returned by the API
type APIError struct {
CodeRetour int32 `json:"codeRetour"`
Libelle string `json:"libelle"`
}

// Error returns the error message
func (e APIError) Error() string {
return fmt.Sprintf("choruspro: error (code %v) : %v", e.CodeRetour, e.Libelle)
}

// parseError parses the error returned by the API
func parseError(res *http.Response) error {
apiErr := APIError{}

Expand All @@ -25,29 +28,3 @@ func parseError(res *http.Response) error {

return apiErr
}

type ValidationError struct {
Errors []ValidationErrorItem `json:"errors"`
}

type ValidationErrorItem struct {
Code string `json:"code"`
Message string `json:"message"`
}

func (e ValidationError) Error() string {
return fmt.Sprintf("choruspro: validation error : %v", e.Errors)
}

type ErreurDemandePaiement struct {
IdentifiantDestinataire string `json:"identifiantDestinataire,omitempty"`
IdentifiantFournisseur string `json:"identifiantFournisseur,omitempty"`
LibelleErreurDP string `json:"libelleErreurDP,omitempty"`
NumeroDP string `json:"numeroDP,omitempty"`
}

type ErreurTechnique struct {
CodeErreur string `json:"codeErreur,omitempty"`
LibelleErreur string `json:"libelleErreur,omitempty"`
NatureErreur string `json:"natureErreur,omitempty"`
}
6 changes: 6 additions & 0 deletions factures.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package choruspro
// API docs : https://developer.aife.economie.gouv.fr/api-catalog-sandbox?filter=Factures
type FacturesService service

// Action Facture est le type des actions possibles sur une facture
type ActionFacture string

const (
Expand All @@ -15,6 +16,7 @@ const (
ActionFactureRejet ActionFacture = "REJET"
)

// CadreFac est le type des cadres de facturation
type CadreFac string

const (
Expand Down Expand Up @@ -45,6 +47,7 @@ const (
CodeFacA25 CadreFac = "A25_DECOMPTE_GENERAL_DEFINITIF_MOE_PROCEDURE_TACITE"
)

// RoleUtilisateur est le type des rôles possibles pour un utilisateur
type RoleUtilisateur string

const (
Expand All @@ -55,6 +58,7 @@ const (
RoleDestinataire RoleUtilisateur = "DESTINATAIRE"
)

// TypeFacture est le type des factures
type TypeFacture string

const (
Expand All @@ -63,6 +67,7 @@ const (
TypeFactureAcompte TypeFacture = "ACOMPTE"
)

// TypeTva est le type des TVA
type TypeTva string

const (
Expand All @@ -72,6 +77,7 @@ const (
TypeTvaSansTva TypeTva = "SANS_TVA"
)

// TypeIdentifiant est le type des identifiants pour identifier un tiers
type TypeIdentifiant string

const (
Expand Down
58 changes: 38 additions & 20 deletions transverses_categories.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,33 @@ import (
"time"
)

type ListeCategoriesSollicitation struct {
CodeRetour int32 `json:"codeRetour"`
Libelle string `json:"libelle"`
Categories []CategorieSollicitation `json:"listeCategories"`
Pagination *PaginationResponse `json:"parametresRetour"`
}

// ListeCategoriesSollicitationOptions est la structure de données utlisée
// pour appeler la méthode RechercherCategoriesSollicitation.
type ListeCategoriesSollicitationOptions struct {
Code string `json:"codeCategorie,omitempty"`
EstActif bool `json:"estActif,omitempty"`
Libelle string `json:"libelleCategorie,omitempty"`
Pagination *PaginationOptions `json:"pagination,omitempty"`
}

func (s *TransversesService) RechercherCategoriesSollicitation(ctx context.Context, opts ListeCategoriesSollicitationOptions) (*ListeCategoriesSollicitation, error) {
// ListeCategoriesSollicitationResponse est la structure de données représentant
// la réponse de la méthode RechercherCategoriesSollicitation.
type ListeCategoriesSollicitationResponse struct {
CodeRetour int32 `json:"codeRetour"`
Libelle string `json:"libelle"`
Categories []CategorieSollicitation `json:"listeCategories"`
Pagination *PaginationResponse `json:"parametresRetour"`
}

// La méthode RechercherCategoriesSollicitation permet de rechercher les valeurs
// du référentiel catégorie Sollicitation paramétrées pour le mode connecté
func (s *TransversesService) RechercherCategoriesSollicitation(ctx context.Context, opts ListeCategoriesSollicitationOptions) (*ListeCategoriesSollicitationResponse, error) {
req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/rechercher/categorieSollicitation", opts)
if err != nil {
return nil, err
}

categories := new(ListeCategoriesSollicitation)
categories := new(ListeCategoriesSollicitationResponse)

err = s.client.doRequest(ctx, req, categories)
if err != nil {
Expand All @@ -36,24 +42,42 @@ func (s *TransversesService) RechercherCategoriesSollicitation(ctx context.Conte
return categories, nil
}

type ListeSousCategoriesSollicitation struct {
// ListeSousCategoriesSollicitationOptions est la structure de données utlisée
// pour appeler la méthode RechercherSousCategoriesSollicitation.
type ListeSousCategoriesSollicitationOptions struct {
Code string `json:"code,omitempty"`
EstActif bool `json:"estActif,omitempty"`
IdTechniqueCategorie int64 `json:"idTechniqueCategorie,omitempty"`
Libelle string `json:"libelle,omitempty"`
PaginationOptions *PaginationOptions `json:"pagination,omitempty"`
}

// ListeSousCategoriesSollicitationResponse est la structure de données représentant
// la réponse de la méthode RechercherSousCategoriesSollicitation.
type ListeSousCategoriesSollicitationResponse struct {
CodeRetour int32 `json:"codeRetour"`
Libelle string `json:"libelle"`
SousCategories []SousCategoriesSolliciation `json:"listeSousCategories"`
Pagination *PaginationResponse `json:"parametresRetour"`
}

// SousCategoriesSolliciation est la structure de données représentant
// des liste de catégories et de sous-catégories de sollicitation.
type SousCategoriesSolliciation struct {
Categories []CategorieSollicitation `json:"categorie"`
SousCategories []SousCategorieSollicitation `json:"ssCategorie"`
}

// CategorieSollicitation est la structure de données représentant
// une catégorie de sollicitation.
type CategorieSollicitation struct {
Code string `json:"codeCategorie"`
Libelle string `json:"libelleCategorie"`
IdTechnique int64 `json:"idTechniqueCategorie"`
}

// SousCategorieSollicitation est la structure de données représentant
// une sous-catégorie de sollicitation.
type SousCategorieSollicitation struct {
Code string `json:"code"`
DateCreation *time.Time `json:"dateCreation"`
Expand All @@ -63,21 +87,15 @@ type SousCategorieSollicitation struct {
Libelle string `json:"libelle"`
}

type ListeSousCategoriesSollicitationOptions struct {
Code string `json:"code,omitempty"`
EstActif bool `json:"estActif,omitempty"`
IdTechniqueCategorie int64 `json:"idTechniqueCategorie,omitempty"`
Libelle string `json:"libelle,omitempty"`
PaginationOptions *PaginationOptions `json:"pagination,omitempty"`
}

func (s *TransversesService) RechercherSousCategoriesSollicitation(ctx context.Context, opts ListeSousCategoriesSollicitationOptions) (*ListeSousCategoriesSollicitation, error) {
// Le service RechercherSousCategoriesSollicitation permet de rechercher les
// valeurs du référentiel Sous-catégorie Sollicitation paramétrées pour le mode connecté.
func (s *TransversesService) RechercherSousCategoriesSollicitation(ctx context.Context, opts ListeSousCategoriesSollicitationOptions) (*ListeSousCategoriesSollicitationResponse, error) {
req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/rechercher/sousCategorieSollicitation", opts)
if err != nil {
return nil, err
}

categories := new(ListeSousCategoriesSollicitation)
categories := new(ListeSousCategoriesSollicitationResponse)

err = s.client.doRequest(ctx, req, categories)
if err != nil {
Expand Down
21 changes: 6 additions & 15 deletions transverses_categories_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,6 @@ import (
"net/http"
"reflect"
"testing"
"time"
)

const (
referenceTimeStr = `"2023-01-01T00:00:00Z"`
)

var (
referenceTime = time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
)

func TestTransversesService_RechercherCategoriesSollicitation(t *testing.T) {
Expand Down Expand Up @@ -50,7 +41,7 @@ func TestTransversesService_RechercherCategoriesSollicitation(t *testing.T) {
t.Errorf("Transverses.RechercherCategoriesSollicitation returned error : %v", err)
}

want := &ListeCategoriesSollicitation{
want := &ListeCategoriesSollicitationResponse{
CodeRetour: 0,
Libelle: "TRA_MSG_00.000",
Categories: []CategorieSollicitation{{
Expand Down Expand Up @@ -96,8 +87,8 @@ func TestTransversesService_RechercherSousCategoriesSollicitation(t *testing.T)
"ssCategorie": [
{
"code": "c",
"dateCreation": ` + referenceTimeStr + `,
"dateDerniereModification": ` + referenceTimeStr + `,
"dateCreation": ` + defaultISODateTimeStr + `,
"dateDerniereModification": ` + defaultISODateTimeStr + `,
"estActif": true,
"idTechniqueCategorie": 1,
"libelle": "l"
Expand All @@ -115,7 +106,7 @@ func TestTransversesService_RechercherSousCategoriesSollicitation(t *testing.T)
t.Errorf("Transverses.RechercherSousCategoriesSollicitation returned error : %v", err)
}

want := &ListeSousCategoriesSollicitation{
want := &ListeSousCategoriesSollicitationResponse{
CodeRetour: 0,
Libelle: "TRA_MSG_00.000",
SousCategories: []SousCategoriesSolliciation{{
Expand All @@ -126,8 +117,8 @@ func TestTransversesService_RechercherSousCategoriesSollicitation(t *testing.T)
}},
SousCategories: []SousCategorieSollicitation{{
Code: "c",
DateCreation: &referenceTime,
DateDerniereModification: &referenceTime,
DateCreation: &defaultDate,
DateDerniereModification: &defaultDate,
EstActif: true,
IdTechnique: 1,
Libelle: "l",
Expand Down
Loading

0 comments on commit 73ea62b

Please sign in to comment.