feat: implement dynamic create DTO for Language

This commit is contained in:
yassinedorbozgithub 2025-01-10 17:47:13 +01:00
parent 43c56ab2dd
commit b6102b3843
5 changed files with 31 additions and 7 deletions

View File

@ -7,9 +7,11 @@
*/
import { PartialType } from '@nestjs/mapped-types';
import { ApiProperty } from '@nestjs/swagger';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsBoolean, IsNotEmpty, IsOptional, IsString } from 'class-validator';
import { DtoConfig } from '@/utils/types/dto.types';
export class LanguageCreateDto {
@ApiProperty({ description: 'Language Title', type: String })
@IsNotEmpty()
@ -25,10 +27,14 @@ export class LanguageCreateDto {
@IsBoolean()
isRTL: boolean;
@ApiProperty({ description: 'Is Default Language ?', type: Boolean })
@ApiPropertyOptional({ description: 'Is Default Language ?', type: Boolean })
@IsOptional()
@IsBoolean()
isDefault?: boolean;
}
export class LanguageUpdateDto extends PartialType(LanguageCreateDto) {}
export type LanguageDTOMapActions = DtoConfig<{
create: LanguageCreateDto;
}>;

View File

@ -14,10 +14,16 @@ import { Document, Model, Query } from 'mongoose';
import { BaseRepository, DeleteResult } from '@/utils/generics/base-repository';
import { TFilterQuery } from '@/utils/types/filter.types';
import { LanguageDTOMapActions } from '../dto/language.dto';
import { Language } from '../schemas/language.schema';
@Injectable()
export class LanguageRepository extends BaseRepository<Language> {
export class LanguageRepository extends BaseRepository<
Language,
never,
never,
LanguageDTOMapActions
> {
constructor(
readonly eventEmitter: EventEmitter2,
@InjectModel(Language.name) readonly model: Model<Language>,

View File

@ -32,13 +32,13 @@ export class Language extends BaseSchema {
type: Boolean,
default: false,
})
isDefault?: boolean;
isDefault: boolean;
@Prop({
type: Boolean,
default: false,
})
isRTL?: boolean;
isRTL: boolean;
}
export const LanguageModel: ModelDefinition = LifecycleHookManager.attach({

View File

@ -10,11 +10,17 @@ import { Injectable } from '@nestjs/common';
import { BaseSeeder } from '@/utils/generics/base-seeder';
import { LanguageDTOMapActions } from '../dto/language.dto';
import { LanguageRepository } from '../repositories/language.repository';
import { Language } from '../schemas/language.schema';
@Injectable()
export class LanguageSeeder extends BaseSeeder<Language> {
export class LanguageSeeder extends BaseSeeder<
Language,
never,
never,
LanguageDTOMapActions
> {
constructor(private readonly languageRepository: LanguageRepository) {
super(languageRepository);
}

View File

@ -21,11 +21,17 @@ import {
import { Cacheable } from '@/utils/decorators/cacheable.decorator';
import { BaseService } from '@/utils/generics/base-service';
import { LanguageDTOMapActions } from '../dto/language.dto';
import { LanguageRepository } from '../repositories/language.repository';
import { Language } from '../schemas/language.schema';
@Injectable()
export class LanguageService extends BaseService<Language> {
export class LanguageService extends BaseService<
Language,
never,
never,
LanguageDTOMapActions
> {
constructor(
readonly repository: LanguageRepository,
@Inject(CACHE_MANAGER) private readonly cacheManager: Cache,