76 أسطر
2.9 KiB
TypeScript
76 أسطر
2.9 KiB
TypeScript
import { Body, Controller, Delete, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
|
import { CurrentUser } from '../../common/decorators/current-user.decorator';
|
|
import { SuperAdminPermissions } from '../../common/decorators/superadmin-permissions.decorator';
|
|
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
|
|
import { SuperAdminPermissionsGuard } from '../../common/guards/superadmin-permissions.guard';
|
|
import { SuperAdminJwtAuthGuard } from '../../common/guards/super-admin-jwt-auth.guard';
|
|
import { JwtPayload } from '../../common/interfaces/jwt-payload.interface';
|
|
import { AdminCommentQueryDto } from './dto/admin-comment-query.dto';
|
|
import { CommentQueryDto } from './dto/comment-query.dto';
|
|
import { CreateCommentDto } from './dto/create-comment.dto';
|
|
import { UpdateCommentDto } from './dto/update-comment.dto';
|
|
import { CommentsService } from './comments.service';
|
|
import { SUPERADMIN_PERMISSIONS } from '../superadmin/superadmin-permissions';
|
|
|
|
@ApiTags('Comments')
|
|
@Controller('comments')
|
|
export class CommentsController {
|
|
constructor(private readonly commentsService: CommentsService) {}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Post()
|
|
async create(@CurrentUser() user: JwtPayload, @Body() dto: CreateCommentDto) {
|
|
return this.commentsService.create(user.sub, dto);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Get('post/:postId')
|
|
async findByPost(@Param('postId') postId: string, @Query() query: CommentQueryDto) {
|
|
return this.commentsService.findByPost(postId, query);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Get(':commentId/replies')
|
|
async findReplies(@Param('commentId') commentId: string, @Query() query: CommentQueryDto) {
|
|
return this.commentsService.findReplies(commentId, query);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Patch(':commentId')
|
|
async update(
|
|
@CurrentUser() user: JwtPayload,
|
|
@Param('commentId') commentId: string,
|
|
@Body() dto: UpdateCommentDto,
|
|
) {
|
|
return this.commentsService.update(user.sub, commentId, dto);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(SuperAdminJwtAuthGuard, SuperAdminPermissionsGuard)
|
|
@SuperAdminPermissions(SUPERADMIN_PERMISSIONS.CONTENT_MODERATE)
|
|
@Get('admin')
|
|
async adminList(@Query() query: AdminCommentQueryDto) {
|
|
return this.commentsService.findPlatformComments(query);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
@Delete(':commentId')
|
|
async remove(@CurrentUser() user: JwtPayload, @Param('commentId') commentId: string) {
|
|
return this.commentsService.remove(user.sub, commentId);
|
|
}
|
|
|
|
@ApiBearerAuth()
|
|
@UseGuards(SuperAdminJwtAuthGuard, SuperAdminPermissionsGuard)
|
|
@SuperAdminPermissions(SUPERADMIN_PERMISSIONS.CONTENT_MODERATE)
|
|
@Delete('admin/:commentId')
|
|
async adminRemove(@CurrentUser() user: JwtPayload, @Param('commentId') commentId: string) {
|
|
return this.commentsService.removeBySuperAdmin(user.email ?? user.sub, commentId);
|
|
}
|
|
}
|