|
|
@@ -1,4 +1,4 @@
|
|
|
-import { Injectable, Logger } from '@nestjs/common'
|
|
|
+import { Injectable, Logger, OnModuleInit } from '@nestjs/common'
|
|
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { Web3Service } from 'src/web3/web3.service'
|
|
|
import { Task } from './entities/task.entity'
|
|
|
@@ -15,8 +15,9 @@ import { Web3Result } from 'src/web3/model/web3-result'
|
|
|
import { randomAmount } from 'src/utils/common'
|
|
|
import { EventEmitter2 } from '@nestjs/event-emitter'
|
|
|
import { setTimeout } from 'timers/promises'
|
|
|
+import schedule from 'node-schedule'
|
|
|
@Injectable()
|
|
|
-export class TaskService {
|
|
|
+export class TaskService implements OnModuleInit {
|
|
|
constructor(
|
|
|
private readonly web3Service: Web3Service,
|
|
|
private readonly accountsService: AccountsService,
|
|
|
@@ -27,6 +28,25 @@ export class TaskService {
|
|
|
private eventEmitter: EventEmitter2
|
|
|
) {}
|
|
|
|
|
|
+ async onModuleInit() {
|
|
|
+ const tasks = await this.taskRepository.findBy({
|
|
|
+ status: TaskStatus.Pending
|
|
|
+ })
|
|
|
+ for (let task of tasks) {
|
|
|
+ if (task.startTime <= new Date()) {
|
|
|
+ try {
|
|
|
+ this.runTask(task)
|
|
|
+ } catch (error) {}
|
|
|
+ } else {
|
|
|
+ schedule.scheduleJob(task.startTime, () => {
|
|
|
+ try {
|
|
|
+ this.runTask(task)
|
|
|
+ } catch (error) {}
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
async findAll(req: PageRequest<Task>): Promise<Pagination<Task>> {
|
|
|
return await paginate<Task>(this.taskRepository, req.page, req.search)
|
|
|
}
|
|
|
@@ -41,7 +61,15 @@ export class TaskService {
|
|
|
...createTask
|
|
|
})
|
|
|
if (!createTask.startTime || createTask.startTime <= new Date()) {
|
|
|
- this.runTask(task)
|
|
|
+ try {
|
|
|
+ this.runTask(task)
|
|
|
+ } catch (error) {}
|
|
|
+ } else {
|
|
|
+ schedule.scheduleJob(createTask.startTime, () => {
|
|
|
+ try {
|
|
|
+ this.runTask(task)
|
|
|
+ } catch (error) {}
|
|
|
+ })
|
|
|
}
|
|
|
return task
|
|
|
}
|