webstudio/server/src/features/realtime/domain/run_instance_pipeline_usecase.ts

58 lines
2 KiB
TypeScript
Raw Normal View History

2023-11-16 00:40:35 +03:00
import { App } from "../../../core/controllers/app";
2023-12-03 16:20:52 +03:00
import { Result } from "../../../core/helpers/result";
2023-12-28 17:18:12 +03:00
import { IPipeline } from "../../../core/models/process_model";
2023-11-14 20:44:06 +03:00
import { ReadByIdDataBaseModelUseCase } from "../../../core/usecases/read_by_id_database_model_usecase";
2023-12-28 17:18:12 +03:00
import { PipelineValidationModel } from "../../pipelines/models/pipeline_validation_model";
2023-12-03 16:16:08 +03:00
import {
IProjectInstanceModel,
ProjectInstanceDbModel,
} from "../../project_instance/models/project_instance_database_model";
2023-12-28 17:18:12 +03:00
import { pipelineRealTimeService } from "../realtime_presentation";
import { PipelineStatusUseCase } from "./pipeline_status_usecase";
2023-11-14 20:44:06 +03:00
2023-12-28 17:18:12 +03:00
const mongoPipelineModelMapper = (el: PipelineValidationModel): IPipeline => {
const mapObj: IPipeline = {
process: {
type: el.process.type,
command: el.process.command,
isGenerating: Boolean(el.process.isGenerating),
isLocaleCode: Boolean(el.process.isLocaleCode),
issueType: el.process.issueType,
},
trigger: {
type: el.trigger.type,
value: el.trigger.value.map((el) => String(el)),
},
env: null,
stackGenerateType: el.stackGenerateType,
};
return mapObj;
};
2023-11-14 20:44:06 +03:00
export class RunInstancePipelineUseCase {
2023-12-28 17:18:12 +03:00
async call(): Promise<Result<Error, any>> {
const r = await new PipelineStatusUseCase().call();
if (r.isFailure()) {
return r;
}
const readByIdDataBaseModelUseCase = await new ReadByIdDataBaseModelUseCase<IProjectInstanceModel>(
ProjectInstanceDbModel
2023-12-28 17:18:12 +03:00
).call(r.value.projectUUID);
2023-11-20 00:48:40 +03:00
2023-11-14 20:44:06 +03:00
if (readByIdDataBaseModelUseCase.isFailure()) {
return readByIdDataBaseModelUseCase.forward();
}
const projectModel = readByIdDataBaseModelUseCase.value;
2023-12-28 17:18:12 +03:00
const resultMapper = projectModel.project.pipelines.map((el) => mongoPipelineModelMapper(el));
2023-11-20 00:48:40 +03:00
pipelineRealTimeService.setPipelineDependency(
2023-12-28 17:18:12 +03:00
resultMapper,
2023-11-16 00:40:35 +03:00
App.staticFilesStoreDir() + projectModel.rootDir + "/",
2023-11-14 20:44:06 +03:00
projectModel._id
);
2023-12-28 17:18:12 +03:00
2023-11-20 00:48:40 +03:00
pipelineRealTimeService.runPipeline();
2023-11-16 00:40:35 +03:00
2023-11-14 20:44:06 +03:00
return Result.ok({ status: "ok" });
}
}