feat: ajout de la gestion des jobs avec création, récupération, suppression et filtrage via l'API, incluant des entités, des composants Vue.js et des mises à jour de la documentation API
This commit is contained in:
parent
4d1d5b9f21
commit
fd2d3cd640
@@ -12,6 +12,347 @@
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/api/jobs": {
|
||||
"get": {
|
||||
"operationId": "api_jobs_get_collection",
|
||||
"tags": [
|
||||
"Job"
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Job collection",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/Job"
|
||||
}
|
||||
}
|
||||
},
|
||||
"application/ld+json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"hydra:member": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/Job.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/Job"
|
||||
}
|
||||
}
|
||||
},
|
||||
"application/hal+json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"_embedded": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/Job.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 Job resources.",
|
||||
"description": "Retrieves the collection of Job resources.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "status",
|
||||
"in": "query",
|
||||
"description": "Filtrer par status",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pending",
|
||||
"in_progress",
|
||||
"completed",
|
||||
"failed"
|
||||
],
|
||||
"example": "pending"
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
},
|
||||
{
|
||||
"name": "type",
|
||||
"in": "query",
|
||||
"description": "Filtrer par type de job (ex: scraping_job)",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
},
|
||||
{
|
||||
"name": "createdAfter",
|
||||
"in": "query",
|
||||
"description": "Date de cr\u00e9ation minimum (format ISO8601)",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
},
|
||||
{
|
||||
"name": "createdBefore",
|
||||
"in": "query",
|
||||
"description": "Date de cr\u00e9ation maximum (format ISO8601)",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
},
|
||||
{
|
||||
"name": "page",
|
||||
"in": "query",
|
||||
"description": "Num\u00e9ro de la page",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"default": 1,
|
||||
"minimum": 1
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
},
|
||||
{
|
||||
"name": "limit",
|
||||
"in": "query",
|
||||
"description": "Nombre d'\u00e9l\u00e9ments par page",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"default": 20,
|
||||
"minimum": 1
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
},
|
||||
{
|
||||
"name": "sortBy",
|
||||
"in": "query",
|
||||
"description": "Champ de tri",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"createdAt",
|
||||
"type",
|
||||
"status"
|
||||
],
|
||||
"default": "createdAt"
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
},
|
||||
{
|
||||
"name": "sortOrder",
|
||||
"in": "query",
|
||||
"description": "Ordre de tri",
|
||||
"required": false,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"ASC",
|
||||
"DESC"
|
||||
],
|
||||
"default": "DESC"
|
||||
},
|
||||
"style": "form",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
}
|
||||
],
|
||||
"deprecated": false
|
||||
},
|
||||
"parameters": []
|
||||
},
|
||||
"/api/manga/chapters/fetch": {
|
||||
"post": {
|
||||
"operationId": "api_mangachaptersfetch_post",
|
||||
@@ -596,30 +937,24 @@
|
||||
"description": "Creates a new manga by fetching its data from Mangadex using an external ID",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"description": "The new Manga resource",
|
||||
"description": "",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Manga"
|
||||
}
|
||||
},
|
||||
"application/ld+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Manga.jsonld"
|
||||
}
|
||||
},
|
||||
"text/html": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Manga"
|
||||
}
|
||||
},
|
||||
"application/hal+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Manga.jsonhal"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"externalId"
|
||||
],
|
||||
"properties": {
|
||||
"externalId": {
|
||||
"type": "string",
|
||||
"description": "The Mangadex ID of the manga"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
"required": false
|
||||
},
|
||||
"deprecated": false
|
||||
},
|
||||
@@ -1177,64 +1512,6 @@
|
||||
"deprecated": false
|
||||
},
|
||||
"parameters": []
|
||||
},
|
||||
"/api/scraping/jobs/{jobId}/status": {
|
||||
"get": {
|
||||
"operationId": "api_scrapingjobs_jobIdstatus_get",
|
||||
"tags": [
|
||||
"Scraping"
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Scraping resource",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Scraping"
|
||||
}
|
||||
},
|
||||
"application/ld+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Scraping.jsonld"
|
||||
}
|
||||
},
|
||||
"text/html": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Scraping"
|
||||
}
|
||||
},
|
||||
"application/hal+json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Scraping.jsonhal"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Resource not found"
|
||||
}
|
||||
},
|
||||
"summary": "Retrieves a Scraping resource.",
|
||||
"description": "Retrieves a Scraping resource.",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "jobId",
|
||||
"in": "path",
|
||||
"description": "ScrapingStatusResponse identifier",
|
||||
"required": true,
|
||||
"deprecated": false,
|
||||
"allowEmptyValue": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
},
|
||||
"style": "simple",
|
||||
"explode": false,
|
||||
"allowReserved": false
|
||||
}
|
||||
],
|
||||
"deprecated": false
|
||||
},
|
||||
"parameters": []
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
@@ -1265,6 +1542,9 @@
|
||||
"isVisible": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"isAvailable": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string"
|
||||
}
|
||||
@@ -1296,6 +1576,9 @@
|
||||
"isVisible": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"isAvailable": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string"
|
||||
}
|
||||
@@ -1362,11 +1645,264 @@
|
||||
"isVisible": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"isAvailable": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Job": {
|
||||
"type": "object",
|
||||
"description": "Liste des jobs",
|
||||
"deprecated": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"description": "Identifiant unique du job",
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"description": "Type du job (ex: scraping_job)",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "Status du job",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pending",
|
||||
"in_progress",
|
||||
"completed",
|
||||
"failed",
|
||||
"cancelled"
|
||||
]
|
||||
},
|
||||
"createdAt": {
|
||||
"description": "Date de cr\u00e9ation du job",
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Date de d\u00e9but d'ex\u00e9cution du job",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"format": "date-time"
|
||||
},
|
||||
"completedAt": {
|
||||
"description": "Date de fin d'ex\u00e9cution du job",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"format": "date-time"
|
||||
},
|
||||
"failureReason": {
|
||||
"description": "Raison de l'\u00e9chec si le job a \u00e9chou\u00e9",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"attempts": {
|
||||
"minimum": 0,
|
||||
"description": "Nombre de tentatives effectu\u00e9es",
|
||||
"type": "integer"
|
||||
},
|
||||
"maxAttempts": {
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Nombre maximum de tentatives autoris\u00e9es",
|
||||
"type": "integer"
|
||||
},
|
||||
"context": {
|
||||
"description": "Donn\u00e9es contextuelles du job",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"status",
|
||||
"createdAt"
|
||||
]
|
||||
},
|
||||
"Job.jsonhal": {
|
||||
"type": "object",
|
||||
"description": "Liste des jobs",
|
||||
"deprecated": false,
|
||||
"properties": {
|
||||
"_links": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"self": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"href": {
|
||||
"type": "string",
|
||||
"format": "iri-reference"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"description": "Identifiant unique du job",
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"description": "Type du job (ex: scraping_job)",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "Status du job",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pending",
|
||||
"in_progress",
|
||||
"completed",
|
||||
"failed",
|
||||
"cancelled"
|
||||
]
|
||||
},
|
||||
"createdAt": {
|
||||
"description": "Date de cr\u00e9ation du job",
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Date de d\u00e9but d'ex\u00e9cution du job",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"format": "date-time"
|
||||
},
|
||||
"completedAt": {
|
||||
"description": "Date de fin d'ex\u00e9cution du job",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"format": "date-time"
|
||||
},
|
||||
"failureReason": {
|
||||
"description": "Raison de l'\u00e9chec si le job a \u00e9chou\u00e9",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"attempts": {
|
||||
"minimum": 0,
|
||||
"description": "Nombre de tentatives effectu\u00e9es",
|
||||
"type": "integer"
|
||||
},
|
||||
"maxAttempts": {
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Nombre maximum de tentatives autoris\u00e9es",
|
||||
"type": "integer"
|
||||
},
|
||||
"context": {
|
||||
"description": "Donn\u00e9es contextuelles du job",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"status",
|
||||
"createdAt"
|
||||
]
|
||||
},
|
||||
"Job.jsonld": {
|
||||
"type": "object",
|
||||
"description": "Liste des jobs",
|
||||
"deprecated": false,
|
||||
"properties": {
|
||||
"@id": {
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"@type": {
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"description": "Identifiant unique du job",
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"description": "Type du job (ex: scraping_job)",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "Status du job",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pending",
|
||||
"in_progress",
|
||||
"completed",
|
||||
"failed",
|
||||
"cancelled"
|
||||
]
|
||||
},
|
||||
"createdAt": {
|
||||
"description": "Date de cr\u00e9ation du job",
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Date de d\u00e9but d'ex\u00e9cution du job",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"format": "date-time"
|
||||
},
|
||||
"completedAt": {
|
||||
"description": "Date de fin d'ex\u00e9cution du job",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"format": "date-time"
|
||||
},
|
||||
"failureReason": {
|
||||
"description": "Raison de l'\u00e9chec si le job a \u00e9chou\u00e9",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"attempts": {
|
||||
"minimum": 0,
|
||||
"description": "Nombre de tentatives effectu\u00e9es",
|
||||
"type": "integer"
|
||||
},
|
||||
"maxAttempts": {
|
||||
"exclusiveMinimum": 0,
|
||||
"description": "Nombre maximum de tentatives autoris\u00e9es",
|
||||
"type": "integer"
|
||||
},
|
||||
"context": {
|
||||
"description": "Donn\u00e9es contextuelles du job",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"status",
|
||||
"createdAt"
|
||||
]
|
||||
},
|
||||
"Manga": {
|
||||
"type": "object",
|
||||
"description": "",
|
||||
@@ -2284,6 +2820,12 @@
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"thumbnailUrl": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"author": {
|
||||
"type": "string"
|
||||
},
|
||||
@@ -2334,6 +2876,12 @@
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"thumbnailUrl": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"author": {
|
||||
"type": "string"
|
||||
},
|
||||
@@ -2419,6 +2967,12 @@
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"thumbnailUrl": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"author": {
|
||||
"type": "string"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user