import { Body, Controller, Post, UseGuards } from '@nestjs/common' import { plainToClass } from 'class-transformer' import { BasicAuthorizationGuard } from '../../../guards/basic_authorization.guard' import { Anthropometry, BioimpedanceImportation, Patient } from '../../../models' import { BaseEventParams, OneoffScheduledEventParams } from '../../../params' import { BioimpedanceService } from '../../../services' import { Importation, Notification } from '../domain' import { ImportationErrors } from '../types/importation_errors.type' import { EventParams, ImportParams } from './params' @UseGuards(BasicAuthorizationGuard) @Controller('bioimpedances') export class BioimpedancesController { constructor( private readonly importation: Importation, private readonly notification: Notification, private readonly bioimpedanceService: BioimpedanceService, ) {} @Post('import') async import(@Body() { session_variables, input }: ImportParams): Promise { return await this.importation.importBioimpedances({ userId: session_variables['x-hasura-user-id'], filePath: input.file_path, users: input.users, smartfitUnitId: input.smartfit_unit, }) } @Post('handle_event') async handleEvent(@Body() params: EventParams): Promise { if (params.trigger.name === 'create_anthropometry_if_not_exists') return this.importation.createAnthropometryIfNotExists( plainToClass(BioimpedanceImportation, params.event.data.new), ) if (params.trigger.name === 'check_pending_bioimpedance_by_new_credits') return this.importation.createBioimpedanceIfPending( plainToClass(Patient, { id: params.event.data.new.patient_id }), ) await this.importation.createBioimpedanceIfPending( plainToClass(Patient, params.event.data.new || params.event.data.row), ) } @Post('check_push_conversion') async checkPushConversion(@Body() params: OneoffScheduledEventParams): Promise { await this.notification.checkPushConversion(params.payload.patient_ids) } @Post('/cache_anthropometries') async cacheAnthropometries(@Body() { event }: BaseEventParams): Promise { const anthropometry = event.data.new || event.data.row await Promise.all([ this.bioimpedanceService.createPatientAnthropometriesCache(anthropometry.patient_id, 'bioimpedances'), this.bioimpedanceService.createPatientAnthropometriesCache(anthropometry.patient_id, 'measurements'), ]) } }