import { Controller, Get, Post, Put, Body, Param, Query, UseGuards, } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; import { MedicationRecordsService } from './medication-records.service'; import { TakeMedicationDto } from './dto/take-medication.dto'; import { SkipMedicationDto } from './dto/skip-medication.dto'; import { UpdateMedicationRecordDto } from './dto/update-medication-record.dto'; import { MedicationRecordQueryDto } from './dto/medication-record-query.dto'; import { JwtAuthGuard } from '../common/guards/jwt-auth.guard'; import { CurrentUser } from '../common/decorators/current-user.decorator'; import { ApiResponseDto } from '../base.dto'; /** * 服药记录控制器 */ @ApiTags('medication-records') @Controller('medication-records') @UseGuards(JwtAuthGuard) export class MedicationRecordsController { constructor( private readonly recordsService: MedicationRecordsService, ) {} @Get() @ApiOperation({ summary: '获取服药记录' }) @ApiResponse({ status: 200, description: '查询成功' }) async findAll( @CurrentUser() user: any, @Query() query: MedicationRecordQueryDto, ) { const records = await this.recordsService.findAll(user.sub, query); return ApiResponseDto.success(records, '查询成功'); } @Get('today') @ApiOperation({ summary: '获取今日服药记录' }) @ApiResponse({ status: 200, description: '查询成功' }) async getTodayRecords(@CurrentUser() user: any) { const records = await this.recordsService.getTodayRecords(user.sub); return ApiResponseDto.success(records, '查询成功'); } @Get(':id') @ApiOperation({ summary: '获取服药记录详情' }) @ApiResponse({ status: 200, description: '查询成功' }) async findOne(@CurrentUser() user: any, @Param('id') id: string) { const record = await this.recordsService.findOne(id, user.sub); return ApiResponseDto.success(record, '查询成功'); } @Post(':id/take') @ApiOperation({ summary: '标记为已服用' }) @ApiResponse({ status: 200, description: '操作成功' }) async takeMedication( @CurrentUser() user: any, @Param('id') id: string, @Body() dto: TakeMedicationDto, ) { const record = await this.recordsService.takeMedication( id, user.sub, dto, ); return ApiResponseDto.success(record, '已记录服药'); } @Post(':id/skip') @ApiOperation({ summary: '跳过服药' }) @ApiResponse({ status: 200, description: '操作成功' }) async skipMedication( @CurrentUser() user: any, @Param('id') id: string, @Body() dto: SkipMedicationDto, ) { const record = await this.recordsService.skipMedication( id, user.sub, dto, ); return ApiResponseDto.success(record, '已跳过服药'); } @Put(':id') @ApiOperation({ summary: '更新服药记录' }) @ApiResponse({ status: 200, description: '更新成功' }) async update( @CurrentUser() user: any, @Param('id') id: string, @Body() dto: UpdateMedicationRecordDto, ) { const record = await this.recordsService.update(id, user.sub, dto); return ApiResponseDto.success(record, '更新成功'); } }