xiongzhu 2 лет назад
Родитель
Сommit
9697e5d186

+ 2 - 4
src/app.module.ts

@@ -18,8 +18,7 @@ import { GalleryModule } from './gallery/gallery.module'
 import { AccountsModule } from './accounts/accounts.module'
 import { Web3Module } from './web3/web3.module'
 import { ScheduleModule } from '@nestjs/schedule'
-import { TaskModule } from './task/task.module';
-import { LogsModule } from './logs/logs.module';
+import { TaskModule } from './task/task.module'
 @Module({
     imports: [
         DevtoolsModule.register({
@@ -76,8 +75,7 @@ import { LogsModule } from './logs/logs.module';
         GalleryModule,
         AccountsModule,
         Web3Module,
-        TaskModule,
-        LogsModule,
+        TaskModule
     ],
     controllers: [],
     providers: [

+ 12 - 0
src/task/dto/create-task.dto.ts

@@ -0,0 +1,12 @@
+import { IsString, IsArray, IsDate } from 'class-validator'
+
+export class CreateTaskDto {
+    @IsString()
+    type: TaskType
+
+    @IsArray()
+    accounts: number[]
+
+    @IsDate()
+    startTime: Date
+}

+ 35 - 0
src/task/entities/task-log.entity.ts

@@ -0,0 +1,35 @@
+import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'
+import { LogStatus } from '../enums/log-status.enum'
+
+@Entity()
+export class TaskLog {
+    @PrimaryGeneratedColumn()
+    id: number
+
+    @Column()
+    taskId: number
+
+    @Column()
+    type: TaskType
+
+    @Column()
+    accountId: number
+
+    @Column()
+    address: string
+
+    @Column()
+    txHash: string
+
+    @Column()
+    url: string
+
+    @Column({ type: 'enum', enum: LogStatus })
+    status: LogStatus
+
+    @Column()
+    error: string
+
+    @CreateDateColumn()
+    createdAt: Date
+}

+ 8 - 4
src/task/entities/task.entity.ts

@@ -1,6 +1,7 @@
-import { Column, CreateDateColumn, PrimaryGeneratedColumn } from 'typeorm'
+import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'
 import { TaskStatus } from '../enums/task-status.enum'
 
+@Entity()
 export class Task {
     @PrimaryGeneratedColumn()
     id: number
@@ -9,9 +10,9 @@ export class Task {
     userId: number
 
     @Column()
-    type: string
+    type: TaskType
 
-    @Column({ type: 'enum', enum: TaskStatus })
+    @Column({ type: 'enum', enum: TaskStatus, default: TaskStatus.Pending })
     status: TaskStatus
 
     @CreateDateColumn()
@@ -20,6 +21,9 @@ export class Task {
     @Column({ type: 'text' })
     accounts: number[]
 
-    @Column()
+    @Column({ default: -1 })
     progress: number
+
+    @Column()
+    startTime: Date
 }

+ 4 - 0
src/task/enums/log-status.enum.ts

@@ -0,0 +1,4 @@
+export enum LogStatus {
+    Success = 'success',
+    Failed = 'failed'
+}

+ 1 - 1
src/task/enums/task-status.enum.ts

@@ -1,5 +1,5 @@
 export enum TaskStatus {
     Pending = 'pending',
     InProgress = 'in_progress',
-    Done = 'done'
+    Done = 'done',
 }

+ 21 - 3
src/task/task.controller.ts

@@ -1,4 +1,22 @@
-import { Controller } from '@nestjs/common';
+import { Body, Controller, Get, Post, Put, Req } from '@nestjs/common'
+import { CreateTaskDto } from './dto/create-task.dto'
+import { TaskService } from './task.service'
+import { PageRequest } from 'src/common/dto/page-request'
+import { Task } from './entities/task.entity'
 
-@Controller('task')
-export class TaskController {}
+@Controller('tasks')
+export class TaskController {
+    constructor(private taskService: TaskService) {}
+
+    @Post()
+    public async list(@Body() page: PageRequest<Task>, @Req() req) {
+        return await this.taskService.findAll(page)
+    }
+
+    @Put()
+    async createTask(@Body() createTask: CreateTaskDto, @Req() req) {
+        this.taskService.createTask(req.user.id, createTask)
+    }
+
+    
+}

+ 4 - 1
src/task/task.module.ts

@@ -2,9 +2,12 @@ import { Module } from '@nestjs/common'
 import { TaskService } from './task.service'
 import { TaskController } from './task.controller'
 import { Web3Module } from 'src/web3/web3.module'
+import { TypeOrmModule } from '@nestjs/typeorm'
+import { Task } from './entities/task.entity'
+import { TaskLog } from './entities/task-log.entity'
 
 @Module({
-    imports: [Web3Module],
+    imports: [Web3Module, TypeOrmModule.forFeature([Task, TaskLog])],
     providers: [TaskService],
     controllers: [TaskController]
 })

+ 26 - 2
src/task/task.service.ts

@@ -1,9 +1,33 @@
 import { Injectable } from '@nestjs/common'
+import { InjectRepository } from '@nestjs/typeorm'
 import { Web3Service } from 'src/web3/web3.service'
+import { Task } from './entities/task.entity'
+import { Repository } from 'typeorm'
+import { TaskLog } from './entities/task-log.entity'
+import { TaskStatus } from './enums/task-status.enum'
+import { CreateTaskDto } from './dto/create-task.dto'
+import { Pagination, paginate } from 'nestjs-typeorm-paginate'
+import { PageRequest } from 'src/common/dto/page-request'
 
 @Injectable()
 export class TaskService {
-    constructor(web3Service: Web3Service) {}
+    constructor(
+        private readonly web3Service: Web3Service,
+        @InjectRepository(Task)
+        private readonly taskRepository: Repository<Task>,
+        @InjectRepository(TaskLog)
+        private readonly taskLogRepository: Repository<TaskLog>
+    ) {}
 
-    
+    async findAll(req: PageRequest<Task>): Promise<Pagination<Task>> {
+        return await paginate<Task>(this.taskRepository, req.page, req.search)
+    }
+
+    async createTask(userId: number, createTask: CreateTaskDto) {
+        const task = await this.taskRepository.save({
+            userId,
+            ...createTask
+        })
+        return task
+    }
 }

+ 10 - 0
src/task/types.ts

@@ -0,0 +1,10 @@
+declare type TaskType =
+    | 'official_x2y'
+    | 'orbiter_x2y'
+    | 'official_y2x'
+    | 'orbiter_y2x'
+    | 'swap_x2y'
+    | 'swap_y2x'
+    | 'add_liquidity'
+    | 'remove_liquidity'
+    | 'mint'