{ "openapi": "3.0.0", "info": { "version": "1.0.0", "title": "Clévacances", "description": "API REST for Clevacances", "license": { "name": "Splitfire private work", "url": "https://www.mozilla.org/en-US/MPL/2.0/" }, "contact": { "name": "Splitfire web agency", "url": "https://www.splitfire.fr", "email": "contact@splitfire.fr" } }, "paths": { "/environments": { "get": { "tags": [ "Environments" ], "summary": "Moteur de recherche sur les environnements", "security": [ { "ApiKeyAuth": [ "admin" ] } ], "responses": { "200": { "description": "Liste des environnements", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvironmentCollection" } } } } }, "parameters": [ { "Term": null, "name": "term", "in": "path", "required": false, "description": "Recherche plein-texte sur le nom", "schema": { "type": "string", "example": "vosges" } }, { "Sort": null, "name": "sort", "in": "path", "required": false, "description": "Tri (created_asc, created_desc, reference_asc, reference_desc)", "schema": { "type": "string", "example": "created_asc" } } ] } }, "/environments/{environment_id}": { "parameters": [ { "EnvironmentId": null, "name": "environment_id", "in": "path", "required": true, "description": "Identifiant de l'environnement", "schema": { "type": "integer", "example": 1 } } ], "get": { "tags": [ "Environments" ], "summary": "Récupération d'un environnement par son identifiant unique", "responses": { "200": { "description": "Environnement désigné par l'identifiant {id}", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/Environment" } } } } } } } } }, "/plans": { "get": { "tags": [ "Plans" ], "summary": "Moteur de recherche sur les plans", "security": [ { "ApiKeyAuth": [ "admin" ] } ], "responses": { "200": { "description": "Liste des plans", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PlanCollection" } } } } }, "parameters": [ { "Term": null, "name": "term", "in": "path", "required": false, "description": "Recherche plein-texte sur le nom", "schema": { "type": "string", "example": "free" } }, { "Sort": null, "name": "sort", "in": "path", "required": false, "description": "Tri (created_asc, created_desc, name_asc, name_desc)", "schema": { "type": "string", "example": "created_asc" } } ] } }, "/hotels": { "get": { "tags": [ "Hotels" ], "summary": "Moteur de recherche sur les hotels", "security": [ { "ApiKeyAuth": [ "admin" ] } ], "responses": { "200": { "description": "Liste des hotels", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HotelCollection" } } } } }, "parameters": [ { "Term": null, "name": "term", "in": "path", "required": false, "description": "Recherche plein-texte sur le nom", "schema": { "type": "string", "example": "vosges" } } ] } } }, "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-AccessToken" } }, "parameters": {}, "schemas": { "CommonLinks": { "type": "object", "properties": { "first": { "type": "string", "format": "uri", "example": "https://api.example.io/path/to/search?page=1&page=15", "description": "Url de la première page" }, "prev": { "type": "string", "format": "uri", "example": "https://api.example.io/path/to/search?page=1&page=15", "description": "Url de la page précédente" }, "next": { "type": "string", "format": "uri", "example": "https://api.example.io/path/to/search?page=1&page=15", "description": "Url de la prochaine page" }, "last": { "type": "string", "format": "uri", "example": "https://api.example.io/path/to/search?page=1&page=15", "description": "Url de la dernière page" } } }, "CommonMeta": { "type": "object", "properties": { "current-page": { "type": "integer", "description": "Page courante", "example": 2 }, "per-page": { "type": "integer", "description": "Nombre de résultats par page", "example": 15 }, "total": { "type": "integer", "example": 50, "description": "Nombre total de résultats" }, "last-page": { "type": "integer", "description": "Numéro de la dernière page de résultats à afficher", "example": 4 } } }, "EnvironmentCollection": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Environment" } } } }, "Environment": { "type": "object", "properties": { "id": { "type": "integer", "description": "Identifiant unique", "example": 1 }, "reference": { "type": "string", "description": "Référence de l'environnement", "example": "CLEVNAT", "maximum": 16 }, "name": { "type": "string", "description": "Nom complet de l'environnement", "example": "Clévacances national", "maximum": 80 }, "domain": { "type": "string", "description": "Nom de domaine du site web de l'environnement", "example": "clevacances.com" }, "created_at": { "type": "string", "description": "Date de création", "format": "datetime", "example": "2019-02-08T10:10:15Z" }, "updated_at": { "type": "string", "description": "Date de dernière modification", "format": "datetime", "example": "2019-10-15T10:21:00Z" } } }, "PlanCollection": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Plan" } } } }, "Plan": { "type": "object", "properties": { "id": { "type": "integer", "description": "Identifiant unique", "example": 1 }, "alias": { "type": "string", "description": "Alias du plan (pour mappage dans le code)", "example": "liberte", "maximum": 45 }, "name": { "type": "string", "description": "Nom complet du plan", "example": "Formule liberté", "maximum": 45 }, "commission_rate": { "type": "number", "format": "float", "description": "Taux de commission (%)", "example": "12,5" }, "commission_min_amount": { "type": "number", "format": "float", "description": "Taux de commission minimum (€)", "example": "15,5" }, "commission_max_amount": { "type": "number", "format": "float", "description": "Taux de commission maximum (€)", "example": "25,5" }, "markup_rate": { "type": "number", "format": "float", "description": "Taux de markup (%)", "example": "12,5" }, "markup_min_amount": { "type": "number", "format": "float", "description": "Montant de markup minimum (€)", "example": "15,5" }, "markup_max_amount": { "type": "number", "format": "float", "description": "Montant de markup maximum (€)", "example": "25,5" }, "created_at": { "type": "string", "description": "Date de création", "format": "datetime", "example": "2019-02-08T10:10:15Z" }, "updated_at": { "type": "string", "description": "Date de dernière modification", "format": "datetime", "example": "2019-10-15T10:21:00Z" } } }, "HotelCollection": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Hotel" } } } }, "Hotel": { "type": "object", "properties": { "id": { "type": "integer", "description": "Identifiant unique", "example": 1 }, "hlo": { "type": "string", "description": "Référence unique", "max": 30, "example": "HLOLOR088ST00012" }, "state": { "type": "string", "enum": [ "actif", "inactif" ], "description": "description: Etat de la structure * `actif`: Structure activée * `inactif`: Structure désactivée\n", "example": "actif" }, "capacity": { "type": "int", "description": "Capacité de la structure", "example": 4, "max": 999 }, "type": { "type": "integer", "enum": [ 1, 2, 3, 4, 5, 6, 7, 8 ], "description": "Type de structure * `1`: Locations et chambres d'hotes * `2`: Chambres d'hôtes * `3`: Locations * `4`:Résidence * `5`: Village de gîte * `6`: Maison d'hôtes * `7`: Chambres Clévacances * `8`: Chambres Clévacances et locations\n", "example": 1 }, "adress1": { "type": "string", "description": "Adresse de la structure", "max": 255, "example": "255 Route du Faucon" }, "adress2": { "type": "string", "description": "Complément d'adresse de la structure", "max": 255, "example": "D24" }, "adress3": { "type": "string", "description": "Complément d'adresse de la structure", "max": 255, "example": "Appartement 3" }, "commune": { "type": "string", "description": "Ville", "max": 255, "example": "Epinal" }, "postal_code": { "type": "string", "description": "Code postal", "max": 10, "example": "88000" }, "title": { "type": "object", "description": "Titre de la structure", "properties": { "fr": { "type": "string", "description": "Titre francais", "max": 255, "example": "Gîtes du lac" }, "en": { "type": "string", "description": "Titre anglais", "max": 255, "example": "Gîtes of the lac" } } }, "description": { "type": "object", "description": "Description de la structure", "properties": { "fr": { "type": "string", "description": "Description francais", "example": "Blabla" }, "en": { "type": "string", "description": "Description anglais", "example": "Blabla" } } }, "proximity": { "type": "object", "description": "Plan de localisation de la structure", "properties": { "fr": { "type": "string", "description": "Plan francais", "example": "Blabla" }, "en": { "type": "string", "description": "Plan anglais", "example": "Blabla" } } }, "languages": { "type": "array", "description": "Liste des langues parlées par le propriétaire: ES,GB,DE,NL,AE,IT,RU,PT,CA,OC,CN,FR,JP,SE,DA,PL,GR,NO\n", "items": { "type": "string" } }, "created_at": { "type": "string", "description": "Date de création", "format": "datetime", "example": "2019-02-08T10:10:15Z" }, "updated_at": { "type": "string", "description": "Date de dernière modification", "format": "datetime", "example": "2019-10-15T10:21:00Z" } } } } }, "errors": { "ErrorValidation": { "type": "object", "properties": { "errors": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "description": "Nom de la classe d'exception", "example": "Illuminate\\Validation\\ValidationException" }, "detail": { "type": "string", "description": "Détail de l'exception", "example": "The given data is invalid." }, "status": { "type": "integer", "description": "Code erreur de l'exception", "example": 422 }, "code": { "type": "string", "example": "Illuminate\\Validation\\ValidationException" }, "meta": { "type": "object", "properties": { "fields": { "type": "object", "properties": { "field_name": { "type": "array", "description": "Nom des champs du formulaire", "items": { "type": "string", "description": "Messages descriptif des erreurs de validation" } } } }, "file": { "type": "string", "description": "Fichier levant l'exception", "example": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php" }, "line": { "type": "integer", "example": 130 }, "trace": { "type": "array", "items": { "type": "object" } } } } } } }, "meta": { "type": "array", "items": { "type": "object" } } } }, "ErrorNotFound": { "type": "object", "properties": { "errors": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "description": "Nom de la classe d'exception", "example": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException" }, "detail": { "type": "string", "description": "Détail de l'exception contenant le nom et l'identifiant du model", "example": "No query results for model [Nom du model] 9." }, "status": { "type": "integer", "description": "Code erreur de l'exception", "example": 404 }, "code": { "type": "string", "example": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException" }, "meta": { "type": "object", "properties": { "file": { "type": "string", "description": "Fichier levant l'exception", "example": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php" }, "line": { "type": "integer", "example": 130 }, "trace": { "type": "array", "items": { "type": "object" } } } } } } }, "meta": { "type": "array", "items": { "type": "object" } } } } } }