import { Body, Controller, Get, Param, Patch, Post } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { RequirePermission } from '../auth/decorators/require-permission.decorator'; import { CurrentUser } from '../auth/decorators/current-user.decorator'; import type { AuthenticatedUser } from '../auth/types/authenticated-user'; import { CreateVarroaMeasurementDto } from './dto/create-varroa-measurement.dto'; import { UpdateVarroaMeasurementDto } from './dto/update-varroa-measurement.dto'; import { VarroaService } from './varroa.service'; import { VarroaThresholdService } from './varroa-threshold.service'; import { Idempotent } from '../common/idempotency/idempotent.decorator'; @ApiTags('varroa-measurements') @ApiBearerAuth() @Controller('varroa-measurements') export class VarroaController { constructor( private readonly varroaService: VarroaService, private readonly varroaThresholdService: VarroaThresholdService, ) {} @RequirePermission('varroa:read') @Get() findAll() { return this.varroaService.findAll(); } /** Effective alarm threshold; declared before :id so it is not shadowed. */ @RequirePermission('varroa:read', 'varroa:create') @Get('threshold') getThreshold() { return this.varroaThresholdService.current(); } @RequirePermission('varroa:read') @Get(':id') findOne(@Param('id') id: string) { return this.varroaService.findById(id); } @RequirePermission('varroa:create') @Idempotent() @Post() create( @Body() dto: CreateVarroaMeasurementDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.varroaService.create(dto, actor.id); } @RequirePermission('varroa:update') @Patch(':id') update( @Param('id') id: string, @Body() dto: UpdateVarroaMeasurementDto, @CurrentUser() actor: AuthenticatedUser, ) { return this.varroaService.update(id, dto, actor.id); } }