97 lines
2.2 KiB
TypeScript
97 lines
2.2 KiB
TypeScript
import { Type } from 'class-transformer';
|
|
import { IsArray, IsBoolean, IsEnum, IsNotEmpty, IsNumber, IsOptional, IsString, ValidateNested } from 'class-validator';
|
|
import { ApiProperty } from '@nestjs/swagger';
|
|
|
|
export enum TipoPreguntaEnum {
|
|
CERRADA = 'Cerrada',
|
|
ABIERTA = 'Abierta',
|
|
MULTIPLE = 'Multiple'
|
|
}
|
|
|
|
export class OpcionDto {
|
|
@ApiProperty({
|
|
description: 'Valor de la opción',
|
|
example: 'Sí'
|
|
})
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
valor: string;
|
|
}
|
|
|
|
export class CreatePreguntaDto {
|
|
@ApiProperty({
|
|
description: 'Título o texto de la pregunta',
|
|
example: '¿Eres parte de la comunidad de la FES Acatlán?'
|
|
})
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
titulo: string;
|
|
|
|
@ApiProperty({
|
|
description: 'Indica si la pregunta es obligatoria',
|
|
example: true,
|
|
default: false
|
|
})
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
obligatoria?: boolean;
|
|
|
|
@ApiProperty({
|
|
description: 'Tipo de pregunta',
|
|
enum: Object.values(TipoPreguntaEnum),
|
|
enumName: 'TipoPreguntaEnum',
|
|
example: TipoPreguntaEnum.CERRADA,
|
|
examples: {
|
|
'cerrada': {
|
|
summary: 'Pregunta de opción única',
|
|
value: TipoPreguntaEnum.CERRADA
|
|
},
|
|
'abierta': {
|
|
summary: 'Pregunta de texto libre',
|
|
value: TipoPreguntaEnum.ABIERTA
|
|
},
|
|
'multiple': {
|
|
summary: 'Pregunta de selección múltiple',
|
|
value: TipoPreguntaEnum.MULTIPLE
|
|
}
|
|
}
|
|
})
|
|
@IsNotEmpty()
|
|
@IsEnum(TipoPreguntaEnum, {
|
|
message: 'El tipo debe ser uno de los siguientes valores: Cerrada, Abierta, Multiple'
|
|
})
|
|
tipo: string;
|
|
|
|
@ApiProperty({
|
|
description: 'Contador de opciones (se calcula automáticamente)',
|
|
required: false
|
|
})
|
|
@IsOptional()
|
|
@IsNumber()
|
|
contador_opcion?: number;
|
|
|
|
@ApiProperty({
|
|
description: 'ID de la opción de la que depende esta pregunta (para preguntas condicionadas)',
|
|
required: false,
|
|
example: null
|
|
})
|
|
@IsOptional()
|
|
@IsNumber()
|
|
id_opcion_dependiente?: number;
|
|
|
|
@ApiProperty({
|
|
description: 'Lista de opciones para preguntas de tipo Cerrada o Multiple',
|
|
type: [OpcionDto],
|
|
required: false,
|
|
examples: [
|
|
{ valor: 'Sí' },
|
|
{ valor: 'No' }
|
|
]
|
|
})
|
|
@IsOptional()
|
|
@IsArray()
|
|
@ValidateNested({ each: true })
|
|
@Type(() => OpcionDto)
|
|
opciones?: OpcionDto[];
|
|
}
|