diff --git a/db/schema.sql b/db/schema.sql index 9d26517..54a1766 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -12,6 +12,7 @@ CREATE TABLE IF NOT EXISTS conversion_jobs ( output_mime_type VARCHAR(128) NULL, input_size_bytes INT UNSIGNED NOT NULL, output_size_bytes INT UNSIGNED NULL, + quality SMALLINT UNSIGNED NULL, conversion_duration_seconds DECIMAL(10,3) NULL, error_message VARCHAR(255) NULL, error_log TEXT NULL, diff --git a/src/jobs/jobRepository.js b/src/jobs/jobRepository.js index 07b34ca..e880532 100644 --- a/src/jobs/jobRepository.js +++ b/src/jobs/jobRepository.js @@ -14,6 +14,7 @@ function toCamelJob(row) { outputMimeType: row.output_mime_type, inputSizeBytes: row.input_size_bytes, outputSizeBytes: row.output_size_bytes, + quality: row.quality, conversionDurationSeconds: row.conversion_duration_seconds, errorMessage: row.error_message, createdAt: row.created_at, @@ -26,8 +27,8 @@ function toCamelJob(row) { export async function createJob(pool, job) { await pool.query( `INSERT INTO conversion_jobs - (uuid, status, family, source_format, target_format, original_filename, input_path, input_mime_type, input_size_bytes, expires_at) - VALUES (?, 'pending', ?, ?, ?, ?, ?, ?, ?, ?)`, + (uuid, status, family, source_format, target_format, original_filename, input_path, input_mime_type, input_size_bytes, expires_at, quality) + VALUES (?, 'pending', ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ job.uuid, job.family, @@ -38,6 +39,7 @@ export async function createJob(pool, job) { job.inputMimeType, job.inputSizeBytes, job.expiresAt, + job.quality ?? null, ] ); } @@ -46,7 +48,7 @@ export async function getJobByUuid(pool, uuid) { const rows = await pool.query( `SELECT id, uuid, status, family, source_format, target_format, original_filename, input_path, output_path, input_mime_type, output_mime_type, - input_size_bytes, output_size_bytes, conversion_duration_seconds, + input_size_bytes, output_size_bytes, quality, conversion_duration_seconds, error_message, created_at, updated_at, expires_at, cleaned_at FROM conversion_jobs WHERE uuid = ?`, [uuid] @@ -83,7 +85,7 @@ export async function findPendingJobs(pool, limit) { const rows = await pool.query( `SELECT id, uuid, status, family, source_format, target_format, original_filename, input_path, output_path, input_mime_type, output_mime_type, - input_size_bytes, output_size_bytes, conversion_duration_seconds, + input_size_bytes, output_size_bytes, quality, conversion_duration_seconds, error_message, created_at, updated_at, expires_at, cleaned_at FROM conversion_jobs WHERE status = 'pending' ORDER BY created_at ASC LIMIT ?`, [limit] @@ -95,7 +97,7 @@ export async function findExpiredJobs(pool) { const rows = await pool.query( `SELECT id, uuid, status, family, source_format, target_format, original_filename, input_path, output_path, input_mime_type, output_mime_type, - input_size_bytes, output_size_bytes, conversion_duration_seconds, + input_size_bytes, output_size_bytes, quality, conversion_duration_seconds, error_message, created_at, updated_at, expires_at, cleaned_at FROM conversion_jobs WHERE expires_at < NOW() AND cleaned_at IS NULL` ); diff --git a/test/jobs/jobRepository.test.js b/test/jobs/jobRepository.test.js index 2373908..8affa55 100644 --- a/test/jobs/jobRepository.test.js +++ b/test/jobs/jobRepository.test.js @@ -62,6 +62,14 @@ describe('jobRepository', () => { expect(job.conversionDurationSeconds).toBeNull(); expect(job.errorMessage).toBeNull(); expect(job.cleanedAt).toBeNull(); + expect(job.quality).toBeNull(); + }); + + it('stores and retrieves a numeric quality value', async () => { + await createJob(pool, baseJob({ uuid: '66666666-6666-4666-8666-666666666666', quality: 82 })); + + const job = await getJobByUuid(pool, '66666666-6666-4666-8666-666666666666'); + expect(job.quality).toBe(82); }); it('returns null for an unknown uuid', async () => {