import { OnQueueCompleted, OnQueueFailed, Process, Processor } from '@nestjs/bull'; import { Job } from 'bull'; import { CloudService } from '../cloud/cloud.service'; import { DbService } from '../db/db.service'; import { JobData } from '../models/data.model'; import { DeviceService } from '../device/device.service'; import { QService } from './q.service'; import { SocketService } from '../socket/socket.service'; import { EVENTS, hash } from '../const'; @Processor('cloud-request') export class RegisterProcessor { constructor( private readonly qService: QService, private readonly cloudService: CloudService, private readonly deviceService: DeviceService, private readonly db: DbService, private readonly socketService: SocketService ) { } @Process('register') async register(job: Job) { const errorResponse = { error: { log: { metadata: job.data.metadata, payload: job.data.payload } }, metadata: job.data.metadata, time: Date.now() }; await this.db.add(hash(job.data.metadata.sn), EVENTS.TRY_REGISTER, errorResponse); this.socketService.send({ event: EVENTS.TRY_REGISTER }); return this.cloudService.register(job.data.payload); } @OnQueueFailed() async fail(job: Job, error: any) { const errorResponse = { error: { log: error }, metadata: job.data.metadata, time: Date.now() }; await this.db.add(hash(job.data.metadata.sn), EVENTS.REGISTER_ERROR, errorResponse); this.socketService.send({ event: EVENTS.REGISTER_ERROR }); console.log('JOB REGISTER FAILS', error); } @OnQueueCompleted() async completed(job: Job, result) { const errorResponse = { error: { log: result }, metadata: job.data.metadata, time: Date.now() }; const { id } = result; await this.db.setDevice(hash(job.data.metadata.sn), id); await this.db.add(hash(job.data.metadata.sn), EVENTS.REGISTER_COMPLETE, errorResponse); await this.qService.certificate(result, job.data.metadata); this.socketService.send({ event: EVENTS.REGISTER_COMPLETE }); console.log('JOB REGISTER COMPLETE', result); } }