{
  "swagger": "2.0",
  "info": {
    "description": "Application permettant d'interroger le référentiel adresse.",
    "version": "1.0.0",
    "title": "Référentiel Adresse"
  },
  "host": "localhost:3001",
  "basePath": "/v1",
  "tags": [
    {
      "name": "adresse",
      "description": "Ensemble d'élément autour de l'adresse"
    }
  ],
  "schemes": [
    "http"
  ],
  "paths": {
    "/adresse": {
      "post": {
        "tags": [
          "adresse"
        ],
        "summary": "Ajout d'une nouvelle adresse dans le référentiel",
        "description": "",
        "operationId": "addAdresse",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "Un Objet de type adresse",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Adresse"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Adresse"
            }
          },
          "405": {
            "description": "Paramètre d'entrée invalide"
          }
        }
      }
    },
    "/adresse/{id}": {
      "get": {
        "tags": [
          "adresse"
        ],
        "summary": "Recherche par ID",
        "description": "Retourne une adresse",
        "operationId": "getAdresseById",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID de l'adresse à retourner",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Adresse"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Adresse non trouvée"
          }
        }
      },
      "put": {
        "tags": [
          "adresse"
        ],
        "summary": "Mise à jour d'une adresse dans le référentiel",
        "description": "",
        "operationId": "updateAdresseWithForm",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identifiant de l'adresse à mettre à jour",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Un Objet de type adresse",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Adresse"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Adresse"
            }
          },
          "405": {
            "description": "Paramètre d'entrée invalide"
          }
        }
      },
      "delete": {
        "tags": [
          "adresse"
        ],
        "summary": "Suppression d'une adresse",
        "description": "",
        "operationId": "deleteAdresse",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identifiant de l'adresse à supprimer",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Adresse non trouvée"
          }
        }
      }
    },
    "/adresse/idFonctionnel/{idFonctionnel}": {
      "delete": {
        "tags": [
          "adresse"
        ],
        "summary": "Suppression de toute les adresses identifiées par la leur idFonctionnel",
        "description": "",
        "operationId": "deleteAdresseByIdFunc",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "idFonctionnel",
            "in": "path",
            "description": "idFonctionnel correspondant aux adresses qu'il faut supprimer",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Adresse"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Adresse non trouvée"
          }
        }
      }
    },
    "/adresse/idFonctionnel/{idFonctionnel}/{dateRef}": {
      "get": {
        "tags": [
          "adresse"
        ],
        "summary": "Recherche d'une date passé la plus proche de la date de reference pour une organisation donné",
        "description": "Retourne l'adresse de l'organisation à la date de référence donnée",
        "operationId": "getAdresseByIdFuncAndDateRef",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "idFonctionnel",
            "in": "path",
            "description": "Reference de l'idFonctionnel de l'adresse à retourner",
            "required": true,
            "type": "string"
          },
          {
            "name": "dateRef",
            "in": "path",
            "description": "Date de référence de l'adresse à retourner",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Adresse"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Adresse non trouvée"
          }
        }
      }
    },
    "/adresse/all/{idFonctionnel}": {
      "get": {
        "tags": [
          "adresse"
        ],
        "summary": "Recherche toutes les adresses avec un même idFonctionnel, ordonnées de la plus ancienne à la plus récente",
        "description": "Retourne la liste d'adresse de l'organisation ordonnée de la plus ancienne à la plus récente",
        "operationId": "getAdresseByIdFunc",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "idFonctionnel",
            "in": "path",
            "description": "Reference de l'idFonctionnel des adresses à retourner",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Adresse"
              }
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Adresse non trouvée"
          }
        }
      }
    }
  },
  "definitions": {
    "Adresse": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "description": "Identifiant unique de l\\'adresse",
          "format": "int64"
        },
        "idFonctionnel": {
          "type": "string",
          "description": "Identifiant fonctionnel de l\\'adresse de la forme suivante : ADR_[TRIGRAMME_TABLE_OBJ]_[ID_OBJ]. Example : ADR_ORG_ID1"
        },
        "adressePro": {
          "type": "boolean",
          "description": "Defini s\\'il s\\'agit d\\'une adresse pro ou non. Si 1, adressePro. Si 0, adresse particulier"
        },
        "civilite": {
          "type": "string",
          "description": "[AFNOR LIGNE 1] - Uniquement pour adresse particulier : Civilité, titre ou qualité. Exemple: Monsieur, Madame, Docteur, Maitre, etc..."
        },
        "prenom": {
          "type": "string",
          "description": "[AFNOR LIGNE 1] - Uniquement pour adresse particulier : Prénom du destinataire"
        },
        "nom": {
          "type": "string",
          "description": "[AFNOR LIGNE 1] - Uniquement pour adresse particulier : Nom du destinataire"
        },
        "raisonSociale": {
          "type": "string",
          "description": "[AFNOR LIGNE 1] - Uniquement pour adresse pro : Raison sociale ou dénomination de la société"
        },
        "complementAdresse1": {
          "type": "string",
          "description": "[AFNOR LIGNE 2] - Pour adresse pro/particulière. Il s\\'agit d\\'un numéro d\\'appartement de boite au lettres, étage, couloir, escalier pour un particulier. Pour une adresse pro il s\\'agit de l\\'identité du destinataire et ou service concerné"
        },
        "complementAdresse2": {
          "type": "string",
          "description": "[AFNOR LIGNE 3] - Pour adresse pro/particulière. Contient l\\'entrée, le batiment, l\\'immeuble, la résidence ou la zone industrielle"
        },
        "numeroVoie": {
          "type": "string",
          "description": "[AFNOR LIGNE 4] - Numéro de voie (caractères numériques)"
        },
        "extensionVoie": {
          "type": "string",
          "description": "[AFNOR LIGNE 4] - Extension du numéro de voie : B pour BIS, T pour TER, Q pour QUATER, C pour QUINQUIES"
        },
        "indiceRepetitionVoie": {
          "type": "string",
          "description": "[AFNOR LIGNE 4] - Indice de répétition lié au numéro de voie A, B, C ou D"
        },
        "libelleVoie": {
          "type": "string",
          "description": "[AFNOR LIGNE 4] - Libellé de la voie"
        },
        "lieuDit": {
          "type": "string",
          "description": "[AFNOR LIGNE 5] - Lieu dit ou service particulier de distribution, ou commune géographique pour exceptions"
        },
        "codePostal": {
          "type": "string",
          "description": "[AFNOR LIGNE 6] - Code postal"
        },
        "ville": {
          "type": "string",
          "description": "[AFNOR LIGNE 6] - Ville ou localité de destination"
        },
        "codeCedex": {
          "type": "string",
          "description": "[AFNOR LIGNE 6] - Code CEDEX"
        },
        "libelleCedex": {
          "type": "string",
          "description": "[AFNOR LIGNE 6] - Libelle du CEDEX, généralement correspondant à une localité"
        },
        "codeInsee": {
          "type": "string",
          "description": "Code insee de la commune"
        },
        "dateDebutValidite": {
          "type": "string",
          "format": "date-time",
          "description": "Date de début de validité de l\\'adresse"
        },
        "dateFinValidite": {
          "type": "string",
          "format": "date-time",
          "description": "Date de fin de validité de l\\'adresse"
        },
        "dateInsertionAdresse": {
          "type": "string",
          "format": "date-time",
          "description": "Date de création de l\\'adresse"
        },
        "dateModificationAdresse": {
          "type": "string",
          "format": "date-time",
          "description": "Date de modification de l\\'adresse"
        }
      },
      "x-primary-key": [
        "id"
      ]
    }
  }
}