feat add questions module and admin routes
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import {
|
||||
IsBoolean,
|
||||
IsEnum,
|
||||
IsNotEmpty,
|
||||
IsOptional,
|
||||
IsPositive,
|
||||
IsString,
|
||||
Validate,
|
||||
} from 'class-validator';
|
||||
import { QuestionType } from '../enums/question-type.enum';
|
||||
import { MultiChoiceMetadataDTO } from './multi-choice-metadata.dto';
|
||||
import { NumericMetadataDTO } from './numeric-metadata.dto';
|
||||
import { QuestionMetadataValidator } from '../validators/question-metadata.validator';
|
||||
import { i18nValidationMessage as t } from 'nestjs-i18n';
|
||||
|
||||
export class CreateQuestionDTO {
|
||||
@IsPositive({
|
||||
message: t('validation.wrongField', {
|
||||
field: '$t(questions.fields.test)',
|
||||
}),
|
||||
})
|
||||
@IsNotEmpty({
|
||||
message: t('validation.requiredField', {
|
||||
field: '$t(questions.fields.test)',
|
||||
}),
|
||||
})
|
||||
test!: number;
|
||||
|
||||
@IsEnum(QuestionType)
|
||||
@IsOptional()
|
||||
type?: QuestionType;
|
||||
|
||||
@IsString()
|
||||
@IsNotEmpty({
|
||||
message: t('validation.requiredField', {
|
||||
field: '$t(questions.fields.content)',
|
||||
}),
|
||||
})
|
||||
content!: string;
|
||||
|
||||
@IsPositive({
|
||||
message: t('validation.wrongField', {
|
||||
field: '$t(questions.fields.order)',
|
||||
}),
|
||||
})
|
||||
@IsNotEmpty({
|
||||
message: t('validation.requiredField', {
|
||||
field: '$t(questions.fields.order)',
|
||||
}),
|
||||
})
|
||||
order!: number;
|
||||
|
||||
@IsBoolean()
|
||||
@IsOptional()
|
||||
required?: boolean;
|
||||
|
||||
@Validate(QuestionMetadataValidator)
|
||||
@IsOptional()
|
||||
metadata?: MultiChoiceMetadataDTO | NumericMetadataDTO;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
import { PartialType } from '@nestjs/swagger';
|
||||
import { QuestionType } from '../enums/question-type.enum';
|
||||
import { PaginationQueryDTO } from '@/common/dtos/pagination-query.dto';
|
||||
import {
|
||||
IsBoolean,
|
||||
IsEnum,
|
||||
IsNumber,
|
||||
IsOptional,
|
||||
IsString,
|
||||
} from 'class-validator';
|
||||
import { QuestionSortField } from '../enums/question-sort-field.enum';
|
||||
|
||||
export class FindQuestionsDTO extends PartialType(PaginationQueryDTO) {
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
id?: number;
|
||||
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
test?: number;
|
||||
|
||||
@IsEnum(QuestionType)
|
||||
@IsOptional()
|
||||
type?: QuestionType;
|
||||
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
content?: string;
|
||||
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
questionOrder?: number;
|
||||
|
||||
@IsBoolean()
|
||||
@IsOptional()
|
||||
required?: boolean;
|
||||
|
||||
@IsEnum(QuestionSortField)
|
||||
@IsOptional()
|
||||
sortBy?: QuestionSortField;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { IsBoolean, IsOptional } from 'class-validator';
|
||||
|
||||
export class MultiChoiceMetadataDTO {
|
||||
@IsBoolean()
|
||||
@IsOptional()
|
||||
allowOther?: boolean;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { IsNumber, IsOptional } from 'class-validator';
|
||||
|
||||
export class NumericMetadataDTO {
|
||||
@IsNumber()
|
||||
min!: number;
|
||||
|
||||
@IsNumber()
|
||||
max!: number;
|
||||
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
step?: number;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import {
|
||||
IsBoolean,
|
||||
IsEnum,
|
||||
IsOptional,
|
||||
IsPositive,
|
||||
IsString,
|
||||
} from 'class-validator';
|
||||
import { i18nValidationMessage as t } from 'nestjs-i18n';
|
||||
import { QuestionType } from '../enums/question-type.enum';
|
||||
import { MultiChoiceMetadataDTO } from './multi-choice-metadata.dto';
|
||||
import { NumericMetadataDTO } from './numeric-metadata.dto';
|
||||
|
||||
export class UpdateQuestionDTO {
|
||||
@IsPositive({
|
||||
message: t('validation.wrongField', {
|
||||
field: '$t(questions.fields.test)',
|
||||
}),
|
||||
})
|
||||
@IsOptional()
|
||||
test?: number;
|
||||
|
||||
@IsEnum(QuestionType)
|
||||
@IsOptional()
|
||||
type?: QuestionType;
|
||||
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
content?: string;
|
||||
|
||||
@IsPositive({
|
||||
message: t('validation.wrongField', {
|
||||
field: '$t(questions.fields.order)',
|
||||
}),
|
||||
})
|
||||
@IsOptional()
|
||||
order?: number;
|
||||
|
||||
@IsBoolean()
|
||||
@IsOptional()
|
||||
required?: boolean;
|
||||
|
||||
@IsOptional()
|
||||
metadata?: MultiChoiceMetadataDTO | NumericMetadataDTO;
|
||||
}
|
||||
Reference in New Issue
Block a user