65 lines
1.8 KiB
TypeScript
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'],
|
|
})
|