55 lines
1.5 KiB
TypeScript
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'
|
|
});
|
|
};
|