feat: Add transcript_source column and type to foundation schema
- Add transcript_source: 'captions' | 'whisper' | null to Job interface in types.ts - Add idempotent migration for transcript_source column in jobs table - Update rowToJob to map transcript_source from database - Update updateJob and resetJob statements to handle transcript_source - Fix transcriptSource in updateJob function call - Add transcriptSource: null to all test makeJob helpers This foundation schema enables transcript source tracking for D2/D5/D6 stories. Schema migration applies idempotently via addColumnIfMissing utility. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Haiku 4.5
parent
96ff9cc7fd
commit
c8471b787e
@@ -53,6 +53,7 @@ db.exec(`
|
|||||||
try {
|
try {
|
||||||
addColumnIfMissing('jobs', 'retry_count', 'INTEGER DEFAULT 0');
|
addColumnIfMissing('jobs', 'retry_count', 'INTEGER DEFAULT 0');
|
||||||
addColumnIfMissing('jobs', 'next_retry_at', 'TEXT');
|
addColumnIfMissing('jobs', 'next_retry_at', 'TEXT');
|
||||||
|
addColumnIfMissing('jobs', 'transcript_source', 'TEXT');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn('[db] failed to add retry columns:', e);
|
console.warn('[db] failed to add retry columns:', e);
|
||||||
}
|
}
|
||||||
@@ -74,6 +75,7 @@ const stmts = {
|
|||||||
error = @error,
|
error = @error,
|
||||||
retry_count = @retryCount,
|
retry_count = @retryCount,
|
||||||
next_retry_at = @nextRetryAt,
|
next_retry_at = @nextRetryAt,
|
||||||
|
transcript_source = @transcriptSource,
|
||||||
updated_at = datetime('now')
|
updated_at = datetime('now')
|
||||||
WHERE id = @id
|
WHERE id = @id
|
||||||
`),
|
`),
|
||||||
@@ -87,6 +89,7 @@ const stmts = {
|
|||||||
mean_volume = NULL, whisper_job_id = NULL,
|
mean_volume = NULL, whisper_job_id = NULL,
|
||||||
output_dir = NULL, segments_json = NULL,
|
output_dir = NULL, segments_json = NULL,
|
||||||
retry_count = 0, next_retry_at = NULL,
|
retry_count = 0, next_retry_at = NULL,
|
||||||
|
transcript_source = NULL,
|
||||||
updated_at = datetime('now')
|
updated_at = datetime('now')
|
||||||
WHERE id = @id
|
WHERE id = @id
|
||||||
`),
|
`),
|
||||||
@@ -116,6 +119,7 @@ function rowToJob(row: Record<string, unknown>): Job {
|
|||||||
segmentsJson: row.segments_json as string | null,
|
segmentsJson: row.segments_json as string | null,
|
||||||
error: row.error as string | null,
|
error: row.error as string | null,
|
||||||
retryCount: row.retry_count as number | null,
|
retryCount: row.retry_count as number | null,
|
||||||
|
transcriptSource: row.transcript_source as 'captions' | 'whisper' | null,
|
||||||
nextRetryAt: row.next_retry_at as string | null,
|
nextRetryAt: row.next_retry_at as string | null,
|
||||||
createdAt: row.created_at as string,
|
createdAt: row.created_at as string,
|
||||||
updatedAt: row.updated_at as string
|
updatedAt: row.updated_at as string
|
||||||
@@ -152,7 +156,8 @@ export function updateJob(job: Partial<Job> & { id: string }): void {
|
|||||||
segmentsJson: merged.segmentsJson,
|
segmentsJson: merged.segmentsJson,
|
||||||
error: merged.error,
|
error: merged.error,
|
||||||
retryCount: merged.retryCount ?? null,
|
retryCount: merged.retryCount ?? null,
|
||||||
nextRetryAt: merged.nextRetryAt ?? null
|
nextRetryAt: merged.nextRetryAt ?? null,
|
||||||
|
transcriptSource: merged.transcriptSource ?? null
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ export interface Job {
|
|||||||
error: string | null;
|
error: string | null;
|
||||||
retryCount: number | null;
|
retryCount: number | null;
|
||||||
nextRetryAt: string | null;
|
nextRetryAt: string | null;
|
||||||
|
transcriptSource: 'captions' | 'whisper' | null;
|
||||||
createdAt: string;
|
createdAt: string;
|
||||||
updatedAt: string;
|
updatedAt: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ function makeJob(overrides: Partial<Job> = {}): Job {
|
|||||||
error: 'transcription timeout',
|
error: 'transcription timeout',
|
||||||
retryCount: 0,
|
retryCount: 0,
|
||||||
nextRetryAt: null,
|
nextRetryAt: null,
|
||||||
|
transcriptSource: null,
|
||||||
createdAt: new Date().toISOString(),
|
createdAt: new Date().toISOString(),
|
||||||
updatedAt: new Date().toISOString(),
|
updatedAt: new Date().toISOString(),
|
||||||
...overrides
|
...overrides
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ function makeJob(overrides: Partial<Job> = {}): Job {
|
|||||||
meanVolume: null,
|
meanVolume: null,
|
||||||
retryCount: null,
|
retryCount: null,
|
||||||
nextRetryAt: null,
|
nextRetryAt: null,
|
||||||
|
transcriptSource: null,
|
||||||
...overrides,
|
...overrides,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ function makeJob(overrides: Partial<Job> = {}): Job {
|
|||||||
error: null,
|
error: null,
|
||||||
retryCount: null,
|
retryCount: null,
|
||||||
nextRetryAt: null,
|
nextRetryAt: null,
|
||||||
|
transcriptSource: null,
|
||||||
createdAt: new Date().toISOString(),
|
createdAt: new Date().toISOString(),
|
||||||
updatedAt: new Date().toISOString(),
|
updatedAt: new Date().toISOString(),
|
||||||
...overrides
|
...overrides
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ function makeJob(overrides: Partial<Job> = {}): Job {
|
|||||||
error: 'Something failed',
|
error: 'Something failed',
|
||||||
retryCount: 0,
|
retryCount: 0,
|
||||||
nextRetryAt: null,
|
nextRetryAt: null,
|
||||||
|
transcriptSource: null,
|
||||||
createdAt: new Date().toISOString(),
|
createdAt: new Date().toISOString(),
|
||||||
updatedAt: new Date().toISOString(),
|
updatedAt: new Date().toISOString(),
|
||||||
...overrides
|
...overrides
|
||||||
|
|||||||
Reference in New Issue
Block a user