185 lines
5.7 KiB
TypeScript
185 lines
5.7 KiB
TypeScript
import { ApiBody, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger';
|
|
import { applyDecorators } from '@nestjs/common';
|
|
|
|
export class SeccionApiDocumentation {
|
|
// Decoradores para toda la clase del controlador
|
|
static ApiController = ApiTags('Secciones');
|
|
|
|
// Documentación para crear una sección
|
|
static ApiCreate = applyDecorators(
|
|
ApiOperation({
|
|
summary: 'Crear una nueva sección',
|
|
description: 'Crea una nueva sección para un cuestionario'
|
|
}),
|
|
ApiBody({
|
|
description: 'Datos de la sección a crear',
|
|
schema: {
|
|
type: 'object',
|
|
required: ['titulo'],
|
|
properties: {
|
|
titulo: { type: 'string', example: 'Información Personal' },
|
|
descripcion: {
|
|
type: 'string',
|
|
example: 'Proporciona tus datos personales para poder contactarte'
|
|
},
|
|
contador_pregunta: { type: 'number', example: 0 },
|
|
preguntas: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'object',
|
|
properties: {
|
|
titulo: { type: 'string', example: '¿Eres parte de la comunidad?' },
|
|
obligatoria: { type: 'boolean', example: true },
|
|
tipo: { type: 'string', example: 'Multiple' },
|
|
opciones: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'object',
|
|
properties: {
|
|
valor: { type: 'string', example: 'Si' }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}),
|
|
ApiResponse({
|
|
status: 201,
|
|
description: 'Sección creada correctamente',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
id_seccion: { type: 'number', example: 1 },
|
|
titulo: { type: 'string', example: 'Información Personal' },
|
|
descripcion: { type: 'string' },
|
|
contador_pregunta: { type: 'number', example: 0 }
|
|
}
|
|
}
|
|
}),
|
|
ApiResponse({ status: 400, description: 'Datos de la sección inválidos' }),
|
|
ApiResponse({ status: 500, description: 'Error interno del servidor' })
|
|
);
|
|
|
|
// Documentación para obtener todas las secciones
|
|
static ApiGetAll = applyDecorators(
|
|
ApiOperation({
|
|
summary: 'Obtener todas las secciones',
|
|
description: 'Retorna una lista de todas las secciones registradas'
|
|
}),
|
|
ApiResponse({
|
|
status: 200,
|
|
description: 'Lista de secciones obtenida correctamente',
|
|
schema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'object',
|
|
properties: {
|
|
id_seccion: { type: 'number', example: 1 },
|
|
titulo: { type: 'string', example: 'Información Personal' },
|
|
descripcion: { type: 'string' },
|
|
contador_pregunta: { type: 'number', example: 0 }
|
|
}
|
|
}
|
|
}
|
|
}),
|
|
ApiResponse({ status: 500, description: 'Error interno del servidor' })
|
|
);
|
|
|
|
// Documentación para obtener una sección por ID
|
|
static ApiGetOne = applyDecorators(
|
|
ApiOperation({
|
|
summary: 'Obtener una sección por ID',
|
|
description: 'Retorna una sección específica por su ID'
|
|
}),
|
|
ApiParam({
|
|
name: 'id',
|
|
description: 'ID de la sección',
|
|
required: true,
|
|
type: 'number',
|
|
example: 1
|
|
}),
|
|
ApiResponse({
|
|
status: 200,
|
|
description: 'Sección obtenida correctamente',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
id_seccion: { type: 'number', example: 1 },
|
|
titulo: { type: 'string', example: 'Información Personal' },
|
|
descripcion: { type: 'string' },
|
|
contador_pregunta: { type: 'number', example: 0 }
|
|
}
|
|
}
|
|
}),
|
|
ApiResponse({ status: 404, description: 'Sección no encontrada' }),
|
|
ApiResponse({ status: 500, description: 'Error interno del servidor' })
|
|
);
|
|
|
|
// Documentación para actualizar una sección
|
|
static ApiUpdate = applyDecorators(
|
|
ApiOperation({
|
|
summary: 'Actualizar una sección',
|
|
description: 'Actualiza los datos de una sección existente'
|
|
}),
|
|
ApiParam({
|
|
name: 'id',
|
|
description: 'ID de la sección a actualizar',
|
|
required: true,
|
|
type: 'number',
|
|
example: 1
|
|
}),
|
|
ApiBody({
|
|
description: 'Datos a actualizar de la sección',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
titulo: { type: 'string', example: 'Título actualizado' },
|
|
descripcion: { type: 'string', example: 'Descripción actualizada' }
|
|
}
|
|
}
|
|
}),
|
|
ApiResponse({
|
|
status: 200,
|
|
description: 'Sección actualizada correctamente',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
affected: { type: 'number', example: 1 }
|
|
}
|
|
}
|
|
}),
|
|
ApiResponse({ status: 400, description: 'Datos de actualización inválidos' }),
|
|
ApiResponse({ status: 404, description: 'Sección no encontrada' }),
|
|
ApiResponse({ status: 500, description: 'Error interno del servidor' })
|
|
);
|
|
|
|
// Documentación para eliminar una sección
|
|
static ApiRemove = applyDecorators(
|
|
ApiOperation({
|
|
summary: 'Eliminar una sección',
|
|
description: 'Elimina permanentemente una sección por su ID'
|
|
}),
|
|
ApiParam({
|
|
name: 'id',
|
|
description: 'ID de la sección a eliminar',
|
|
required: true,
|
|
type: 'number',
|
|
example: 1
|
|
}),
|
|
ApiResponse({
|
|
status: 200,
|
|
description: 'Sección eliminada correctamente',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
affected: { type: 'number', example: 1 }
|
|
}
|
|
}
|
|
}),
|
|
ApiResponse({ status: 404, description: 'Sección no encontrada' }),
|
|
ApiResponse({ status: 500, description: 'Error interno del servidor' })
|
|
);
|
|
} |