130 lines
3.5 KiB
TypeScript
130 lines
3.5 KiB
TypeScript
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);
|
|
}
|
|
}
|