import { Body, Controller, Get, Param, Patch, Post, Put, Query, UseGuards, } from '@nestjs/common'; import { JwtAuthGuard } from '../auth/jwt-auth.guard'; import { OrgModuleGuard } from '../billing/org-module.guard'; import { RequireOrgModule } from '../billing/org-module.decorator'; import { CurrentUser } from '../auth/current-user.decorator'; import type { Actor } from '../common/record-scope'; import { RoutineTasksService } from './routine-tasks.service'; import { CompleteRoutineTaskDto, CreateRoutineTaskDto, RescheduleRoutineTaskDto, RoutineEntityQueryDto, RoutineRangeQueryDto, RoutineTaskQueryDto, RoutineUserSettingsUpdateDto, SkipRoutineTaskDto, UpdateRoutineTaskDto, } from './dto'; @Controller('routine-tasks') @UseGuards(JwtAuthGuard, OrgModuleGuard) @RequireOrgModule('routines') export class RoutineTasksController { constructor(private readonly tasks: RoutineTasksService) {} @Get('today') today(@CurrentUser() user: Actor, @Query() q: RoutineTaskQueryDto) { return this.tasks.today(user, q.userId, q.date); } @Get('badge') badge(@CurrentUser() user: Actor) { return this.tasks.badge(user); } @Get('overdue') overdue(@CurrentUser() user: Actor, @Query() q: RoutineTaskQueryDto) { return this.tasks.overdue(user, q.userId); } @Get('calendar') calendar(@CurrentUser() user: Actor, @Query() q: RoutineRangeQueryDto) { return this.tasks.calendar(user, q); } @Get('by-entity') byEntity(@CurrentUser() user: Actor, @Query() q: RoutineEntityQueryDto) { return this.tasks.byEntity(user, q); } @Get('settings') settings(@CurrentUser() user: Actor) { return this.tasks.getSettings(user); } @Put('settings') updateSettings(@CurrentUser() user: Actor, @Body() dto: RoutineUserSettingsUpdateDto) { return this.tasks.updateSettings(user, dto); } @Post() create(@CurrentUser() user: Actor, @Body() dto: CreateRoutineTaskDto) { return this.tasks.create(user, dto); } @Post('from-activity/:activityId') fromActivity(@CurrentUser() user: Actor, @Param('activityId') activityId: string) { return this.tasks.createFromActivity(user, activityId); } @Get(':id') detail(@CurrentUser() user: Actor, @Param('id') id: string) { return this.tasks.detail(user, id); } @Patch(':id') update(@CurrentUser() user: Actor, @Param('id') id: string, @Body() dto: UpdateRoutineTaskDto) { return this.tasks.update(user, id, dto); } @Post(':id/complete') complete(@CurrentUser() user: Actor, @Param('id') id: string, @Body() dto: CompleteRoutineTaskDto) { return this.tasks.complete(user, id, dto.note); } @Post(':id/uncomplete') uncomplete(@CurrentUser() user: Actor, @Param('id') id: string) { return this.tasks.uncomplete(user, id); } @Post(':id/start') start(@CurrentUser() user: Actor, @Param('id') id: string) { return this.tasks.start(user, id); } @Post(':id/skip') skip(@CurrentUser() user: Actor, @Param('id') id: string, @Body() dto: SkipRoutineTaskDto) { return this.tasks.skip(user, id, dto.reason); } @Post(':id/reschedule') reschedule( @CurrentUser() user: Actor, @Param('id') id: string, @Body() dto: RescheduleRoutineTaskDto, ) { return this.tasks.reschedule(user, id, dto.dueAt); } @Post(':id/move-today') moveToday(@CurrentUser() user: Actor, @Param('id') id: string) { return this.tasks.moveToToday(user, id); } @Post(':id/cancel') cancel(@CurrentUser() user: Actor, @Param('id') id: string, @Body() dto: SkipRoutineTaskDto) { return this.tasks.cancel(user, id, dto.reason); } }