29 lines
1 KiB
TypeScript
29 lines
1 KiB
TypeScript
import { ProjectsService } from '../projects/projects.service.js';
|
|
import { providerFactory } from '../../core/provider.factory.js';
|
|
import { SecretsService } from '../secrets/secrets.service.js';
|
|
import { Project } from '../../core/types.js';
|
|
|
|
export class ProvisioningService {
|
|
constructor(
|
|
private readonly projectsService: ProjectsService,
|
|
private readonly secretsService: SecretsService,
|
|
) {}
|
|
|
|
async provisionProject(projectId: string): Promise<{ project: Project }> {
|
|
const project = await this.projectsService.getProject(projectId);
|
|
if (!project) {
|
|
throw new Error('Project not found');
|
|
}
|
|
|
|
const provider = providerFactory.create(project.provider);
|
|
const secrets = await this.secretsService.getProviderSecrets(project.provider, project.tenantId);
|
|
|
|
const created = await provider.createProject(project.name, secrets);
|
|
const updated = await this.projectsService.updateProject(projectId, {
|
|
status: 'provisioned',
|
|
externalId: created.externalId,
|
|
});
|
|
|
|
return { project: updated };
|
|
}
|
|
}
|