{
  "swagger": "2.0",
  "info": {
    "description": "Application permettant d'interroger le référentiel des coordonnées médiatiques.",
    "version": "1.0.0",
    "title": "Référentiel Média"
  },
  "basePath": "/v1",
  "tags": [
    {
      "name": "media",
      "description": "Ensemble des coordonnées médiatiques (tel, mobile, mail etc...)"
    }
  ],
  "schemes": [
    "http"
  ],
  "paths": {
    "/media": {
      "post": {
        "tags": [
          "media"
        ],
        "summary": "Ajout d'une nouvelle instance de coordonnées médiatiques dans le référentiel",
        "description": "",
        "operationId": "addMedia",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "Un Objet de type media",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Media"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Media"
            }
          },
          "405": {
            "description": "Paramètre d'entrée invalide"
          }
        }
      }
    },
    "/media/{id}": {
      "get": {
        "tags": [
          "media"
        ],
        "summary": "Recherche par ID",
        "description": "Retourne une instance de coordonnées médiatiques avec l'ID correspondant",
        "operationId": "getMediaById",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID de la coordonnées médiatiques à retourner",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Media"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Coordonnées médiatiques non trouvées"
          }
        }
      },
      "put": {
        "tags": [
          "media"
        ],
        "summary": "Mise à jour d'une instance de coordonnées médiatiques dans le référentiel",
        "description": "",
        "operationId": "updateMediaWithForm",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identifiant de l'instance de coordonnées médiatiques à mettre à jour",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Un Objet de type media",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Media"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Media"
            }
          },
          "405": {
            "description": "Paramètre d'entrée invalide"
          }
        }
      },
      "delete": {
        "tags": [
          "media"
        ],
        "summary": "Suppression d'une instance de coordonnées médiatiques",
        "description": "",
        "operationId": "deleteMedia",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identifiant de l'instance de coordonnées médiatiques à supprimer",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Instance de coordonnées médiatiques non trouvée"
          }
        }
      }
    },
    "/media/idFonctionnel/{idFonctionnel}": {
      "delete": {
        "tags": [
          "media"
        ],
        "summary": "Suppression de toute les coordonnées médiatiques identifiées par la leur idFonctionnel",
        "description": "",
        "operationId": "deleteMediaByIdFunc",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "idFonctionnel",
            "in": "path",
            "description": "idFonctionnel correspondant aux coordonnées médiatiques qu'il faut supprimer",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Media"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Coordonnées médiatiques non trouvées"
          }
        }
      }
    },
    "/media/idFonctionnel/{idFonctionnel}/{dateRef}": {
      "get": {
        "tags": [
          "media"
        ],
        "summary": "Recherche d'une date passée la plus proche de la date de reference pour une organisation donné",
        "description": "Retourne l'instance de coordonnées médiatiques de l'organisation à la date de référence donnée",
        "operationId": "getMediaByIdFuncAndDateRef",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "idFonctionnel",
            "in": "path",
            "description": "Reference de l'idFonctionnel de l'instance de coordonnées médiatiques à retourner",
            "required": true,
            "type": "string"
          },
          {
            "name": "dateRef",
            "in": "path",
            "description": "Date de référence de l'instance de coordonnées médiatiques à retourner",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Media"
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Coordonnées médiatiques non trouvées"
          }
        }
      }
    },
    "/media/all/{idFonctionnel}": {
      "get": {
        "tags": [
          "media"
        ],
        "summary": "Recherche toutes les coordonnées médiatiques avec un même idFonctionnel, ordonnées de la plus ancienne à la plus récente",
        "description": "Retourne la liste de coordonnées médiatiques de l'organisation ordonnée de la plus ancienne à la plus récente",
        "operationId": "getMediaByIdFunc",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "idFonctionnel",
            "in": "path",
            "description": "Reference de l'idFonctionnel des coordonnées médiatiques à retourner",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Media"
              }
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Adresse non trouvée"
          }
        }
      }
    },
    "/media/bulk": {
      "put": {
        "tags": [
          "media"
        ],
        "summary": "Update les media dont l'id est spécifié dans les query params",
        "description": "Retourne le nombre de medias impactés",
        "operationId": "updateMediasByIds",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "description": "Identifiants techniques des medias à mettre à jour",
            "required": true,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "in": "body",
            "name": "body",
            "description": "Un Objet de type media",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Media"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Opération réussie",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Media"
              }
            }
          },
          "400": {
            "description": "Identifiant invalide"
          },
          "404": {
            "description": "Adresse non trouvée"
          }
        }
      }
    }
  },
  "definitions": {
    "Media": {
      "type": "object",
      "properties": {
        "mdiId": {
          "type": "integer",
          "description": "Identifiant unique de l\\'élément chronologique de coordonnées médiatiques",
          "format": "int64"
        },
        "mdiIdFonctionnel": {
          "type": "string",
          "description": "Identifiant fonctionnel de l\\'élément chronologique de coordonnées médiatiques de la forme suivante : MED_[ID_FONCTIONNEL_OBJ]. Example : MED_ORG000001, Note : l\\'identifiant fonctionnel permet de voir à quelle entité est rattachée ce média"
        },
        "mdiFax": {
          "type": "string",
          "description": "Correspond au fax"
        },
        "mdiSiteWeb": {
          "type": "string",
          "description": "URL du site web de l\\'entité"
        },
        "mdiDateDebutValidite": {
          "type": "string",
          "format": "date-time",
          "description": "Date de début de validité de l\\'instance de coordonées médiatiques"
        },
        "mdiDateFinValidite": {
          "type": "string",
          "format": "date-time",
          "description": "Date de fin de validité de l\\'instance de coordonées médiatiques"
        },
        "mdiDateInsertion": {
          "type": "string",
          "format": "date-time",
          "description": "Date de création de l\\'instance de coordonées médiatiques"
        },
        "mdiDateModification": {
          "type": "string",
          "format": "date-time",
          "description": "Date de modification de l\\'instance de coordonées médiatiques"
        },
        "mdiDeleted": {
          "type": "boolean",
          "description": "Determine si l\\'entité a été logiquement supprimée"
        },
        "telephones": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Telephone"
          },
          "sourceCardinality": "1"
        },
        "emails": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Email"
          },
          "sourceCardinality": "1"
        }
      },
      "x-primary-key": [
        "mdiId"
      ]
    },
    "Telephone": {
      "type": "object",
      "properties": {
        "telId": {
          "type": "integer",
          "description": "Identifiant unique du numéro de téléphone",
          "format": "int64"
        },
        "telNumero": {
          "type": "string",
          "description": "Numéro de téléphone"
        },
        "telType": {
          "type": "string",
          "description": "Type de coordonnées - personnel, proHorsAdmr ou proAdmr",
          "enum": [
            "personnel",
            "proHorsAdmr",
            "proAdmr"
          ]
        },
        "telFormat": {
          "type": "string",
          "description": "Type de format attendu pour le numéroi de téléphone - mobile, fixe, interneHorsSite ou interneSurSite",
          "enum": [
            "mobile",
            "fixe",
            "interneHorsSite",
            "interneSurSite"
          ]
        },
        "telDiffusion": {
          "type": "string",
          "description": "Portée de diffusion du numéro de téléphone - public, partenaires, collaborateurs, urgencePlanif, prive",
          "enum": [
            "public",
            "partenaires",
            "collaborateurs",
            "urgencePlanif",
            "prive"
          ]
        },
        "telDateInsertion": {
          "type": "string",
          "format": "date-time",
          "description": "Date de création du téléphone"
        },
        "telDateModification": {
          "type": "string",
          "format": "date-time",
          "description": "Date de modification du téléphone"
        },
        "telDeleted": {
          "type": "boolean",
          "description": "Determine si l\\'entité a été logiquement supprimée"
        }
      },
      "x-primary-key": [
        "telId"
      ]
    },
    "Email": {
      "type": "object",
      "properties": {
        "melId": {
          "type": "integer",
          "description": "Identifiant unique du numéro du mail",
          "format": "int64"
        },
        "melEmail": {
          "type": "string",
          "description": "Email"
        },
        "melType": {
          "type": "string",
          "description": "Type de coordonnées - personnel, proHorsAdmr ou proAdmr",
          "enum": [
            "personnel",
            "proHorsAdmr",
            "proAdmr"
          ]
        },
        "melDiffusion": {
          "type": "string",
          "description": "Portée de diffusion du mail - public, partenaires, collaborateurs, urgencePlanif, prive",
          "enum": [
            "public",
            "partenaires",
            "collaborateurs",
            "urgencePlanif",
            "prive"
          ]
        },
        "melDateInsertion": {
          "type": "string",
          "format": "date-time",
          "description": "Date de création du mail"
        },
        "melDateModification": {
          "type": "string",
          "format": "date-time",
          "description": "Date de modification du mail"
        },
        "melDeleted": {
          "type": "boolean",
          "description": "Determine si l\\'entité a été logiquement supprimée"
        }
      },
      "x-primary-key": [
        "melId"
      ]
    }
  }
}