新增打卡模块,包括打卡控制器、服务、模型及数据传输对象,更新应用模块以引入新模块

This commit is contained in:
richarjiang
2025-08-13 19:16:41 +08:00
parent 3b1af29c63
commit 866143d3ad
6 changed files with 448 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
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 } 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, userId: 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);
}
}