Files
Mangarr/public/api-docs.json

5343 lines
221 KiB
JSON

{
"openapi": "3.1.0",
"info": {
"title": "Mangarr API",
"description": "",
"version": "1.0.0"
},
"servers": [
{
"url": "/",
"description": ""
}
],
"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": [
"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": [],
"deprecated": false
},
"parameters": []
},
"/api/content-sources/import": {
"post": {
"operationId": "api_content-sourcesimport_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/{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",
"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 (s\u00e9par\u00e9s par des virgules pour plusieurs statuts, ex: \"pending,in_progress\" ou sous forme de tableau avec \"status[]=\")",
"required": false,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"oneOf": [
{
"type": "string",
"example": "pending,in_progress"
},
{
"type": "array",
"items": {
"type": "string",
"enum": [
"pending",
"in_progress",
"completed",
"failed",
"cancelled"
]
},
"example": [
"pending",
"in_progress"
]
}
]
},
"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",
"tags": [
"Mangadex"
],
"responses": {
"202": {
"description": "Demande de r\u00e9cup\u00e9ration accept\u00e9e et mise en file d'attente"
},
"422": {
"description": "Donn\u00e9es de validation invalides"
}
},
"summary": "R\u00e9cup\u00e9rer les chapitres d'un manga",
"description": "Lance le processus de r\u00e9cup\u00e9ration des chapitres depuis la source externe pour un manga donn\u00e9",
"parameters": [],
"requestBody": {
"description": "Donn\u00e9es requises pour r\u00e9cup\u00e9rer les chapitres",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"mangaId": {
"type": "string",
"format": "uuid",
"description": "L'identifiant unique du manga",
"example": "123e4567-e89b-12d3-a456-426614174000"
}
},
"required": [
"mangaId"
]
}
}
},
"required": true
},
"deprecated": false
},
"parameters": []
},
"/api/manga/chapters/{id}": {
"delete": {
"operationId": "delete_chapter",
"tags": [
"Chapters"
],
"responses": {
"204": {
"description": "Chapter successfully deleted"
},
"404": {
"description": "Chapter not found"
}
},
"summary": "Delete a chapter (soft delete)",
"description": "Marks a chapter as deleted by setting its visibility to false",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The chapter ID",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/manga/chapters/{id}/cbz": {
"delete": {
"operationId": "delete_cbz",
"tags": [
"Cbz"
],
"responses": {
"204": {
"description": "CBZ file successfully deleted"
},
"404": {
"description": "Chapter or CBZ file not found"
}
},
"summary": "Delete chapter CBZ file",
"description": "Removes the CBZ file for a specific chapter and updates the chapter accordingly",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The chapter ID",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/manga/chapters/{id}/download": {
"get": {
"operationId": "download_chapter_cbz",
"tags": [
"Cbz"
],
"responses": {
"204": {
"description": "Cbz resource",
"content": {
"application/json": {
"schema": {}
},
"application/ld+json": {
"schema": {}
},
"text/html": {
"schema": {}
},
"application/hal+json": {
"schema": {}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a Cbz resource.",
"description": "Retrieves a Cbz resource.",
"parameters": [
{
"name": "id",
"in": "path",
"description": "DownloadCbzResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/mangadex-search": {
"get": {
"operationId": "api_mangadex-search_get",
"tags": [
"Mangadex"
],
"responses": {
"200": {
"description": "Mangadex resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Mangadex.MangaSearchCollection"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/Mangadex.MangaSearchCollection.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/Mangadex.MangaSearchCollection"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/Mangadex.MangaSearchCollection.jsonhal"
}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a Mangadex resource.",
"description": "Retrieves a Mangadex resource.",
"parameters": [
{
"name": "title",
"in": "query",
"description": "The title to search for",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "form",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/mangas": {
"get": {
"operationId": "api_mangas_get_collection",
"tags": [
"Manga"
],
"responses": {
"200": {
"description": "Manga collection",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Manga.MangaCollection"
}
}
},
"application/ld+json": {
"schema": {
"type": "object",
"properties": {
"hydra:member": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Manga.MangaCollection.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/Manga.MangaCollection"
}
}
},
"application/hal+json": {
"schema": {
"type": "object",
"properties": {
"_embedded": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Manga.MangaCollection.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 Manga resources.",
"description": "Retrieves the collection of Manga 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
},
"parameters": []
},
"/api/mangas/by-id/{id}": {
"get": {
"operationId": "api_mangasby-id_id_get",
"tags": [
"Manga"
],
"responses": {
"200": {
"description": "Manga resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail.jsonhal"
}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a Manga resource.",
"description": "Retrieves a Manga resource.",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The manga identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/mangas/by-slug/{slug}": {
"get": {
"operationId": "get_manga_by_slug",
"tags": [
"Manga"
],
"responses": {
"200": {
"description": "Manga resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/Manga.MangaDetail.jsonhal"
}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a Manga resource.",
"description": "Retrieves a Manga resource.",
"parameters": [
{
"name": "slug",
"in": "path",
"description": "GetMangaBySlugResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/mangas/create": {
"post": {
"operationId": "api_mangascreate_post",
"tags": [
"Manga"
],
"responses": {
"201": {
"description": "Manga resource created",
"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"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
}
},
"summary": "Create a new manga directly",
"description": "Creates a new manga with provided data",
"parameters": [],
"requestBody": {
"description": "The new Manga resource",
"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"
}
}
},
"required": true
},
"deprecated": false
},
"parameters": []
},
"/api/mangas/create-from-mangadex": {
"post": {
"operationId": "api_mangascreate-from-mangadex_post",
"tags": [
"Mangadex"
],
"responses": {
"201": {
"description": "Mangadex resource created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Mangadex"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/Mangadex.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/Mangadex"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/Mangadex.jsonhal"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
}
},
"summary": "Create a new manga from Mangadex",
"description": "Creates a new manga by fetching its data from Mangadex using an external ID",
"parameters": [],
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"externalId"
],
"properties": {
"externalId": {
"type": "string",
"description": "The Mangadex ID of the manga"
}
}
}
}
},
"required": false
},
"deprecated": false
},
"parameters": []
},
"/api/mangas/search": {
"get": {
"operationId": "api_mangassearch_get",
"tags": [
"Manga"
],
"responses": {
"200": {
"description": "R\u00e9sultats de la recherche",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaSearchItem"
}
}
}
}
}
}
},
"400": {
"description": "Param\u00e8tres de recherche invalides"
}
},
"summary": "Recherche des mangas dans la biblioth\u00e8que locale",
"description": "Recherche des mangas par titre, slug ou auteur (minimum 3 caract\u00e8res)",
"parameters": [
{
"name": "q",
"in": "query",
"description": "Terme de recherche (minimum 3 caract\u00e8res)",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string",
"minLength": 3
},
"style": "form",
"explode": false,
"allowReserved": false
},
{
"name": "page",
"in": "query",
"description": "Num\u00e9ro de 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 de r\u00e9sultats par page",
"required": false,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "integer",
"default": 20,
"minimum": 1,
"maximum": 50
},
"style": "form",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/mangas/{id}/chapters": {
"get": {
"operationId": "api_mangas_idchapters_get",
"tags": [
"Chapters"
],
"responses": {
"200": {
"description": "Chapters resource",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Chapters.ChapterCollection"
}
},
"application/ld+json": {
"schema": {
"$ref": "#/components/schemas/Chapters.ChapterCollection.jsonld"
}
},
"text/html": {
"schema": {
"$ref": "#/components/schemas/Chapters.ChapterCollection"
}
},
"application/hal+json": {
"schema": {
"$ref": "#/components/schemas/Chapters.ChapterCollection.jsonhal"
}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a Chapters resource.",
"description": "Retrieves a Chapters resource.",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The manga identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
},
{
"name": "page",
"in": "query",
"description": "The page number",
"required": false,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "integer",
"default": 1
},
"style": "form",
"explode": false,
"allowReserved": false
},
{
"name": "limit",
"in": "query",
"description": "Number of items per page",
"required": false,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "integer",
"default": 20
},
"style": "form",
"explode": false,
"allowReserved": false
},
{
"name": "sortOrder",
"in": "query",
"description": "Sort order for chapters",
"required": false,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string",
"enum": [
"asc",
"desc"
],
"default": "desc"
},
"style": "form",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/mangas/{id}/edit": {
"put": {
"operationId": "api_mangas_idedit_put",
"tags": [
"Manga"
],
"responses": {
"200": {
"description": "Manga resource updated",
"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"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
},
"404": {
"description": "Resource not found"
}
},
"summary": "Edit an existing manga",
"description": "Updates an existing manga with provided data (partial update supported)",
"parameters": [
{
"name": "id",
"in": "path",
"description": "EditMangaResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"requestBody": {
"description": "The updated Manga resource",
"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"
}
}
},
"required": true
},
"deprecated": false
},
"parameters": []
},
"/api/mangas/{id}/preferred-sources": {
"get": {
"operationId": "api_mangas_idpreferred-sources_get",
"tags": [
"Scraping"
],
"responses": {
"200": {
"description": "Sources r\u00e9cup\u00e9r\u00e9es avec succ\u00e8s",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"mangaId": {
"type": "string"
},
"hasPreferredSources": {
"type": "boolean"
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"baseUrl": {
"type": "string"
},
"description": {
"type": "string"
},
"isActive": {
"type": "boolean"
}
}
}
}
}
},
"example": {
"mangaId": "1",
"hasPreferredSources": true,
"sources": [
{
"id": "1",
"name": "MangaDex",
"baseUrl": "https://mangadex.org",
"description": "Source principale",
"isActive": true
},
{
"id": "2",
"name": "MangaKakalot",
"baseUrl": "https://mangakakalot.com",
"description": "Source secondaire",
"isActive": true
}
]
}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "R\u00e9cup\u00e9rer les sources pr\u00e9f\u00e9r\u00e9es d'un manga",
"description": "Retourne les sources pr\u00e9f\u00e9r\u00e9es configur\u00e9es pour un manga, ou toutes les sources disponibles si aucune pr\u00e9f\u00e9rence d\u00e9finie",
"parameters": [
{
"name": "id",
"in": "path",
"description": "GetMangaPreferredSourcesResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"post": {
"operationId": "api_mangas_idpreferred-sources_post",
"tags": [
"Scraping"
],
"responses": {
"200": {
"description": "Scraping resource created",
"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"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
}
},
"summary": "Configurer les sources pr\u00e9f\u00e9r\u00e9es d'un manga",
"description": "D\u00e9finit l'ordre de priorit\u00e9 des sources de scraping pour un manga. Format attendu: {\"sourceIds\": [\"source1\", \"source2\"]}",
"parameters": [
{
"name": "id",
"in": "path",
"description": "SetMangaPreferredSourcesResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"requestBody": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"sourceIds": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"example": {
"sourceIds": [
"1",
"2"
]
}
}
},
"required": false
},
"deprecated": false
},
"parameters": []
},
"/api/mangas/{id}/volumes/{volume}/download": {
"get": {
"operationId": "download_manga_volume",
"tags": [
"Cbz"
],
"responses": {
"204": {
"description": "Cbz resource",
"content": {
"application/json": {
"schema": {}
},
"application/ld+json": {
"schema": {}
},
"text/html": {
"schema": {}
},
"application/hal+json": {
"schema": {}
}
}
},
"404": {
"description": "Resource not found"
}
},
"summary": "Retrieves a Cbz resource.",
"description": "Retrieves a Cbz resource.",
"parameters": [
{
"name": "id",
"in": "path",
"description": "DownloadVolumeResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
},
{
"name": "volume",
"in": "path",
"description": "DownloadVolumeResource identifier",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/reader/chapter/{chapterId}": {
"get": {
"operationId": "api_readerchapter_chapterId_get",
"tags": [
"Reader"
],
"responses": {
"200": {
"description": "Contexte du chapitre",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"number": {
"type": "string"
},
"manga": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"navigation": {
"type": "object",
"properties": {
"previous": {
"type": "object",
"nullable": true,
"properties": {
"id": {
"type": "string"
},
"number": {
"type": "string"
}
}
},
"next": {
"type": "object",
"nullable": true,
"properties": {
"id": {
"type": "string"
},
"number": {
"type": "string"
}
}
}
}
}
}
}
}
}
},
"404": {
"description": "Chapitre non trouv\u00e9"
}
},
"summary": "R\u00e9cup\u00e8re le contexte d'un chapitre",
"description": "Retourne les m\u00e9tadonn\u00e9es du chapitre et sa navigation",
"parameters": [
{
"name": "chapterId",
"in": "path",
"description": "",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/reader/chapter/{chapterId}/page/{pageNumber}": {
"get": {
"operationId": "api_readerchapter_chapterIdpage_pageNumber_get",
"tags": [
"Reader"
],
"responses": {
"200": {
"description": "Page du chapitre",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"pageNumber": {
"type": "integer"
},
"base64Content": {
"type": "string",
"description": "Contenu de l'image en base64"
},
"mimeType": {
"type": "string",
"example": "image/jpeg"
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "integer"
},
"height": {
"type": "integer"
}
}
}
}
}
}
}
},
"404": {
"description": "Chapitre ou page non trouv\u00e9"
}
},
"summary": "R\u00e9cup\u00e8re une page sp\u00e9cifique d'un chapitre",
"description": "Retourne le contenu d'une page en base64 avec ses m\u00e9tadonn\u00e9es",
"parameters": [
{
"name": "chapterId",
"in": "path",
"description": "L'identifiant du chapitre",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
},
{
"name": "pageNumber",
"in": "path",
"description": "Le num\u00e9ro de la page \u00e0 r\u00e9cup\u00e9rer",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "integer",
"minimum": 1
},
"style": "simple",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/reader/chapter/{chapterId}/pages": {
"get": {
"operationId": "api_readerchapter_chapterIdpages_get",
"tags": [
"Reader"
],
"responses": {
"200": {
"description": "Collection pagin\u00e9e des pages du chapitre",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "integer"
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "integer"
},
"height": {
"type": "integer"
}
}
}
}
}
},
"totalItems": {
"type": "integer"
},
"currentPage": {
"type": "integer"
},
"itemsPerPage": {
"type": "integer"
},
"totalPages": {
"type": "integer"
}
}
}
}
}
},
"404": {
"description": "Chapitre non trouv\u00e9"
}
},
"summary": "R\u00e9cup\u00e8re les pages d'un chapitre",
"description": "Retourne une collection pagin\u00e9e des pages du chapitre",
"parameters": [
{
"name": "chapterId",
"in": "path",
"description": "",
"required": true,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
},
"style": "simple",
"explode": false,
"allowReserved": false
},
{
"name": "page",
"in": "query",
"description": "",
"required": false,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "integer",
"default": 1
},
"style": "form",
"explode": false,
"allowReserved": false
},
{
"name": "itemsPerPage",
"in": "query",
"description": "",
"required": false,
"deprecated": false,
"allowEmptyValue": false,
"schema": {
"type": "integer",
"default": 20
},
"style": "form",
"explode": false,
"allowReserved": false
}
],
"deprecated": false
},
"parameters": []
},
"/api/scraping/chapters": {
"post": {
"operationId": "api_scrapingchapters_post",
"tags": [
"Scraping"
],
"responses": {
"202": {
"description": "Scraping resource created",
"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"
}
}
},
"links": {}
},
"400": {
"description": "Invalid input"
},
"422": {
"description": "Unprocessable entity"
}
},
"summary": "Creates a Scraping resource.",
"description": "Creates a Scraping resource.",
"parameters": [],
"requestBody": {
"description": "The new 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"
}
}
},
"required": true
},
"deprecated": false
},
"parameters": []
},
"/api/scraping/test-configuration": {
"post": {
"operationId": "api_scrapingtest-configuration_post",
"tags": [
"Scraping",
"Configuration"
],
"responses": {
"200": {
"description": "Test de configuration r\u00e9ussi",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"description": "Indique si le test a r\u00e9ussi"
},
"imageUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"description": "Liste des URLs d'images trouv\u00e9es"
},
"totalImages": {
"type": "integer",
"description": "Nombre total d'images trouv\u00e9es"
},
"testedUrl": {
"type": "string",
"format": "uri",
"description": "URL qui a \u00e9t\u00e9 test\u00e9e"
},
"scrapingType": {
"type": "string",
"description": "Type de scraping utilis\u00e9"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Type d'erreur (selector_error, url_error, general_error)"
},
"field": {
"type": "string",
"description": "Champ concern\u00e9 par l'erreur"
},
"message": {
"type": "string",
"description": "Message d'erreur d\u00e9taill\u00e9"
},
"suggestion": {
"type": "string",
"description": "Suggestion pour corriger l'erreur"
}
}
},
"description": "Liste des erreurs d\u00e9taill\u00e9es (vide en cas de succ\u00e8s)"
}
}
},
"examples": {
"succes": {
"summary": "Test r\u00e9ussi",
"value": {
"success": true,
"imageUrls": [
"https://mangasite.example.com/images/chapter1/page1.jpg",
"https://mangasite.example.com/images/chapter1/page2.jpg",
"https://mangasite.example.com/images/chapter1/page3.jpg"
],
"totalImages": 3,
"testedUrl": "https://mangasite.example.com/manga/one-piece/chapter/1",
"scrapingType": "html",
"errors": []
}
},
"echec_selecteur": {
"summary": "\u00c9chec - S\u00e9lecteur invalide",
"value": {
"success": false,
"imageUrls": [],
"totalImages": 0,
"testedUrl": "https://mangasite.example.com/manga/one-piece/chapter/1",
"scrapingType": "html",
"errors": [
{
"type": "selector_error",
"field": "imageSelector",
"message": "Le s\u00e9lecteur d'image '.invalid-selector' ne trouve aucun \u00e9l\u00e9ment sur la page",
"suggestion": "V\u00e9rifiez que le s\u00e9lecteur CSS est correct et qu'il correspond aux \u00e9l\u00e9ments d'image sur la page"
}
]
}
},
"echec_url": {
"summary": "\u00c9chec - URL inaccessible",
"value": {
"success": false,
"imageUrls": [],
"totalImages": 0,
"testedUrl": "https://invalid-site.example.com/chapter/1",
"scrapingType": "html",
"errors": [
{
"type": "url_error",
"field": "testUrl",
"message": "Impossible d'acc\u00e9der \u00e0 l'URL de test: https://invalid-site.example.com/chapter/1",
"suggestion": "V\u00e9rifiez que l'URL est correcte et accessible, et que le chapitre existe"
}
]
}
}
}
}
}
},
"422": {
"description": "Erreur de validation des donn\u00e9es d'entr\u00e9e",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"type": {
"type": "string",
"example": "https://tools.ietf.org/html/rfc2616#section-10"
},
"title": {
"type": "string",
"example": "An error occurred"
},
"detail": {
"type": "string",
"example": "baseUrl: L'URL de base doit \u00eatre une URL valide"
},
"violations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"propertyPath": {
"type": "string",
"description": "Champ contenant l'erreur"
},
"message": {
"type": "string",
"description": "Message d'erreur de validation"
}
}
}
}
}
},
"example": {
"type": "https://symfony.com/errors/validation",
"title": "Validation Failed",
"detail": "baseUrl: L'URL de base doit \u00eatre une URL valide",
"violations": [
{
"propertyPath": "baseUrl",
"message": "L'URL de base doit \u00eatre une URL valide"
}
]
}
}
}
},
"400": {
"description": "Invalid input"
}
},
"summary": "Tester une configuration de scraper",
"description": "Teste une configuration de scraper en temps r\u00e9el sans l'enregistrer dans la base de donn\u00e9es. Cette API permet de valider les param\u00e8tres de scraping et de voir imm\u00e9diatement les URLs d'images qui seraient extraites.",
"parameters": [],
"requestBody": {
"description": "Configuration du scraper \u00e0 tester",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"baseUrl": {
"type": "string",
"format": "uri",
"description": "URL de base du site web source",
"example": "https://mangasite.example.com"
},
"chapterUrlFormat": {
"type": "string",
"description": "Format d'URL pour acc\u00e9der aux chapitres avec placeholders {slug} et {chapter}",
"example": "https://mangasite.example.com/manga/{slug}/chapter/{chapter}"
},
"scrapingType": {
"type": "string",
"enum": [
"html",
"javascript"
],
"description": "Type de scraping \u00e0 utiliser (html pour les sites statiques, javascript pour les sites dynamiques)",
"example": "html"
},
"testUrl": {
"type": "string",
"format": "uri",
"description": "URL compl\u00e8te d'un chapitre existant \u00e0 utiliser pour le test",
"example": "https://mangasite.example.com/manga/one-piece/chapter/1"
},
"mangaSlug": {
"type": "string",
"description": "Slug du manga utilis\u00e9 dans les URLs (sera utilis\u00e9 pour construire les URLs futures)",
"example": "one-piece"
},
"chapterNumber": {
"type": "number",
"minimum": 0,
"description": "Num\u00e9ro du chapitre \u00e0 tester",
"example": 1
},
"imageSelector": {
"type": "string",
"nullable": true,
"description": "S\u00e9lecteur CSS pour identifier les images dans la page",
"example": "img.manga-page, .chapter-image img"
},
"nextPageSelector": {
"type": "string",
"nullable": true,
"description": "S\u00e9lecteur CSS pour le lien vers la page suivante (pour les lecteurs horizontaux)",
"example": "a.next-page, .navigation .next"
},
"chapterSelector": {
"type": "string",
"nullable": true,
"description": "S\u00e9lecteur CSS pour identifier la zone contenant le chapitre",
"example": ".chapter-content, #manga-reader"
}
},
"required": [
"baseUrl",
"chapterUrlFormat",
"scrapingType",
"testUrl",
"mangaSlug",
"chapterNumber"
]
},
"examples": {
"lecteur_vertical": {
"summary": "Configuration pour un lecteur vertical",
"description": "Exemple de configuration pour un site avec toutes les images sur une seule page",
"value": {
"baseUrl": "https://mangasite.example.com",
"chapterUrlFormat": "https://mangasite.example.com/manga/{slug}/chapter/{chapter}",
"scrapingType": "html",
"testUrl": "https://mangasite.example.com/manga/one-piece/chapter/1",
"mangaSlug": "one-piece",
"chapterNumber": 1,
"imageSelector": "img.manga-page",
"nextPageSelector": null,
"chapterSelector": ".chapter-content"
}
},
"lecteur_horizontal": {
"summary": "Configuration pour un lecteur horizontal",
"description": "Exemple de configuration pour un site avec navigation page par page",
"value": {
"baseUrl": "https://mangasite.example.com",
"chapterUrlFormat": "https://mangasite.example.com/read/{slug}/{chapter}/1",
"scrapingType": "html",
"testUrl": "https://mangasite.example.com/read/one-piece/1/1",
"mangaSlug": "one-piece",
"chapterNumber": 1,
"imageSelector": "#manga-image",
"nextPageSelector": "a.next-page",
"chapterSelector": ".reader-container"
}
}
}
}
},
"required": false
},
"deprecated": false
},
"parameters": []
}
},
"components": {
"schemas": {
"Cbz": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"id": {
"type": "string"
}
}
},
"Cbz.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"id": {
"type": "string"
}
}
},
"Cbz.jsonld": {
"type": "object",
"description": "",
"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"
},
"id": {
"type": "string"
}
}
},
"ChapterListItem": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"id": {
"type": "string"
},
"number": {
"type": "number"
},
"title": {
"type": [
"string",
"null"
]
},
"volume": {
"type": [
"integer",
"null"
]
},
"isVisible": {
"type": "boolean"
},
"isAvailable": {
"type": "boolean"
},
"createdAt": {
"type": "string"
}
}
},
"ChapterListItem.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"id": {
"type": "string"
},
"number": {
"type": "number"
},
"title": {
"type": [
"string",
"null"
]
},
"volume": {
"type": [
"integer",
"null"
]
},
"isVisible": {
"type": "boolean"
},
"isAvailable": {
"type": "boolean"
},
"createdAt": {
"type": "string"
}
}
},
"ChapterListItem.jsonld": {
"type": "object",
"description": "",
"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"
},
"id": {
"type": "string"
},
"number": {
"type": "number"
},
"title": {
"type": [
"string",
"null"
]
},
"volume": {
"type": [
"integer",
"null"
]
},
"isVisible": {
"type": "boolean"
},
"isAvailable": {
"type": "boolean"
},
"createdAt": {
"type": "string"
}
}
},
"Chapters": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"id": {
"type": "string"
}
}
},
"Chapters.ChapterCollection": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChapterListItem"
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"hasNextPage": {
"type": "boolean"
},
"hasPreviousPage": {
"type": "boolean"
}
}
},
"Chapters.ChapterCollection.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChapterListItem.jsonhal"
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"hasNextPage": {
"type": "boolean"
},
"hasPreviousPage": {
"type": "boolean"
}
}
},
"Chapters.ChapterCollection.jsonld": {
"type": "object",
"description": "",
"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"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChapterListItem.jsonld"
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"hasNextPage": {
"type": "boolean"
},
"hasPreviousPage": {
"type": "boolean"
}
}
},
"Chapters.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"id": {
"type": "string"
}
}
},
"Chapters.jsonld": {
"type": "object",
"description": "",
"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"
},
"id": {
"type": "string"
}
}
},
"ContentSource": {
"type": "object",
"description": "Exporte toutes les sources de contenu au format JSON",
"deprecated": false
},
"ContentSource.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"
}
}
}
}
}
}
},
"ContentSource.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"
}
}
},
"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"
},
"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"
},
"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"
},
"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": "",
"deprecated": false,
"required": [
"title",
"slug",
"description",
"author",
"publicationYear",
"genres",
"status"
],
"properties": {
"title": {
"minLength": 1,
"maxLength": 255,
"type": "string"
},
"slug": {
"pattern": "^([a-z0-9-]+)$",
"type": "string"
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"minimum": 1900,
"maximum": 2100,
"type": "integer"
},
"genres": {
"minItems": 1,
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"enum": [
"ongoing",
"completed",
"hiatus"
],
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
},
"imageUrl": {
"format": "uri",
"externalDocs": {
"url": "https://schema.org/url"
},
"type": [
"string",
"null"
]
},
"rating": {
"minimum": 0,
"maximum": 5,
"type": [
"number",
"null"
]
}
}
},
"Manga.MangaCollection": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaListItem"
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"hasNextPage": {
"type": "boolean"
},
"hasPreviousPage": {
"type": "boolean"
}
}
},
"Manga.MangaCollection.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaListItem.jsonhal"
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"hasNextPage": {
"type": "boolean"
},
"hasPreviousPage": {
"type": "boolean"
}
}
},
"Manga.MangaCollection.jsonld": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"@id": {
"readOnly": true,
"type": "string"
},
"@type": {
"readOnly": true,
"type": "string"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaListItem.jsonld"
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"hasNextPage": {
"type": "boolean"
},
"hasPreviousPage": {
"type": "boolean"
}
}
},
"Manga.MangaDetail": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"alternativeSlugs": {
"type": "array",
"items": {
"type": "string"
}
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"rating": {
"type": [
"number",
"null"
]
}
}
},
"Manga.MangaDetail.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"alternativeSlugs": {
"type": "array",
"items": {
"type": "string"
}
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"rating": {
"type": [
"number",
"null"
]
}
}
},
"Manga.MangaDetail.jsonld": {
"type": "object",
"description": "",
"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"
},
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"alternativeSlugs": {
"type": "array",
"items": {
"type": "string"
}
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"rating": {
"type": [
"number",
"null"
]
}
}
},
"Manga.MangaSearchCollection": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaSearchItem"
}
}
}
},
"Manga.MangaSearchCollection.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaSearchItem.jsonhal"
}
}
}
},
"Manga.MangaSearchCollection.jsonld": {
"type": "object",
"description": "",
"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"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaSearchItem.jsonld"
}
}
}
},
"Manga.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"title",
"slug",
"description",
"author",
"publicationYear",
"genres",
"status"
],
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"title": {
"minLength": 1,
"maxLength": 255,
"type": "string"
},
"slug": {
"pattern": "^([a-z0-9-]+)$",
"type": "string"
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"minimum": 1900,
"maximum": 2100,
"type": "integer"
},
"genres": {
"minItems": 1,
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"enum": [
"ongoing",
"completed",
"hiatus"
],
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
},
"imageUrl": {
"format": "uri",
"externalDocs": {
"url": "https://schema.org/url"
},
"type": [
"string",
"null"
]
},
"rating": {
"minimum": 0,
"maximum": 5,
"type": [
"number",
"null"
]
}
}
},
"Manga.jsonld": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"title",
"slug",
"description",
"author",
"publicationYear",
"genres",
"status"
],
"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"
},
"title": {
"minLength": 1,
"maxLength": 255,
"type": "string"
},
"slug": {
"pattern": "^([a-z0-9-]+)$",
"type": "string"
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"minimum": 1900,
"maximum": 2100,
"type": "integer"
},
"genres": {
"minItems": 1,
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"enum": [
"ongoing",
"completed",
"hiatus"
],
"type": "string"
},
"externalId": {
"type": [
"string",
"null"
]
},
"imageUrl": {
"format": "uri",
"externalDocs": {
"url": "https://schema.org/url"
},
"type": [
"string",
"null"
]
},
"rating": {
"minimum": 0,
"maximum": 5,
"type": [
"number",
"null"
]
}
}
},
"MangaListItem": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"slug": {
"type": "string"
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"rating": {
"type": [
"number",
"null"
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"MangaListItem.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"slug": {
"type": "string"
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"rating": {
"type": [
"number",
"null"
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"MangaListItem.jsonld": {
"type": "object",
"description": "",
"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"
},
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"slug": {
"type": "string"
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"rating": {
"type": [
"number",
"null"
]
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"MangaSearchItem": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"externalId": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"rating": {
"type": [
"number",
"null"
]
}
}
},
"MangaSearchItem.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"externalId": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"rating": {
"type": [
"number",
"null"
]
}
}
},
"MangaSearchItem.jsonld": {
"type": "object",
"description": "",
"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"
},
"externalId": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"author": {
"type": "string"
},
"publicationYear": {
"type": "integer"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string"
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"rating": {
"type": [
"number",
"null"
]
}
}
},
"Mangadex": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"externalId"
],
"properties": {
"externalId": {
"type": "string"
}
}
},
"Mangadex.MangaSearchCollection": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaSearchItem"
}
}
}
},
"Mangadex.MangaSearchCollection.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaSearchItem.jsonhal"
}
}
}
},
"Mangadex.MangaSearchCollection.jsonld": {
"type": "object",
"description": "",
"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"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MangaSearchItem.jsonld"
}
}
}
},
"Mangadex.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"externalId"
],
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"externalId": {
"type": "string"
}
}
},
"Mangadex.jsonld": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"externalId"
],
"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"
},
"externalId": {
"type": "string"
}
}
},
"Reader": {
"type": "object",
"description": "",
"deprecated": false
},
"Reader.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
}
}
},
"Reader.jsonld": {
"type": "object",
"description": "",
"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"
}
}
},
"Scraping": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"chapterId"
],
"properties": {
"chapterId": {
"description": "ID du chapitre \u00e0 scraper",
"type": "string"
}
}
},
"Scraping.MangaPreferredSourcesDetail": {
"type": "object",
"description": "R\u00e9cup\u00e9rer les sources pr\u00e9f\u00e9r\u00e9es d'un manga ou toutes les sources si aucune pr\u00e9f\u00e9rence",
"deprecated": false,
"properties": {
"mangaId": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"hasPreferredSources": {
"type": "boolean"
}
}
},
"Scraping.MangaPreferredSourcesDetail.jsonhal": {
"type": "object",
"description": "R\u00e9cup\u00e9rer les sources pr\u00e9f\u00e9r\u00e9es d'un manga ou toutes les sources si aucune pr\u00e9f\u00e9rence",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"mangaId": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"hasPreferredSources": {
"type": "boolean"
}
}
},
"Scraping.MangaPreferredSourcesDetail.jsonld": {
"type": "object",
"description": "R\u00e9cup\u00e9rer les sources pr\u00e9f\u00e9r\u00e9es d'un manga ou toutes les sources si aucune pr\u00e9f\u00e9rence",
"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"
},
"mangaId": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"hasPreferredSources": {
"type": "boolean"
}
}
},
"Scraping.TestScraperConfigurationResource": {
"type": "object",
"description": "Teste une configuration de scraper sans l'enregistrer",
"deprecated": false,
"properties": {
"success": {
"type": "boolean"
},
"imageUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
"totalImages": {
"type": "integer",
"minimum": 0
},
"testedUrl": {
"type": "string",
"format": "uri"
},
"scrapingType": {
"type": "string",
"enum": [
"html",
"javascript"
]
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"selector_error",
"url_error",
"general_error"
],
"description": "Type d'erreur rencontr\u00e9e"
},
"field": {
"type": "string",
"description": "Champ de configuration concern\u00e9 par l'erreur"
},
"message": {
"type": "string",
"description": "Message d'erreur d\u00e9taill\u00e9"
},
"suggestion": {
"type": "string",
"description": "Suggestion pour corriger l'erreur"
}
},
"required": [
"type",
"field",
"message",
"suggestion"
]
}
}
}
},
"Scraping.TestScraperConfigurationResource.jsonhal": {
"type": "object",
"description": "Teste une configuration de scraper sans l'enregistrer",
"deprecated": false,
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"success": {
"type": "boolean"
},
"imageUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
"totalImages": {
"type": "integer",
"minimum": 0
},
"testedUrl": {
"type": "string",
"format": "uri"
},
"scrapingType": {
"type": "string",
"enum": [
"html",
"javascript"
]
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"selector_error",
"url_error",
"general_error"
],
"description": "Type d'erreur rencontr\u00e9e"
},
"field": {
"type": "string",
"description": "Champ de configuration concern\u00e9 par l'erreur"
},
"message": {
"type": "string",
"description": "Message d'erreur d\u00e9taill\u00e9"
},
"suggestion": {
"type": "string",
"description": "Suggestion pour corriger l'erreur"
}
},
"required": [
"type",
"field",
"message",
"suggestion"
]
}
}
}
},
"Scraping.TestScraperConfigurationResource.jsonld": {
"type": "object",
"description": "Teste une configuration de scraper sans l'enregistrer",
"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"
},
"success": {
"type": "boolean"
},
"imageUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
"totalImages": {
"type": "integer",
"minimum": 0
},
"testedUrl": {
"type": "string",
"format": "uri"
},
"scrapingType": {
"type": "string",
"enum": [
"html",
"javascript"
]
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"selector_error",
"url_error",
"general_error"
],
"description": "Type d'erreur rencontr\u00e9e"
},
"field": {
"type": "string",
"description": "Champ de configuration concern\u00e9 par l'erreur"
},
"message": {
"type": "string",
"description": "Message d'erreur d\u00e9taill\u00e9"
},
"suggestion": {
"type": "string",
"description": "Suggestion pour corriger l'erreur"
}
},
"required": [
"type",
"field",
"message",
"suggestion"
]
}
}
}
},
"Scraping.jsonhal": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"chapterId"
],
"properties": {
"_links": {
"type": "object",
"properties": {
"self": {
"type": "object",
"properties": {
"href": {
"type": "string",
"format": "iri-reference"
}
}
}
}
},
"chapterId": {
"description": "ID du chapitre \u00e0 scraper",
"type": "string"
}
}
},
"Scraping.jsonld": {
"type": "object",
"description": "",
"deprecated": false,
"required": [
"chapterId"
],
"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"
},
"chapterId": {
"description": "ID du chapitre \u00e0 scraper",
"type": "string"
}
}
}
},
"responses": {},
"parameters": {},
"examples": {},
"requestBodies": {},
"headers": {},
"securitySchemes": {
"access_token": {
"type": "http",
"description": "",
"scheme": "bearer"
}
}
},
"security": [
{
"access_token": []
}
],
"tags": []
}