feat: ajout de la gestion des sources de contenu avec des commandes et des gestionnaires pour l'importation, la mise à jour et l'exportation, ainsi que la création des ressources API correspondantes.

This commit is contained in:
ext.jeremy.guillot@maxicoffee.domains
2025-06-26 23:24:13 +02:00
parent ebcca466a9
commit 32b4e4fbb2
30 changed files with 1783 additions and 0 deletions

View File

@@ -12,6 +12,558 @@
}
],
"paths": {
"/api/content-sources": {
"get": {
"operationId": "api_content-sources_get_collection",
"tags": [
"ContentSource"
],
"responses": {
"200": {
"description": "ContentSource collection",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ContentSource"
}
}
},
"application/ld+json": {
"schema": {
"type": "object",
"properties": {
"hydra:member": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ContentSource.jsonld"
}
},
"hydra:totalItems": {
"type": "integer",
"minimum": 0
},
"hydra:view": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"format": "iri-reference"
},
"@type": {
"type": "string"
},
"hydra:first": {
"type": "string",
"format": "iri-reference"
},
"hydra:last": {
"type": "string",
"format": "iri-reference"
},
"hydra:previous": {
"type": "string",
"format": "iri-reference"
},
"hydra:next": {
"type": "string",
"format": "iri-reference"
}
},
"example": {
"@id": "string",
"type": "string",
"hydra:first": "string",
"hydra:last": "string",
"hydra:previous": "string",
"hydra:next": "string"
}
},
"hydra:search": {
"type": "object",
"properties": {
"@type": {
"type": "string"
},
"hydra:template": {
"type": "string"
},
"hydra:variableRepresentation": {
"type": "string"
},
"hydra:mapping": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@type": {
"type": "string"
},
"variable": {
"type": "string"
},
"property": {
"type": [
"string",
"null"
]
},
"required": {
"type": "boolean"
}
}
}
}
}
}
},
"required": [
"hydra:member"
]
}
},
"text/html": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ContentSource"
}
}
},
"application/hal+json": {
"schema": {
"type": "object",
"properties": {
"_embedded": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ContentSource.jsonhal"
}
},
"totalItems": {
"type": "integer",
"minimum": 0
},
"itemsPerPage": {
"type": "integer",
"minimum": 0
},
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
},
"first": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
},
"last": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
},
"next": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
},
"previous": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
}
},
"required": [
"_links",
"_embedded"
]
}
}
}
}
},
"summary": "Retrieves the collection of ContentSource resources.",
"description": "Retrieves the collection of ContentSource resources.",
"parameters": [
{
"name": "page",
"in": "query",
"description": "The collection page number",
"required": false,
"deprecated": false,
"allowEmptyValue": true,
"schema": {
"type": "integer",
"default": 1
},
"style": "form",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"post": {
"operationId": "api_content-sources_post",
"tags": [
"ContentSource"
],
"responses": {
"201": {
"description": "ContentSource resource created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonhal"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
}
},
"summary": "Creates a ContentSource resource.",
"description": "Creates a ContentSource resource.",
"parameters": [],
"requestBody": {
"description": "The new ContentSource resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonhal"
}
}
},
"required": true
},
"deprecated": false
},
"parameters": []
},
"/api/content-sources/export": {
"get": {
"operationId": "api_content-sourcesexport_get",
"tags": [
"ContentSourceExport"
],
"responses": {
"200": {
"description": "ContentSourceExport resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceExport"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceExport.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSourceExport"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceExport.jsonhal"
}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a ContentSourceExport resource.",
"description": "Retrieves a ContentSourceExport resource.",
"parameters": [],
"deprecated": false
},
"parameters": []
},
"/api/content-sources/import": {
"post": {
"operationId": "api_content-sourcesimport_post",
"tags": [
"ContentSourceImport"
],
"responses": {
"201": {
"description": "ContentSourceImport resource created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport.jsonhal"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
}
},
"summary": "Creates a ContentSourceImport resource.",
"description": "Creates a ContentSourceImport resource.",
"parameters": [],
"requestBody": {
"description": "The new ContentSourceImport resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSourceImport.jsonhal"
}
}
},
"required": true
},
"deprecated": false
},
"parameters": []
},
"/api/content-sources/{id}": {
"get": {
"operationId": "api_content-sources_id_get",
"tags": [
"ContentSource"
],
"responses": {
"200": {
"description": "ContentSource resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonhal"
}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a ContentSource resource.",
"description": "Retrieves a ContentSource resource.",
"parameters": [
{
"name": "id",
"in": "path",
"description": "GetContentSourceResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"put": {
"operationId": "api_content-sources_id_put",
"tags": [
"ContentSource"
],
"responses": {
"200": {
"description": "ContentSource resource updated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonhal"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
},
"404": {
"description": "Resource not found"
}
},
"summary": "Replaces the ContentSource resource.",
"description": "Replaces the ContentSource resource.",
"parameters": [
{
"name": "id",
"in": "path",
"description": "UpsertContentSourceResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"requestBody": {
"description": "The updated ContentSource resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/ContentSource"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/ContentSource.jsonhal"
}
}
},
"required": true
},
"deprecated": false
},
"parameters": []
},
"/api/jobs": {
"get": {
"operationId": "api_jobs_get_collection",
@@ -1846,6 +2398,352 @@
}
}
},
"ContentSource": {
"type": "object",
"description": "R\u00e9cup\u00e8re une source de contenu par son identifiant",
"deprecated": false,
"required": [
"id"
],
"properties": {
"id": {
"type": "integer"
},
"baseUrl": {
"type": "string"
},
"chapterUrlFormat": {
"type": "string"
},
"scrapingType": {
"type": "string"
},
"imageSelector": {
"type": [
"string",
"null"
]
},
"nextPageSelector": {
"type": [
"string",
"null"
]
},
"chapterSelector": {
"type": [
"string",
"null"
]
},
"cleanBaseUrl": {
"type": "string"
}
}
},
"ContentSource.jsonhal": {
"type": "object",
"description": "R\u00e9cup\u00e8re une source de contenu par son identifiant",
"deprecated": false,
"required": [
"id"
],
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"id": {
"type": "integer"
},
"baseUrl": {
"type": "string"
},
"chapterUrlFormat": {
"type": "string"
},
"scrapingType": {
"type": "string"
},
"imageSelector": {
"type": [
"string",
"null"
]
},
"nextPageSelector": {
"type": [
"string",
"null"
]
},
"chapterSelector": {
"type": [
"string",
"null"
]
},
"cleanBaseUrl": {
"type": "string"
}
}
},
"ContentSource.jsonld": {
"type": "object",
"description": "R\u00e9cup\u00e8re une source de contenu par son identifiant",
"deprecated": false,
"required": [
"id"
],
"properties": {
"@context": {
"readOnly": true,
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"@vocab": {
"type": "string"
},
"hydra": {
"type": "string",
"enum": [
"http://www.w3.org/ns/hydra/core#"
]
}
},
"required": [
"@vocab",
"hydra"
],
"additionalProperties": true
}
]
},
"@id": {
"readOnly": true,
"type": "string"
},
"@type": {
"readOnly": true,
"type": "string"
},
"id": {
"type": "integer"
},
"baseUrl": {
"type": "string"
},
"chapterUrlFormat": {
"type": "string"
},
"scrapingType": {
"type": "string"
},
"imageSelector": {
"type": [
"string",
"null"
]
},
"nextPageSelector": {
"type": [
"string",
"null"
]
},
"chapterSelector": {
"type": [
"string",
"null"
]
},
"cleanBaseUrl": {
"type": "string"
}
}
},
"ContentSourceExport": {
"type": "object",
"description": "Exporte toutes les sources de contenu au format JSON",
"deprecated": false
},
"ContentSourceExport.jsonhal": {
"type": "object",
"description": "Exporte toutes les sources de contenu au format JSON",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
}
}
},
"ContentSourceExport.jsonld": {
"type": "object",
"description": "Exporte toutes les sources de contenu au format JSON",
"deprecated": false,
"properties": {
"@context": {
"readOnly": true,
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"@vocab": {
"type": "string"
},
"hydra": {
"type": "string",
"enum": [
"http://www.w3.org/ns/hydra/core#"
]
}
},
"required": [
"@vocab",
"hydra"
],
"additionalProperties": true
}
]
},
"@id": {
"readOnly": true,
"type": "string"
},
"@type": {
"readOnly": true,
"type": "string"
}
}
},
"ContentSourceImport": {
"type": "object",
"description": "Importe des sources de contenu depuis un tableau JSON",
"deprecated": false,
"required": [
"contentSources"
],
"properties": {
"contentSources": {
"minItems": 1,
"type": "array",
"items": {
"type": "string"
}
}
}
},
"ContentSourceImport.jsonhal": {
"type": "object",
"description": "Importe des sources de contenu depuis un tableau JSON",
"deprecated": false,
"required": [
"contentSources"
],
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"contentSources": {
"minItems": 1,
"type": "array",
"items": {
"type": "string"
}
}
}
},
"ContentSourceImport.jsonld": {
"type": "object",
"description": "Importe des sources de contenu depuis un tableau JSON",
"deprecated": false,
"required": [
"contentSources"
],
"properties": {
"@context": {
"readOnly": true,
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"@vocab": {
"type": "string"
},
"hydra": {
"type": "string",
"enum": [
"http://www.w3.org/ns/hydra/core#"
]
}
},
"required": [
"@vocab",
"hydra"
],
"additionalProperties": true
}
]
},
"@id": {
"readOnly": true,
"type": "string"
},
"@type": {
"readOnly": true,
"type": "string"
},
"contentSources": {
"minItems": 1,
"type": "array",
"items": {
"type": "string"
}
}
}
},
"Job": {
"type": "object",
"description": "Liste des jobs",