feat(cli): add support for running import and API jobs
This commit is contained in:
parent
75df36acc3
commit
8a12e83b13
8 changed files with 272 additions and 65 deletions
|
@ -2,6 +2,7 @@ import fs from 'fs-extra';
|
|||
import path from 'path';
|
||||
import inquirer from 'inquirer';
|
||||
import { fileURLToPath } from 'url';
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const CACHE_DIR = path.resolve(__dirname, '..', '.cache');
|
||||
|
@ -9,15 +10,39 @@ const CONFIG_PATH = path.join(CACHE_DIR, 'config.json');
|
|||
const MEDIA_TYPES = ['movie', 'show'];
|
||||
const ASSET_TYPES = ['poster', 'backdrop'];
|
||||
|
||||
export const initConfig = async () => {
|
||||
const config = {};
|
||||
const { storageDir } = await inquirer.prompt([{
|
||||
name: 'storageDir',
|
||||
message: 'Where is your storage root directory?',
|
||||
validate: fs.pathExists
|
||||
}]);
|
||||
dotenv.config({ path: path.resolve(__dirname, '..', '..', '.env') });
|
||||
|
||||
config.storageDir = storageDir;
|
||||
export const initConfig = async () => {
|
||||
const existingConfig = await fs.pathExists(CONFIG_PATH)
|
||||
? await fs.readJson(CONFIG_PATH)
|
||||
: {};
|
||||
|
||||
const config = { ...existingConfig };
|
||||
|
||||
if (config.storageDir) {
|
||||
const { updateStorage } = await inquirer.prompt([{
|
||||
type: 'confirm',
|
||||
name: 'updateStorage',
|
||||
message: `Storage directory is already set to "${config.storageDir}". Do you want to update it?`,
|
||||
default: false
|
||||
}]);
|
||||
|
||||
if (updateStorage) {
|
||||
const { storageDir } = await inquirer.prompt([{
|
||||
name: 'storageDir',
|
||||
message: 'Where is your storage root directory?',
|
||||
validate: fs.pathExists
|
||||
}]);
|
||||
config.storageDir = storageDir;
|
||||
}
|
||||
} else {
|
||||
const { storageDir } = await inquirer.prompt([{
|
||||
name: 'storageDir',
|
||||
message: 'Where is your storage root directory?',
|
||||
validate: fs.pathExists
|
||||
}]);
|
||||
config.storageDir = storageDir;
|
||||
}
|
||||
|
||||
const { customize } = await inquirer.prompt([{
|
||||
type: 'confirm',
|
||||
|
@ -43,7 +68,6 @@ export const initConfig = async () => {
|
|||
message: `Subpath for ${mediaType}/${assetType} (relative to storage root):`,
|
||||
default: defaultPath
|
||||
}]);
|
||||
|
||||
subpath = response.subpath;
|
||||
}
|
||||
|
||||
|
@ -62,6 +86,7 @@ export const initConfig = async () => {
|
|||
])
|
||||
).artistPath
|
||||
: 'Media assets/artists';
|
||||
|
||||
config.albumPath = customize
|
||||
? (
|
||||
await inquirer.prompt([
|
||||
|
@ -73,23 +98,26 @@ export const initConfig = async () => {
|
|||
])
|
||||
).albumPath
|
||||
: 'Media assets/albums';
|
||||
|
||||
config.bookPath = customize
|
||||
? (
|
||||
await inquirer.prompt([
|
||||
{
|
||||
name: 'bookPath',
|
||||
message: 'Subpath for book images (relative to storage root):',
|
||||
default: 'Media assets/books'
|
||||
}
|
||||
])
|
||||
).bookPath
|
||||
: 'Media assets/books';
|
||||
? (
|
||||
await inquirer.prompt([
|
||||
{
|
||||
name: 'bookPath',
|
||||
message: 'Subpath for book images (relative to storage root):',
|
||||
default: 'Media assets/books'
|
||||
}
|
||||
])
|
||||
).bookPath
|
||||
: 'Media assets/books';
|
||||
|
||||
config.globals = await fetchGlobals();
|
||||
|
||||
await fs.ensureDir(CACHE_DIR);
|
||||
await fs.writeJson(CONFIG_PATH, config, { spaces: 2 });
|
||||
|
||||
console.log(`✅ Config saved to ${CONFIG_PATH}`);
|
||||
}
|
||||
};
|
||||
|
||||
export const loadConfig = async () => {
|
||||
if (!await fs.pathExists(CONFIG_PATH)) {
|
||||
|
@ -99,3 +127,31 @@ export const loadConfig = async () => {
|
|||
|
||||
return await fs.readJson(CONFIG_PATH);
|
||||
}
|
||||
|
||||
const fetchGlobals = async () => {
|
||||
const POSTGREST_URL = process.env.POSTGREST_URL;
|
||||
const POSTGREST_API_KEY = process.env.POSTGREST_API_KEY;
|
||||
|
||||
if (!POSTGREST_URL || !POSTGREST_API_KEY) {
|
||||
console.warn('⚠️ Missing POSTGREST_URL or POSTGREST_API_KEY in env, skipping globals fetch.');
|
||||
return {};
|
||||
}
|
||||
|
||||
try {
|
||||
const res = await fetch(`${POSTGREST_URL}/optimized_globals?select=*`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${POSTGREST_API_KEY}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!res.ok) throw new Error(await res.text());
|
||||
|
||||
const data = await res.json();
|
||||
return data[0] || {};
|
||||
} catch (err) {
|
||||
console.error('❌ Error fetching globals:', err.message);
|
||||
return {};
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue