68 lines
3.0 KiB
TypeScript
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);
|
|
}
|
|
}
|
|
|
|
|