Files
formularios_api/src/administrador/docs/administrador.documentation.ts
T

347 lines
10 KiB
TypeScript
Raw Normal View History

2025-06-13 22:41:20 -06:00
import {
ApiBearerAuth,
ApiBody,
ApiOperation,
ApiParam,
ApiResponse,
ApiTags,
} from '@nestjs/swagger';
import { applyDecorators } from '@nestjs/common';
export class AdministradorApiDocumentation {
// Decorador para toda la clase del controlador
static ApiController = applyDecorators(ApiTags('Administrador'));
// Documentación para crear un administrador
static ApiCreate = applyDecorators(
ApiOperation({
summary: 'Registrar un nuevo administrador',
2025-06-13 22:41:20 -06:00
description:
'Crea un nuevo administrador con correo, contraseña y tipo de administrador',
}),
ApiBody({
description: 'Datos del administrador a registrar',
schema: {
type: 'object',
required: ['correo', 'password', 'id_tipo_user'],
properties: {
nombre_usuario: {
type: 'string',
example: 'mike',
description: 'Nombre de usuario del administrador',
},
2025-06-13 22:41:20 -06:00
correo: {
type: 'string',
format: 'email',
example: 'admin@ejemplo.com',
2025-06-13 22:41:20 -06:00
description: 'Correo electrónico del administrador',
},
2025-06-13 22:41:20 -06:00
password: {
type: 'string',
format: 'password',
2025-06-13 22:41:20 -06:00
example: 'password',
description: 'Contraseña del administrador (mínimo 6 caracteres)',
},
2025-06-13 22:41:20 -06:00
id_tipo_user: {
type: 'integer',
example: 1,
2025-06-13 22:41:20 -06:00
description: 'ID del tipo de usuario administrador',
},
},
},
}),
2025-06-13 22:41:20 -06:00
ApiResponse({
status: 201,
description: 'Administrador registrado exitosamente',
schema: {
type: 'object',
properties: {
id_admnistrador: { type: 'number', example: 1 },
correo: { type: 'string', example: 'admin@ejemplo.com' },
2025-06-13 22:41:20 -06:00
id_tipo_user: { type: 'number', example: 1 },
},
},
}),
ApiResponse({
status: 400,
description: 'Datos del administrador inválidos',
}),
2025-06-13 22:41:20 -06:00
ApiResponse({ status: 409, description: 'El correo ya está registrado' }),
);
// Documentación para iniciar sesión
static ApiLogin = applyDecorators(
ApiOperation({
summary: 'Iniciar sesión como administrador',
2025-06-13 22:41:20 -06:00
description:
'Autentica un administrador con correo y contraseña, y devuelve un token JWT',
}),
ApiBody({
description: 'Credenciales de inicio de sesión',
schema: {
type: 'object',
required: ['correo', 'password'],
properties: {
2025-06-13 22:41:20 -06:00
correo: {
type: 'string',
format: 'email',
example: 'admin@ejemplo.com',
2025-06-13 22:41:20 -06:00
description: 'Correo electrónico del administrador',
},
2025-06-13 22:41:20 -06:00
password: {
type: 'string',
format: 'password',
2025-06-13 22:41:20 -06:00
example: 'password',
description: 'Contraseña del administrador',
},
},
},
}),
2025-06-13 22:41:20 -06:00
ApiResponse({
status: 200,
description: 'Inicio de sesión exitoso',
schema: {
type: 'object',
properties: {
2025-06-13 22:41:20 -06:00
access_token: {
type: 'string',
example: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
2025-06-13 22:41:20 -06:00
description: 'Token JWT para autenticación',
},
2025-06-13 22:41:20 -06:00
id_administrador: {
type: 'number',
example: 1,
2025-06-13 22:41:20 -06:00
description: 'ID del administrador autenticado',
},
2025-06-13 22:41:20 -06:00
correo: {
type: 'string',
example: 'admin@ejemplo.com',
2025-06-13 22:41:20 -06:00
description: 'Correo del administrador autenticado',
},
2025-06-13 22:41:20 -06:00
tipo_user: {
type: 'number',
example: 1,
2025-06-13 22:41:20 -06:00
description: 'Tipo de usuario del administrador',
},
},
},
}),
2025-06-13 22:41:20 -06:00
ApiResponse({ status: 401, description: 'Credenciales inválidas' }),
);
// Documentación para obtener todos los administradores
static ApiGetAll = applyDecorators(
ApiOperation({
summary: 'Obtener todos los administradores',
2025-06-13 22:41:20 -06:00
description:
'Retorna una lista de todos los administradores registrados (requiere autenticación)',
}),
ApiResponse({
status: 200,
description: 'Lista de administradores obtenida correctamente',
schema: {
type: 'array',
items: {
type: 'object',
properties: {
id_admnistrador: { type: 'number', example: 1 },
correo: { type: 'string', example: 'admin@ejemplo.com' },
id_tipo_user: { type: 'number', example: 1 },
tipoUser: {
type: 'array',
items: {
type: 'object',
properties: {
id_tipo_user: { type: 'number', example: 1 },
2025-06-13 22:41:20 -06:00
tipo_user: {
type: 'string',
example: 'Administrador General',
},
},
},
},
},
},
},
}),
2025-06-13 22:41:20 -06:00
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para obtener un administrador por ID
static ApiGetOne = applyDecorators(
ApiOperation({
summary: 'Obtener un administrador por ID',
2025-06-13 22:41:20 -06:00
description:
'Retorna los datos de un administrador específico según su ID (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador',
type: 'number',
2025-06-13 22:41:20 -06:00
example: 1,
}),
ApiResponse({
status: 200,
description: 'Administrador obtenido correctamente',
schema: {
type: 'object',
properties: {
id_admnistrador: { type: 'number', example: 1 },
correo: { type: 'string', example: 'admin@ejemplo.com' },
id_tipo_user: { type: 'number', example: 1 },
tipoUser: {
type: 'array',
items: {
type: 'object',
properties: {
id_tipo_user: { type: 'number', example: 1 },
2025-06-13 22:41:20 -06:00
tipo_user: { type: 'string', example: 'Administrador General' },
},
},
},
},
},
}),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
2025-06-13 22:41:20 -06:00
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para actualizar un administrador
static ApiUpdate = applyDecorators(
ApiOperation({
summary: 'Actualizar datos de un administrador',
2025-06-13 22:41:20 -06:00
description:
'Actualiza la información de un administrador existente (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador a actualizar',
type: 'number',
2025-06-13 22:41:20 -06:00
example: 1,
}),
ApiBody({
description: 'Datos a actualizar del administrador',
schema: {
type: 'object',
properties: {
2025-06-13 22:41:20 -06:00
correo: {
type: 'string',
format: 'email',
example: 'nuevo_admin@ejemplo.com',
2025-06-13 22:41:20 -06:00
description: 'Nuevo correo electrónico del administrador',
},
2025-06-13 22:41:20 -06:00
password: {
type: 'string',
format: 'password',
example: 'NuevaPassword123',
2025-06-13 22:41:20 -06:00
description:
'Nueva contraseña del administrador (mínimo 6 caracteres)',
},
2025-06-13 22:41:20 -06:00
id_tipo_user: {
type: 'integer',
example: 2,
2025-06-13 22:41:20 -06:00
description: 'Nuevo tipo de usuario administrador',
},
},
},
}),
ApiResponse({
status: 200,
description: 'Administrador actualizado correctamente',
schema: {
type: 'object',
properties: {
id_admnistrador: { type: 'number', example: 1 },
correo: { type: 'string', example: 'nuevo_admin@ejemplo.com' },
2025-06-13 22:41:20 -06:00
id_tipo_user: { type: 'number', example: 2 },
},
},
}),
ApiResponse({
status: 400,
description: 'Datos de actualización inválidos',
}),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
2025-06-13 22:41:20 -06:00
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para cambiar contraseña
static ApiChangePassword = applyDecorators(
ApiOperation({
summary: 'Cambiar contraseña de un administrador',
2025-06-13 22:41:20 -06:00
description:
'Permite a un administrador cambiar su contraseña verificando primero la contraseña actual (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador',
type: 'number',
2025-06-13 22:41:20 -06:00
example: 1,
}),
ApiBody({
description: 'Datos para cambio de contraseña',
schema: {
type: 'object',
required: ['currentPassword', 'newPassword'],
properties: {
2025-06-13 22:41:20 -06:00
currentPassword: {
type: 'string',
format: 'password',
example: 'Password123',
2025-06-13 22:41:20 -06:00
description: 'Contraseña actual del administrador',
},
2025-06-13 22:41:20 -06:00
newPassword: {
type: 'string',
format: 'password',
example: 'NuevaPassword123',
2025-06-13 22:41:20 -06:00
description:
'Nueva contraseña del administrador (mínimo 6 caracteres)',
},
},
},
}),
ApiResponse({
status: 200,
description: 'Contraseña actualizada correctamente',
schema: {
type: 'object',
properties: {
2025-06-13 22:41:20 -06:00
message: {
type: 'string',
example: 'Contraseña actualizada correctamente',
},
},
},
}),
ApiResponse({ status: 400, description: 'Contraseña actual incorrecta' }),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
2025-06-13 22:41:20 -06:00
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para eliminar un administrador
static ApiRemove = applyDecorators(
ApiOperation({
summary: 'Eliminar un administrador',
2025-06-13 22:41:20 -06:00
description:
'Elimina permanentemente un administrador por su ID (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador a eliminar',
type: 'number',
2025-06-13 22:41:20 -06:00
example: 1,
}),
ApiResponse({
status: 200,
description: 'Administrador eliminado correctamente',
schema: {
type: 'object',
properties: {
2025-06-13 22:41:20 -06:00
affected: { type: 'number', example: 1 },
},
},
}),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
2025-06-13 22:41:20 -06:00
ApiResponse({ status: 401, description: 'No autorizado' }),
);
2025-06-13 22:41:20 -06:00
}