Template
feat : add concept module
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
HttpException,
|
||||
HttpStatus,
|
||||
Param,
|
||||
ParseIntPipe,
|
||||
Post,
|
||||
Put,
|
||||
Sse,
|
||||
UseGuards,
|
||||
} from '@nestjs/common';
|
||||
|
||||
import { ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { AuthGuard } from 'src/users/guards/auth.guard';
|
||||
|
||||
import { fromEvent, map, Observable } from 'rxjs';
|
||||
import { EventEmitter2 } from '@nestjs/event-emitter';
|
||||
|
||||
import { ConceptService } from './concept.service';
|
||||
import { Concept } from './entities/concept.entity';
|
||||
import { ConceptPipe } from './concept.pipe';
|
||||
import { ConceptRecieveDTO } from './dto/conceptrecieve.dto';
|
||||
import { ConceptResponseDTO } from 'events/dto/conceptresponse.dto';
|
||||
|
||||
@ApiTags('concepts')
|
||||
@Controller('concepts')
|
||||
export class ConceptController {
|
||||
constructor(
|
||||
private readonly conceptService: ConceptService,
|
||||
private eventEmitter: EventEmitter2,
|
||||
) {}
|
||||
|
||||
@Sse('/subscribe')
|
||||
subscribe(): Observable<{ data: string }> {
|
||||
return fromEvent(this.eventEmitter, this.conceptService.sse_prefix).pipe(
|
||||
map((payload) => {
|
||||
return {
|
||||
data: JSON.stringify(payload),
|
||||
};
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
@ApiOperation({ summary: 'Delete a concept' })
|
||||
@UseGuards(AuthGuard)
|
||||
async delete(@Param('id') id: number) {
|
||||
const concept = await this.conceptService.getById(id);
|
||||
if (!concept) {
|
||||
throw new HttpException('Concept not found', HttpStatus.NOT_FOUND);
|
||||
}
|
||||
await this.conceptService.delete(concept);
|
||||
}
|
||||
|
||||
@Post('/')
|
||||
@ApiOperation({ summary: 'Submit a concept' })
|
||||
@ApiBody({ type: ConceptRecieveDTO })
|
||||
@UseGuards(AuthGuard)
|
||||
async create(@Body('value') value: string) {
|
||||
const concept = await this.conceptService.create(value, 'placeholder.jpg');
|
||||
return new ConceptResponseDTO(concept);
|
||||
}
|
||||
|
||||
@Get('/')
|
||||
@ApiOperation({ summary: 'List enabled concept' })
|
||||
async read() {
|
||||
return (await this.conceptService.listActive()).map(
|
||||
(w) => new ConceptResponseDTO(w),
|
||||
);
|
||||
}
|
||||
|
||||
@Get('/all')
|
||||
@ApiOperation({ summary: 'List all concepts' })
|
||||
async readAll() {
|
||||
return (await this.conceptService.list()).map(
|
||||
(w) => new ConceptResponseDTO(w),
|
||||
);
|
||||
}
|
||||
|
||||
@Put(':id/enable')
|
||||
@ApiOperation({ summary: 'Enable a concept' })
|
||||
@UseGuards(AuthGuard)
|
||||
async enable(
|
||||
@Param('id', ParseIntPipe) _id: string,
|
||||
@Param('id', ConceptPipe) concept: Concept,
|
||||
) {
|
||||
await this.conceptService.enable(concept);
|
||||
return new ConceptResponseDTO(concept);
|
||||
}
|
||||
|
||||
@Put(':id/disable')
|
||||
@ApiOperation({ summary: 'Disable a word' })
|
||||
@UseGuards(AuthGuard)
|
||||
async disable(
|
||||
@Param('id', ParseIntPipe) _id: string,
|
||||
@Param('id', ConceptPipe) concept: Concept,
|
||||
) {
|
||||
await this.conceptService.disable(concept);
|
||||
return new ConceptResponseDTO(concept);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user