chain-client/src/models/ScheduleConfirmEvent.ts
2023-04-17 11:19:24 +08:00

65 lines
1.8 KiB
TypeScript

import { getModelForClass, index, modelOptions, prop } from '@typegoose/typegoose'
import { dbconn } from 'decorators/dbconn'
import logger from 'logger/logger'
import { TaskSvr } from 'service/task.service'
import { BaseModule } from './Base'
@dbconn()
@index({ transactionHash: 1 }, { unique: true })
@modelOptions({
schemaOptions: { collection: 'schedule_confirm_event', timestamps: true },
})
export class ScheduleConfirmEventClass extends BaseModule {
@prop({ required: true })
public address!: string
@prop()
public event: string
@prop({ required: true })
public transactionHash: string
@prop()
public blockNumber: number
@prop()
public blockHash: string
@prop()
public removed: boolean
@prop()
public operater: string
@prop({ type: () => [String] })
public scheduleIds: string[]
@prop()
public blockTime: number
@prop({ default: 0 })
public version: number
public static async saveEvent(event: any) {
logger.info(JSON.stringify(event))
if (event.removed) {
return
}
const data = {
address: event.address,
blockNumber: event.blockNumber,
removed: event.removed,
operater: event.returnValues.sender,
scheduleIds: event.returnValues.ids,
transactionHash: event.transactionHash,
blockTime: new Date(event.timestamp).getTime(),
$inc: { version: 1 },
}
let record = await ScheduleConfirmEvent.insertOrUpdate({ transactionHash: event.transactionHash }, data)
if (record.version === 1) {
logger.log('receive events: ' + JSON.stringify(record.scheduleIds))
for (let id of record.scheduleIds) {
await new TaskSvr().parseOneSchedule(id)
}
}
return record
}
}
export const ScheduleConfirmEvent = getModelForClass(ScheduleConfirmEventClass, {
existingConnection: ScheduleConfirmEventClass['db'],
})