src/article/article.controller.ts
articles
Methods |
|
Async create | |||||||||
create(userId: number, articleData: CreateArticleDto)
|
|||||||||
Decorators :
@ApiOperation({title: 'Create article'})
|
|||||||||
Defined in src/article/article.controller.ts:44
|
|||||||||
Parameters :
Returns :
{}
|
Async createComment | |||||||||
createComment(slug, commentData: CreateCommentDto)
|
|||||||||
Decorators :
@ApiOperation({title: 'Create comment'})
|
|||||||||
Defined in src/article/article.controller.ts:69
|
|||||||||
Parameters :
Returns :
{}
|
Async delete | ||||
delete(params)
|
||||
Decorators :
@ApiOperation({title: 'Delete article'})
|
||||
Defined in src/article/article.controller.ts:61
|
||||
Parameters :
Returns :
{}
|
Async deleteComment | ||||
deleteComment(params)
|
||||
Decorators :
@ApiOperation({title: 'Delete comment'})
|
||||
Defined in src/article/article.controller.ts:77
|
||||
Parameters :
Returns :
{}
|
Async favorite | |||||||||
favorite(userId: number, slug)
|
|||||||||
Decorators :
@ApiOperation({title: 'Favorite article'})
|
|||||||||
Defined in src/article/article.controller.ts:86
|
|||||||||
Parameters :
Returns :
{}
|
Async findAll | ||||
findAll(query)
|
||||
Decorators :
@ApiOperation({title: 'Get all articles'})
|
||||
Defined in src/article/article.controller.ts:26
|
||||
Parameters :
Returns :
Promise<ArticlesRO>
|
Async findComments | ||||
findComments(slug)
|
||||
Decorators :
@Get(':slug/comments')
|
||||
Defined in src/article/article.controller.ts:36
|
||||
Parameters :
Returns :
Promise<CommentsRO>
|
Async findOne | ||||
findOne(slug)
|
||||
Decorators :
@Get(':slug')
|
||||
Defined in src/article/article.controller.ts:31
|
||||
Parameters :
Returns :
Promise<ArticleRO>
|
Async getFeed | |||||||||
getFeed(userId: number, query)
|
|||||||||
Decorators :
@ApiOperation({title: 'Get article feed'})
|
|||||||||
Defined in src/article/article.controller.ts:102
|
|||||||||
Parameters :
Returns :
Promise<ArticlesRO>
|
Async unFavorite | |||||||||
unFavorite(userId: number, slug)
|
|||||||||
Decorators :
@ApiOperation({title: 'Unfavorite article'})
|
|||||||||
Defined in src/article/article.controller.ts:94
|
|||||||||
Parameters :
Returns :
{}
|
Async update | |||||||||
update(params, articleData: CreateArticleDto)
|
|||||||||
Decorators :
@ApiOperation({title: 'Update article'})
|
|||||||||
Defined in src/article/article.controller.ts:52
|
|||||||||
Parameters :
Returns :
{}
|
import {Get, Post, Body, Put, Delete, Query, Param, Controller} from '@nestjs/common';
import { Request } from 'express';
import { ArticleService } from './article.service';
import { CreateArticleDto, CreateCommentDto } from './dto';
import { ArticlesRO, ArticleRO } from './article.interface';
import { CommentsRO } from './article.interface';
import { User } from '../user/user.decorator';
import {
ApiUseTags,
ApiBearerAuth,
ApiResponse,
ApiOperation,
} from '@nestjs/swagger';
@ApiBearerAuth()
@ApiUseTags('articles')
@Controller('articles')
export class ArticleController {
constructor(private readonly articleService: ArticleService) {}
@ApiOperation({ title: 'Get all articles' })
@ApiResponse({ status: 200, description: 'Return all articles.'})
@Get()
async findAll(@Query() query): Promise<ArticlesRO> {
return await this.articleService.findAll(query);
}
@Get(':slug')
async findOne(@Param('slug') slug): Promise<ArticleRO> {
return await this.articleService.findOne({slug});
}
@Get(':slug/comments')
async findComments(@Param('slug') slug): Promise<CommentsRO> {
return await this.articleService.findComments(slug);
}
@ApiOperation({ title: 'Create article' })
@ApiResponse({ status: 201, description: 'The article has been successfully created.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Post()
async create(@User('id') userId: number, @Body('article') articleData: CreateArticleDto) {
return this.articleService.create(userId, articleData);
}
@ApiOperation({ title: 'Update article' })
@ApiResponse({ status: 201, description: 'The article has been successfully updated.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Put(':slug')
async update(@Param() params, @Body('article') articleData: CreateArticleDto) {
// Todo: update slug also when title gets changed
return this.articleService.update(params.slug, articleData);
}
@ApiOperation({ title: 'Delete article' })
@ApiResponse({ status: 201, description: 'The article has been successfully deleted.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Delete(':slug')
async delete(@Param() params) {
return this.articleService.delete(params.slug);
}
@ApiOperation({ title: 'Create comment' })
@ApiResponse({ status: 201, description: 'The comment has been successfully created.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Post(':slug/comments')
async createComment(@Param('slug') slug, @Body('comment') commentData: CreateCommentDto) {
return await this.articleService.addComment(slug, commentData);
}
@ApiOperation({ title: 'Delete comment' })
@ApiResponse({ status: 201, description: 'The article has been successfully deleted.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Delete(':slug/comments/:id')
async deleteComment(@Param() params) {
const {slug, id} = params;
return await this.articleService.deleteComment(slug, id);
}
@ApiOperation({ title: 'Favorite article' })
@ApiResponse({ status: 201, description: 'The article has been successfully favorited.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Post(':slug/favorite')
async favorite(@User('id') userId: number, @Param('slug') slug) {
return await this.articleService.favorite(userId, slug);
}
@ApiOperation({ title: 'Unfavorite article' })
@ApiResponse({ status: 201, description: 'The article has been successfully unfavorited.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Delete(':slug/favorite')
async unFavorite(@User('id') userId: number, @Param('slug') slug) {
return await this.articleService.unFavorite(userId, slug);
}
@ApiOperation({ title: 'Get article feed' })
@ApiResponse({ status: 200, description: 'Return article feed.'})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@Get('feed')
async getFeed(@User('id') userId: number, @Query() query): Promise<ArticlesRO> {
return await this.articleService.findFeed(userId, query);
}
}