60 lines
2.3 KiB
TypeScript
60 lines
2.3 KiB
TypeScript
import { App } from "../../../core/controllers/app";
|
|
import { CallbackStrategyWithEmpty } from "../../../core/controllers/http_controller";
|
|
import { Result } from "../../../core/helpers/result";
|
|
import { IPipeline } from "../../../core/models/process_model";
|
|
import { ReadByIdDataBaseModelUseCase } from "../../../core/usecases/read_by_id_database_model_usecase";
|
|
import { PipelineValidationModel } from "../../pipelines/models/pipeline_validation_model";
|
|
import {
|
|
IProjectInstanceModel,
|
|
ProjectInstanceDbModel,
|
|
} from "../../project_instance/models/project_instance_database_model";
|
|
import { pipelineRealTimeService } from "../realtime_presentation";
|
|
import { PipelineStatusUseCase } from "./pipeline_status_usecase";
|
|
|
|
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;
|
|
};
|
|
|
|
export class RunInstancePipelineUseCase extends CallbackStrategyWithEmpty {
|
|
async call(): Promise<Result<any, string>> {
|
|
return (await new PipelineStatusUseCase().call()).map(async (activePipelineModel) => {
|
|
if (activePipelineModel.pipelineIsRunning) {
|
|
return Result.error("pipeline is running");
|
|
}
|
|
const readByIdDataBaseModelUseCase = await new ReadByIdDataBaseModelUseCase<IProjectInstanceModel>(
|
|
ProjectInstanceDbModel
|
|
).call(activePipelineModel.projectId);
|
|
|
|
if (readByIdDataBaseModelUseCase.isFailure()) {
|
|
return readByIdDataBaseModelUseCase.forward();
|
|
}
|
|
const projectModel = readByIdDataBaseModelUseCase.value;
|
|
const resultMapper = projectModel.project.pipelines.map((el) => mongoPipelineModelMapper(el));
|
|
|
|
pipelineRealTimeService.setPipelineDependency(
|
|
resultMapper,
|
|
App.staticFilesStoreDir() + projectModel.rootDir + "/",
|
|
projectModel._id,
|
|
projectModel.rootDir
|
|
);
|
|
|
|
pipelineRealTimeService.runPipeline();
|
|
return Result.ok("ok");
|
|
});
|
|
}
|
|
}
|