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); } }