All files / goals goals.controller.ts

95% Statements 19/20
100% Branches 4/4
83.33% Functions 5/6
94.44% Lines 17/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 431x 1x   1x 1x     1x 1x     1x 3x 1x   2x       1x         1x 1x       1x         1x       1x 1x      
import { BadRequestException, Body, Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Query } from '@nestjs/common';
import { CurrentSession } from '../auth/session.decorator';
import type { AuthenticatedSession } from '../auth/tenant.guard';
import { CreateGoalDto, GOAL_STATUSES, UpdateGoalDto, type GoalStatusValue } from './dto';
import { GoalsService } from './goals.service';
 
@Controller('goals')
export class GoalsController {
  constructor(private readonly goalsService: GoalsService) {}
 
  @Get()
  list(@CurrentSession() session: AuthenticatedSession, @Query('status') status?: string) {
    if (status && !GOAL_STATUSES.includes(status as GoalStatusValue)) {
      throw new BadRequestException(`status must be one of: ${GOAL_STATUSES.join(', ')}`);
    }
    return this.goalsService.list(session, status as GoalStatusValue | undefined);
  }
 
  @Get(':id')
  getById(@CurrentSession() session: AuthenticatedSession, @Param('id', ParseUUIDPipe) id: string) {
    return this.goalsService.getById(session, id);
  }
 
  @Post()
  create(@CurrentSession() session: AuthenticatedSession, @Body() dto: CreateGoalDto) {
    return this.goalsService.create(session, dto);
  }
 
  @Patch(':id')
  update(
    @CurrentSession() session: AuthenticatedSession,
    @Param('id', ParseUUIDPipe) id: string,
    @Body() dto: UpdateGoalDto,
  ) {
    return this.goalsService.update(session, id, dto);
  }
 
  @Delete(':id')
  softDelete(@CurrentSession() session: AuthenticatedSession, @Param('id', ParseUUIDPipe) id: string) {
    return this.goalsService.softDelete(session, id);
  }
}