Files
plates-server/src/checkins/checkins.controller.ts

68 lines
3.0 KiB
TypeScript

import { Body, Controller, HttpCode, HttpStatus, Post, Put, Delete, UseGuards, Get, Query } from '@nestjs/common';
import { ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { CheckinsService } from './checkins.service';
import { CreateCheckinDto, UpdateCheckinDto, CompleteCheckinDto, RemoveCheckinDto, CheckinResponseDto, GetDailyCheckinsQueryDto, GetDailyStatusRangeQueryDto, DailyStatusItem } from './dto/checkin.dto';
import { JwtAuthGuard } from '../common/guards/jwt-auth.guard';
import { CurrentUser } from '../common/decorators/current-user.decorator';
import { AccessTokenPayload } from '../users/services/apple-auth.service';
@ApiTags('checkins')
@Controller('checkins')
@UseGuards(JwtAuthGuard)
export class CheckinsController {
constructor(private readonly checkinsService: CheckinsService) { }
@Post('create')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '创建打卡' })
@ApiBody({ type: CreateCheckinDto })
@ApiResponse({ type: CheckinResponseDto })
async create(@Body() dto: CreateCheckinDto, @CurrentUser() user: AccessTokenPayload): Promise<CheckinResponseDto> {
return this.checkinsService.create(dto, user.sub);
}
@Put('update')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '更新打卡' })
@ApiBody({ type: UpdateCheckinDto })
@ApiResponse({ type: CheckinResponseDto })
async update(@Body() dto: UpdateCheckinDto, @CurrentUser() user: AccessTokenPayload): Promise<CheckinResponseDto> {
return this.checkinsService.update(dto, user.sub);
}
@Post('complete')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '完成打卡' })
@ApiBody({ type: CompleteCheckinDto })
@ApiResponse({ type: CheckinResponseDto })
async complete(@Body() dto: CompleteCheckinDto, @CurrentUser() user: AccessTokenPayload): Promise<CheckinResponseDto> {
return this.checkinsService.complete(dto, user.sub);
}
@Delete('remove')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '删除打卡' })
@ApiBody({ type: RemoveCheckinDto })
@ApiResponse({ type: CheckinResponseDto })
async remove(@Body() dto: RemoveCheckinDto, @CurrentUser() user: AccessTokenPayload): Promise<CheckinResponseDto> {
return this.checkinsService.remove(dto, user.sub);
}
@Get('daily')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '按天获取打卡列表' })
async getDaily(@Query() query: GetDailyCheckinsQueryDto, @CurrentUser() user: AccessTokenPayload): Promise<CheckinResponseDto> {
return this.checkinsService.getDaily(user.sub, query.date);
}
@Get('range/daily-status')
@HttpCode(HttpStatus.OK)
@ApiOperation({ summary: '按时间范围返回每天是否打卡' })
@ApiResponse({ description: '数组,元素含 date(YYYY-MM-DD) 与 checkedIn(boolean)' })
async getDailyStatusRange(@Query() query: GetDailyStatusRangeQueryDto, @CurrentUser() user: AccessTokenPayload): Promise<CheckinResponseDto<DailyStatusItem[]>> {
return this.checkinsService.getDailyStatusRange(user.sub, query);
}
}