import {type QueueAddOptions} from "p-queue/dist/options"; import {type Logger} from "winston"; import {type IEndpointParams} from "../endpoint"; export interface IJob { readonly id: string; readonly name: string; readonly status: IJobStatus; readonly total: number; readonly progress: number; readonly success: number; readonly successRatio: number; readonly failure: number; readonly failureRatio: number; readonly skip: number; readonly skipRatio: number; readonly created: Date; readonly started?: Date | null; readonly finished?: Date | null; readonly userId?: string | null; readonly params: TParams; } export type IJobParams = T extends IJob ? TParams : T; export interface IJobProgress { readonly jobId: string; result(): IJobStatus | undefined; success(): number; failure(): number; skip(): number; setTotal(total: number): Promise; setStatus(status: IJobStatus): Promise; onSuccess(): Promise; onFailure(): Promise; onSkip(): Promise; setResult(result: IJobStatus): void; isReview(): boolean; } export interface IJobHandlerRequest { name: string; job: IJob; params: TParams; userId?: string | null; jobProgress: IJobProgress; logger: Logger; progress(callback: () => Promise, sleep?: number): Promise; } export interface IJobProcessor { request(params: IEndpointParams>, queue?: QueueAddOptions): Promise>; async(params: TParams, userId?: string | null, queue?: QueueAddOptions): Promise>; handler(request: IJobHandlerRequest): Promise; } export type IJobStatus = "NEW" | "RUNNING" | "SUCCESS" | "FAILURE" | "REVIEW" | "DONE";