formatting code upload project instance to files

This commit is contained in:
IDONTSUDO 2023-11-28 18:34:41 +03:00
parent ce4c98ff13
commit a0b4f00f47
65 changed files with 399 additions and 748 deletions

View file

@ -1,10 +1,6 @@
import { IsMongoId, IsOptional, ValidateNested } from "class-validator";
import { Schema, model } from "mongoose";
import {
IPipeline,
IProcess,
StackGenerateType,
} from "../../core/model/process_model";
import { IPipeline, IProcess, StackGenerateType } from "../../core/model/process_model";
import { TriggerModel, triggerSchema } from "../triggers/trigger_model";
import { ProcessModel, schemaProcess } from "../process/process_model";
import { Type } from "class-transformer";

View file

@ -1,10 +1,7 @@
import { CrudController } from "../../core/controllers/crud_controller";
import { PipelineDBModel, PipelineValidationModel } from "./pipeline_model";
export class PipelinePresentation extends CrudController<
PipelineValidationModel,
typeof PipelineDBModel
> {
export class PipelinePresentation extends CrudController<PipelineValidationModel, typeof PipelineDBModel> {
constructor() {
super({
url: "pipeline",

View file

@ -1,10 +1,4 @@
import {
IsString,
IsOptional,
IsEnum,
IsNumber,
IsBoolean,
} from "class-validator";
import { IsString, IsOptional, IsEnum, IsNumber, IsBoolean } from "class-validator";
import { Schema, model } from "mongoose";
import { IProcess, IssueType } from "../../core/model/process_model";
import { EXEC_TYPE } from "../../core/model/exec_error_model";
@ -48,7 +42,7 @@ export class ProcessModel implements IProcess {
@IsString()
public description: string;
@IsString()
public command: string;

View file

@ -1,10 +1,7 @@
import { CrudController } from "../../core/controllers/crud_controller";
import { ProcessDBModel, ProcessModel } from "./process_model";
export class ProcessPresentation extends CrudController<
ProcessModel,
typeof ProcessDBModel
> {
export class ProcessPresentation extends CrudController<ProcessModel, typeof ProcessDBModel> {
constructor() {
super({
url: "process",

View file

@ -2,29 +2,20 @@ import { App } from "../../core/controllers/app";
import { Result } from "../../core/helper/result";
import { CreateDataBaseModelUseCase } from "../../core/usecases/create_database_model_usecase";
import { CreateFolderUseCase } from "../../core/usecases/crete_folder_usecase";
import {
ProjectInstanceDbModel,
ProjectInstanceValidationModel,
} from "./project_instance_model";
import { ProjectInstanceDbModel, ProjectInstanceValidationModel } from "./project_instance_model";
import { v4 as uuidv4 } from "uuid";
export class CreateNewProjectInstanceScenario {
call = async (
model: ProjectInstanceValidationModel
): Promise<Result<Error, any>> => {
call = async (model: ProjectInstanceValidationModel): Promise<Result<Error, any>> => {
try {
const folderName = uuidv4() + "/";
const createFolderUseCase = await new CreateFolderUseCase().call(
App.staticFilesStoreDir() + folderName
);
const createFolderUseCase = await new CreateFolderUseCase().call(App.staticFilesStoreDir() + folderName);
if (createFolderUseCase.isFailure()) {
return createFolderUseCase.forward();
}
model.rootDir = folderName;
const createDataBaseModelUseCase = await new CreateDataBaseModelUseCase(
ProjectInstanceDbModel
).call(model);
const createDataBaseModelUseCase = await new CreateDataBaseModelUseCase(ProjectInstanceDbModel).call(model);
if (createDataBaseModelUseCase.isFailure()) {
return createDataBaseModelUseCase.forward();

View file

@ -3,6 +3,7 @@ import { IProjectModel, projectSchema } from "../projects/projects_model";
import { IsMongoId, IsOptional, IsString } from "class-validator";
export interface IProjectInstanceModel {
_id: string;
project: IProjectModel;
description: string;
rootDir: string;
@ -30,10 +31,7 @@ export const ProjectInstanceSchema = new Schema({
export const schemaProjectInstance = "instance_project";
export const ProjectInstanceDbModel = model<IProjectInstanceModel>(
schemaProjectInstance,
ProjectInstanceSchema
);
export const ProjectInstanceDbModel = model<IProjectInstanceModel>(schemaProjectInstance, ProjectInstanceSchema);
export class ProjectInstanceValidationModel {
@IsMongoId()

View file

@ -1,15 +1,7 @@
import { CrudController } from "../../core/controllers/crud_controller";
import {
CallbackStrategyWithEmpty,
ResponseBase,
} from "../../core/controllers/http_controller";
import { Result } from "../../core/helper/result";
import { CreateNewProjectInstanceScenario } from "./create_new_project_scenario";
import {
ProjectInstanceDbModel,
ProjectInstanceValidationModel,
} from "./project_instance_model";
import { UploadCadFileToProjectUseCase } from "./upload_file_to_project_usecase";
import { ProjectInstanceDbModel, ProjectInstanceValidationModel } from "./project_instance_model";
import { UploadCadFileToProjectScenario } from "./upload_file_to_to_project_scenario";
export class ProjectInstancePresentation extends CrudController<
ProjectInstanceValidationModel,
@ -27,14 +19,8 @@ export class ProjectInstancePresentation extends CrudController<
{
method: "post",
subUrl: "upload",
fn: new TestUseCase(),
fn: new UploadCadFileToProjectScenario(),
},
];
}
}
class TestUseCase extends CallbackStrategyWithEmpty {
async call(): ResponseBase {
return Result.ok(200);
}
}

View file

@ -1,13 +0,0 @@
import {
CallbackStrategyWithFileUpload,
ResponseBase,
} from "../../core/controllers/http_controller";
import { Result } from "../../core/helper/result";
export class UploadCadFileToProjectUseCase extends CallbackStrategyWithFileUpload {
checkingFileExpression: RegExp = RegExp('.FCStd')
async call(file: File): ResponseBase {
return Result.ok("200");
}
}

View file

@ -0,0 +1,28 @@
import { App } from "../../core/controllers/app";
import { CallbackStrategyWithFileUpload, ResponseBase } from "../../core/controllers/http_controller";
import { Result } from "../../core/helper/result";
import { CreateFileUseCase } from "../../core/usecases/create_file_usecase";
import { PipelineStatusUseCase } from "../realtime/usecases/pipeline_status_usecase";
export interface IFile extends File {
data: Buffer;
}
export class UploadCadFileToProjectScenario extends CallbackStrategyWithFileUpload {
checkingFileExpression: RegExp = RegExp(".pages");
async call(file: IFile): ResponseBase {
const pipelineStatusUseCase = await new PipelineStatusUseCase().call();
if (pipelineStatusUseCase.isFailure()) {
return pipelineStatusUseCase.forward();
}
const projectFolder = pipelineStatusUseCase.value.path;
// TODO:
const createFileUseCase = await new CreateFileUseCase().call(projectFolder + file.name, file.data);
if (createFileUseCase.isFailure()) {
return createFileUseCase.forward();
}
return Result.ok("ok");
}
}

View file

@ -7,7 +7,7 @@ export interface IProjectModel {
pipelines: [PipelineValidationModel];
rootDir: string;
description: string;
isActive:boolean;
isActive: boolean;
}
export const ProjectSchema = new Schema({
@ -35,5 +35,4 @@ export class ProjectValidationModel {
public pipelines: [string];
@IsString()
public description: string;
}

View file

@ -1,10 +1,7 @@
import { CrudController } from "../../core/controllers/crud_controller";
import { ProjectDBModel, ProjectValidationModel } from "./projects_model";
export class ProjectsPresentation extends CrudController<
ProjectValidationModel,
typeof ProjectDBModel
> {
export class ProjectsPresentation extends CrudController<ProjectValidationModel, typeof ProjectDBModel> {
constructor() {
super({
url: "project",

View file

@ -3,7 +3,7 @@ import { CoreHttpController } from "../../core/controllers/http_controller";
import { PipelineRealTimeService } from "../../core/services/pipeline_real_time_service";
import { RunInstancePipelineUseCase } from "./usecases/run_instance_pipeline_usecase";
import { PipelineStatusUseCase } from "./usecases/pipeline_status_usecase";
export const pipelineRealTimeService = new PipelineRealTimeService();
export class RealTimeValidationModel {
@ -11,7 +11,6 @@ export class RealTimeValidationModel {
public id: string;
}
export class RealTimePresentation extends CoreHttpController<RealTimeValidationModel> {
constructor() {
super({
@ -21,6 +20,5 @@ export class RealTimePresentation extends CoreHttpController<RealTimeValidationM
});
super.post(new RunInstancePipelineUseCase().call);
super.get(new PipelineStatusUseCase().call);
}
}

View file

@ -5,7 +5,13 @@ import { pipelineRealTimeService } from "../realtime_presentation";
export class PipelineStatusUseCase {
async call(): Promise<Result<Error, ActivePipeline>> {
try {
return Result.ok(pipelineRealTimeService.status);
const status = pipelineRealTimeService.status;
if (status.projectUUID !== null) {
return Result.ok(status);
}
if (status.projectUUID === null) {
return Result.error(new Error("pipelineRealTimeService does not have an active project instance"));
}
} catch (error) {
return Result.error(error as Error);
}

View file

@ -2,41 +2,32 @@ import { App } from "../../../core/controllers/app";
import { Result } from "../../../core/helper/result";
import { ReadByIdDataBaseModelUseCase } from "../../../core/usecases/read_by_id_database_model_usecase";
import { UpdateDataBaseModelUseCase } from "../../../core/usecases/update_database_model_usecase";
import {
IProjectInstanceModel,
ProjectInstanceDbModel,
} from "../../project_instance/project_instance_model";
import {
RealTimeValidationModel,
pipelineRealTimeService,
} from "../realtime_presentation";
import { IProjectInstanceModel, ProjectInstanceDbModel } from "../../project_instance/project_instance_model";
import { RealTimeValidationModel, pipelineRealTimeService } from "../realtime_presentation";
export class RunInstancePipelineUseCase {
async call(model: RealTimeValidationModel): Promise<Result<Error, any>> {
const { id } = model;
const readByIdDataBaseModelUseCase =
await new ReadByIdDataBaseModelUseCase<IProjectInstanceModel>(
ProjectInstanceDbModel
).call(id);
const readByIdDataBaseModelUseCase = await new ReadByIdDataBaseModelUseCase<IProjectInstanceModel>(
ProjectInstanceDbModel
).call(id);
if (readByIdDataBaseModelUseCase.isFailure()) {
return readByIdDataBaseModelUseCase.forward();
}
const projectModel = readByIdDataBaseModelUseCase.value.project;
const projectModel = readByIdDataBaseModelUseCase.value;
projectModel.isActive = true;
const updateDataBaseModelUseCase = await new UpdateDataBaseModelUseCase<
IProjectInstanceModel,
any
>(ProjectInstanceDbModel).call(projectModel);
const updateDataBaseModelUseCase = await new UpdateDataBaseModelUseCase<IProjectInstanceModel, any>(
ProjectInstanceDbModel
).call(projectModel);
if (updateDataBaseModelUseCase.isFailure()) {
return updateDataBaseModelUseCase.forward();
}
pipelineRealTimeService.setPipelineDependency(
projectModel.pipelines,
projectModel.project.pipelines,
App.staticFilesStoreDir() + projectModel.rootDir + "/",
projectModel._id
);

View file

@ -24,10 +24,7 @@ export const TriggerSchema = new Schema({
export const triggerSchema = "Trigger";
export const TriggerDBModel = model<ITriggerModel>(
triggerSchema,
TriggerSchema
);
export const TriggerDBModel = model<ITriggerModel>(triggerSchema, TriggerSchema);
export enum TriggerType {
PROCESS = "PROCESS",

View file

@ -1,10 +1,7 @@
import { TriggerDBModel, TriggerModel } from "./trigger_model";
import { CrudController } from "../../core/controllers/crud_controller";
export class TriggerPresentation extends CrudController<
TriggerModel,
typeof TriggerDBModel
> {
export class TriggerPresentation extends CrudController<TriggerModel, typeof TriggerDBModel> {
constructor() {
super({
url: "trigger",