import logger from "@/utils/logger" // eslint-disable-next-line @typescript-eslint/no-explicit-any type HasNoArgsConstructor = T extends { new (): any } ? true : false type CleanConstructorParameters = HasNoArgsConstructor extends true ? [] : ConstructorParameters export class BaseJob { protected filename: string // eslint-disable-next-line @typescript-eslint/no-explicit-any constructor(...args: any[]) { this.filename = args[0] || __filename } static perform( this: T, ...args: CleanConstructorParameters ): ReturnType["perform"]> { try { const instance = new this(...args) const { filename } = instance logger.debug(`## Performing Job: ${filename}`) return instance.perform() } catch (error) { logger.error(`Failed to perform job: ${error}`, { error }) throw new Error(`Failed to perform job: ${error}`) } } // eslint-disable-next-line @typescript-eslint/no-explicit-any perform(): any { throw new Error("Not Implemented") } } export default BaseJob