NestJS 11 module, controller, service, and DTO patterns for backend-app.
controller, service, dto, and schema concerns strictly.class-validator. Document with @ApiProperty.// Module
@Module({
imports: [MongooseModule.forFeature([{ name: Resource.name, schema: ResourceSchema }])],
controllers: [ResourceController],
providers: [ResourceService],
})
export class ResourceModule {}
// Controller
@Get(':id')
@ApiResponse({ status: 200, type: ResourceResponseDto })
async findOne(@Param('id') id: string): Promise<ResourceResponseDto> {
return this.resourceService.findOne(id);
}
// Service
async findOne(id: string): Promise<ResourceResponseDto> {
const doc = await this.model.findById(id).lean().exec();
if (!doc) throw new NotFoundException(`Resource ${id} not found`);
return plainToInstance(ResourceResponseDto, doc);
}
Module impact → Endpoint contract → DTO/validation changes → Service + test plan