89 lines
2.0 KiB
TypeScript
89 lines
2.0 KiB
TypeScript
import {
|
|
Controller,
|
|
Get,
|
|
Post,
|
|
Put,
|
|
Delete,
|
|
Patch,
|
|
Body,
|
|
Param,
|
|
Query,
|
|
UseGuards,
|
|
} from '@nestjs/common';
|
|
import { ArticlesService } from './articles.service';
|
|
import {
|
|
CreateArticleDto,
|
|
UpdateArticleDto,
|
|
FindArticlesDto,
|
|
} from './articles.dto';
|
|
|
|
import { JwtAuthGuard } from './auth/jwt-auth.guard';
|
|
import { RolesGuard } from './auth/roles.guard';
|
|
import { Roles } from './auth/roles.decorator';
|
|
import { Public } from './auth/public.decorator';
|
|
import { UserRole } from './entities';
|
|
|
|
@Controller('articles')
|
|
export class ArticlesController {
|
|
constructor(private readonly articlesService: ArticlesService) {}
|
|
|
|
@Post()
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN, UserRole.CONTRIBUTOR)
|
|
create(@Body() dto: CreateArticleDto) {
|
|
return this.articlesService.create(dto);
|
|
}
|
|
|
|
@Get()
|
|
@Public()
|
|
findAll(@Query() dto: FindArticlesDto) {
|
|
return this.articlesService.findAll(dto);
|
|
}
|
|
|
|
@Get('hero')
|
|
@Public()
|
|
findHero() {
|
|
return this.articlesService.findHeroArticle();
|
|
}
|
|
|
|
@Get(':id')
|
|
@Public()
|
|
findOne(@Param('id') id: string) {
|
|
return this.articlesService.findOne(id);
|
|
}
|
|
|
|
@Get('slug/:slug')
|
|
@Public()
|
|
findBySlug(@Param('slug') slug: string) {
|
|
return this.articlesService.findBySlug(slug);
|
|
}
|
|
|
|
@Put(':id')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN, UserRole.CONTRIBUTOR)
|
|
update(@Param('id') id: string, @Body() dto: UpdateArticleDto) {
|
|
return this.articlesService.update(id, dto);
|
|
}
|
|
|
|
@Delete(':id')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN, UserRole.CONTRIBUTOR)
|
|
remove(@Param('id') id: string) {
|
|
return this.articlesService.remove(id);
|
|
}
|
|
|
|
@Patch(':id/archive')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN, UserRole.CONTRIBUTOR)
|
|
archive(@Param('id') id: string) {
|
|
return this.articlesService.archive(id);
|
|
}
|
|
|
|
@Patch(':id/publish')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN, UserRole.CONTRIBUTOR)
|
|
publish(@Param('id') id: string) {
|
|
return this.articlesService.publish(id);
|
|
}
|
|
}
|