Files
dockhand/src/routes/api/stacks/default-path/+server.ts
T
2026-01-11 09:01:42 +01:00

55 lines
1.5 KiB
TypeScript

import { json } from '@sveltejs/kit';
import { join } from 'path';
import { getStackDir } from '$lib/server/stacks';
import { getEnvironment } from '$lib/server/db';
import type { RequestHandler } from './$types';
/**
* Get the default path for a new stack
* Used by the UI to show where files will be created
*
* Query params:
* - name: Stack name (required)
* - env: Environment ID (optional)
* - location: Custom base location path (optional)
*
* If location is provided, path will be: {location}/{envName}/{stackName}/
* Otherwise uses Dockhand's default: $DATA_DIR/stacks/{envName}/{stackName}/
*/
export const GET: RequestHandler = async ({ url }) => {
const stackName = url.searchParams.get('name');
const envId = url.searchParams.get('env');
const location = url.searchParams.get('location');
const envIdNum = envId ? parseInt(envId) : undefined;
if (!stackName) {
return json({ error: 'Stack name is required' }, { status: 400 });
}
let stackDir: string;
if (location) {
// Custom location: {location}/{envName}/{stackName}/
if (envIdNum) {
const env = await getEnvironment(envIdNum);
if (env) {
stackDir = join(location, env.name, stackName);
} else {
stackDir = join(location, stackName);
}
} else {
stackDir = join(location, stackName);
}
} else {
// Dockhand default location
stackDir = await getStackDir(stackName, envIdNum);
}
return json({
stackDir,
composePath: `${stackDir}/docker-compose.yml`,
envPath: `${stackDir}/.env`,
source: location ? 'custom' : 'default'
});
};