diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index 2ebe1e17a7..145747124a 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -64,6 +64,14 @@ export type DatabaseTaskStoreOptions = { database: Knex; }; +const parseSqlDateToIsoString = (input: T): T | string => { + if (typeof input === 'string') { + return DateTime.fromSQL(input, { zone: 'UTC' }).toISO(); + } + + return input; +}; + /** * DatabaseTaskStore * @@ -85,7 +93,7 @@ export class DatabaseTaskStore implements TaskStore { this.db = options.database; } - async list(options: Partial): Promise { + async list(options: { createdBy?: string }): Promise { const queryBuilder = this.db('tasks'); if (options.createdBy) { @@ -101,16 +109,8 @@ export class DatabaseTaskStore implements TaskStore { spec: JSON.parse(result.spec), status: result.status, createdBy: result.created_by ?? undefined, - lastHeartbeatAt: - typeof result.last_heartbeat_at === 'string' - ? DateTime.fromSQL(result.last_heartbeat_at, { - zone: 'UTC', - }).toISO() - : result.last_heartbeat_at, - createdAt: - typeof result.created_at === 'string' - ? DateTime.fromSQL(result.created_at, { zone: 'UTC' }).toISO() - : result.created_at, + lastHeartbeatAt: parseSqlDateToIsoString(result.last_heartbeat_at), + createdAt: parseSqlDateToIsoString(result.created_at), })); } @@ -128,16 +128,8 @@ export class DatabaseTaskStore implements TaskStore { id: result.id, spec, status: result.status, - lastHeartbeatAt: - typeof result.last_heartbeat_at === 'string' - ? DateTime.fromSQL(result.last_heartbeat_at, { - zone: 'UTC', - }).toISO() - : result.last_heartbeat_at, - createdAt: - typeof result.created_at === 'string' - ? DateTime.fromSQL(result.created_at, { zone: 'UTC' }).toISO() - : result.created_at, + lastHeartbeatAt: parseSqlDateToIsoString(result.last_heartbeat_at), + createdAt: parseSqlDateToIsoString(result.created_at), createdBy: result.created_by ?? undefined, secrets, }; @@ -329,10 +321,7 @@ export class DatabaseTaskStore implements TaskStore { taskId, body, type: event.event_type, - createdAt: - typeof event.created_at === 'string' - ? DateTime.fromSQL(event.created_at, { zone: 'UTC' }).toISO() - : event.created_at, + createdAt: parseSqlDateToIsoString(event.created_at), }; } catch (error) { throw new Error( diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts index f3939a8668..e56d1b682a 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts @@ -132,7 +132,7 @@ export interface TaskBroker { after: number | undefined; }): Observable<{ events: SerializedTaskEvent[] }>; get(taskId: string): Promise; - list(options?: Partial): Promise; + list(options?: { createdBy?: string }): Promise; } /** @@ -193,7 +193,7 @@ export interface TaskStore { listStaleTasks(options: { timeoutS: number }): Promise<{ tasks: { taskId: string }[]; }>; - list(options: Partial): Promise; + list(options: { createdBy?: string }): Promise; emitLogEvent({ taskId, body }: TaskStoreEmitOptions): Promise; listEvents({