feat: add MariaDB schema and connection pool
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
CREATE TABLE IF NOT EXISTS conversion_jobs (
|
||||
id CHAR(36) NOT NULL PRIMARY KEY,
|
||||
status ENUM('pending', 'processing', 'done', 'failed') NOT NULL DEFAULT 'pending',
|
||||
family VARCHAR(32) NOT NULL,
|
||||
source_format VARCHAR(16) NOT NULL,
|
||||
target_format VARCHAR(16) NOT NULL,
|
||||
original_filename VARCHAR(255) NOT NULL,
|
||||
input_path VARCHAR(255) NOT NULL,
|
||||
output_path VARCHAR(255) NULL,
|
||||
input_mime_type VARCHAR(128) NOT NULL,
|
||||
output_mime_type VARCHAR(128) NULL,
|
||||
error_message VARCHAR(255) NULL,
|
||||
error_log TEXT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
expires_at DATETIME NOT NULL,
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_expires_at (expires_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@@ -0,0 +1,23 @@
|
||||
import mariadb from 'mariadb';
|
||||
|
||||
let pool;
|
||||
|
||||
export function getPool(config) {
|
||||
if (!pool) {
|
||||
pool = mariadb.createPool({
|
||||
host: config.db.host,
|
||||
user: config.db.user,
|
||||
password: config.db.password,
|
||||
database: config.db.database,
|
||||
connectionLimit: 10,
|
||||
});
|
||||
}
|
||||
return pool;
|
||||
}
|
||||
|
||||
export async function closePool() {
|
||||
if (pool) {
|
||||
await pool.end();
|
||||
pool = undefined;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import { describe, it, expect, afterAll } from 'vitest';
|
||||
import { getPool, closePool } from '../src/db.js';
|
||||
import { loadConfig } from '../src/config.js';
|
||||
|
||||
describe('getPool', () => {
|
||||
afterAll(async () => {
|
||||
await closePool();
|
||||
});
|
||||
|
||||
it('returns a working pool that can run a query', async () => {
|
||||
const config = loadConfig();
|
||||
const pool = getPool(config);
|
||||
|
||||
const rows = await pool.query('SELECT 1 AS value');
|
||||
|
||||
expect(Number(rows[0].value)).toBe(1);
|
||||
});
|
||||
|
||||
it('returns the same pool instance on repeated calls', () => {
|
||||
const config = loadConfig();
|
||||
const poolA = getPool(config);
|
||||
const poolB = getPool(config);
|
||||
|
||||
expect(poolA).toBe(poolB);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user