import { JwtAuthGuard } from '@api/modules/auth/user/jwt.guard';
import {
  Body,
  Controller,
  Get,
  Post,
  Query,
  Req,
  UseGuards,
} from '@nestjs/common';
import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
import { CoursesBookmarkService } from './courses-bookmark.service';
import {
  CreateCoursesBookmark,
  DeleteCoursesBookmarkDto,
  GetCoursesBookmarkListDto,
  GetCoursesBookmarkListResponseDto,
} from './courses-bookmark.dto';
import { plainToInstance } from 'class-transformer';

@ApiTags('강의 책갈피')
@UseGuards(JwtAuthGuard)
@Controller('courses-bookmark')
export class CoursesBookmarkController {
  constructor(private coursesBookmarkService: CoursesBookmarkService) {}

  @ApiOperation({
    summary: '책갈피 목록',
  })
  @Get()
  @ApiOkResponse({ type: GetCoursesBookmarkListResponseDto })
  async getList(@Query() query: GetCoursesBookmarkListDto) {
    const data = await this.coursesBookmarkService.getList(query);
    return plainToInstance(GetCoursesBookmarkListResponseDto, data, {
      excludeExtraneousValues: true,
    });
  }

  @ApiOperation({
    summary: '책갈피 생성',
  })
  @Post()
  async create(@Body() body: CreateCoursesBookmark) {
    await this.coursesBookmarkService.create(body);
    return;
  }

  @Post('delete')
  @ApiOperation({
    summary: '책갈피 삭제',
  })
  async delete(@Body() body: DeleteCoursesBookmarkDto) {
    await this.coursesBookmarkService.delete(body);
    return;
  }
}
