import { ECommon_Model_Workflow_Node_Status } from "../../../common/model/workflow_node"; import * as workflowApi from "../../../common/routes/workflow"; import { Err } from "../../../common/status/error"; import { DComponent } from "../../common/decorate/component"; import { DHttpApi, DHttpController, DHttpReqParam, DHttpReqParamRequired } from "../../common/http/http"; import WorkflowService, { WorkflowActionService } from "../service/workflow"; import { WorkflowNodeService, WorkflowSolutionService } from './../service/workflow'; @DComponent @DHttpController(workflowApi) class WorkflowController { @DHttpApi(workflowApi.routes.list) async list(): Promise { let ret = await WorkflowService.list() return ret; } @DHttpApi(workflowApi.routes.info) async info(@DHttpReqParamRequired("workflowId") workflowId: string): Promise { let ret = await WorkflowService.getItemById(workflowId) if (!ret) { throw Err.Project.Workflow.workflowNotFound } let obj = await ret.info() return obj; } @DHttpApi(workflowApi.routes.create) async create(@DHttpReqParamRequired("name") name: string, @DHttpReqParam("description") description: string): Promise { let obj = new WorkflowService() obj.assignItem({ name, description }) let ret = await obj.create() return ret; } @DHttpApi(workflowApi.routes.edit) async update(@DHttpReqParamRequired("workflowId") workflowId: string, @DHttpReqParam("name") name: string, @DHttpReqParam("description") description: string): Promise { let obj = await WorkflowService.getItemById(workflowId) if (!obj) { throw Err.Project.Workflow.workflowNotFound } if (obj.getItem().reserved) { throw Err.Project.Workflow.workflowForbidden } obj.assignItem({ id: workflowId, name, description }, true) let ret = await obj.update() return ret; } @DHttpApi(workflowApi.routes.delete) async delete(@DHttpReqParamRequired("workflowId") workflowId: string): Promise { let obj = await WorkflowService.getItemById(workflowId) if (!obj) { throw Err.Project.Workflow.workflowNotFound } if (obj.getItem().reserved) { throw Err.Project.Workflow.workflowForbidden } await obj.delete() return; } @DHttpApi(workflowApi.routes.addNode) async addNode(@DHttpReqParamRequired("workflowId") workflowId: string, @DHttpReqParamRequired("name") name: string, @DHttpReqParam("description") description: string, @DHttpReqParam("status") status: ECommon_Model_Workflow_Node_Status): Promise { let obj = new WorkflowNodeService; obj.assignItem({ workflow_id: workflowId, name: name, description: description, status: status }) let ret = await obj.create() return ret; } @DHttpApi(workflowApi.routes.editNode) async editNode(@DHttpReqParamRequired("workflowNodeId") workflowNodeId: string, @DHttpReqParam("name") name: string, @DHttpReqParam("description") description: string, @DHttpReqParam("status") status: ECommon_Model_Workflow_Node_Status): Promise { let obj = await WorkflowNodeService.getItemById(workflowNodeId); if (!obj) { throw Err.Project.Workflow.workflowNodeNotFound } if (obj.getItem().reserved) { throw Err.Project.Workflow.workflowNodeForbidden } obj.assignItem({ name: name, description: description, status: status }) let ret = await obj.update() return ret; } @DHttpApi(workflowApi.routes.deleteNode) async deleteNode(@DHttpReqParamRequired("workflowNodeId") workflowNodeId: string): Promise { let obj = await WorkflowNodeService.getItemById(workflowNodeId); if (!obj) { throw Err.Project.Workflow.workflowNodeNotFound } if (obj.getItem().reserved) { throw Err.Project.Workflow.workflowNodeForbidden } await obj.delete() return; } @DHttpApi(workflowApi.routes.addAction) async addAction(@DHttpReqParamRequired("workflowId") workflowId: string, @DHttpReqParamRequired("name") name: string, @DHttpReqParam("description") description: string, @DHttpReqParamRequired("sourceNodeId") sourceNodeId: string,@DHttpReqParamRequired("destNodeId") destNodeId: string): Promise { let obj = new WorkflowActionService; obj.assignItem({ workflow_id: workflowId, name: name, description: description, source_node_id:sourceNodeId, dest_node_id:destNodeId }) let ret = await obj.create() return ret; } @DHttpApi(workflowApi.routes.editAction) async editAction(@DHttpReqParamRequired("workflowActionId") workflowActionId: string, @DHttpReqParamRequired("name") name: string, @DHttpReqParam("description") description: string, @DHttpReqParam("sourceNodeId") sourceNodeId: string,@DHttpReqParam("destNodeId") destNodeId: string): Promise { let obj = await WorkflowActionService.getItemById(workflowActionId); if (!obj) { throw Err.Project.Workflow.workflowActionNotFound } if (obj.getItem().reserved) { throw Err.Project.Workflow.workflowActionForbidden } obj.assignItem({ name: name, description: description, source_node_id:sourceNodeId, dest_node_id:destNodeId }) let ret = await obj.update() return ret; } @DHttpApi(workflowApi.routes.deleteAction) async deleteAction(@DHttpReqParamRequired("workflowActionId") workflowActionId: string): Promise { let obj = await WorkflowActionService.getItemById(workflowActionId); if (!obj) { throw Err.Project.Workflow.workflowActionNotFound } if (obj.getItem().reserved) { throw Err.Project.Workflow.workflowActionForbidden } await obj.delete() return; } @DHttpApi(workflowApi.routes.solutionList) async solutionList():Promise { let ret=await WorkflowSolutionService.list() return ret; } @DHttpApi(workflowApi.routes.solutionInfo) async solutionInfo(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } let ret=await obj.info() return ret; } @DHttpApi(workflowApi.routes.solutionAssign) async solutionAssign(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string,@DHttpReqParamRequired("issueTypeId") issueTypeId:string,@DHttpReqParamRequired("workflowId") workflowId:string,@DHttpReqParamRequired("issueTypeSolutionId") issueTypeSolutionId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } await obj.assign(issueTypeId,workflowId,issueTypeSolutionId) return } @DHttpApi(workflowApi.routes.solutionCreate) async solutionCreate(@DHttpReqParamRequired("name") name:string,@DHttpReqParam("description") description:string):Promise { let obj=new WorkflowSolutionService() obj.assignItem({ name:name, description:description }) let ret=await obj.create(); return ret; } @DHttpApi(workflowApi.routes.solutionUpdate) async solutionUpdate(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string,@DHttpReqParam("name") name:string,@DHttpReqParam("description") description:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } obj.assignItem({ name, description }) let ret=await obj.update() return ret; } @DHttpApi(workflowApi.routes.solutionDelete) async solutionDelete(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } await obj.delete() return } @DHttpApi(workflowApi.routes.solutionBind) async solutionBind(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string,@DHttpReqParamRequired("issueTypeSolutionId") issueTypeSolutionId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } await obj.bindIssueTypeSolutions([issueTypeSolutionId]) return } @DHttpApi(workflowApi.routes.solutionUnBind) async solutionUnBind(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string,@DHttpReqParamRequired("issueTypeSolutionId") issueTypeSolutionId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } await obj.unbindIssueTypeSolutions([issueTypeSolutionId]) return } @DHttpApi(workflowApi.routes.solutionCopy) async solutionCopy(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } let ret=await obj.copy() return ret.getItem() } @DHttpApi(workflowApi.routes.solutionListWorkflow) async solutionListWorkflow(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } let ret=await obj.listWorkflow() return ret } @DHttpApi(workflowApi.routes.solutionAddWorkflow) async solutionAddWorkflow(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string,@DHttpReqParamRequired("workflowId") workflowId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } let workflow=await WorkflowService.getItemById(workflowId) if(workflow && workflow.getItem().reserved) { throw Err.Project.Workflow.workflowSolutionForbidden } await obj.addWorkflow(workflowId) return } @DHttpApi(workflowApi.routes.solutionRemoveWorkflow) async solutionRemoveWorkflow(@DHttpReqParamRequired("workflowSolutionId") workflowSolutionId:string,@DHttpReqParamRequired("workflowId") workflowId:string):Promise { let obj=await WorkflowSolutionService.getItemById(workflowSolutionId); if (!obj) { throw Err.Project.Workflow.workflowSolutionNotFound } let workflow=await WorkflowService.getItemById(workflowId) if(workflow && workflow.getItem().reserved) { throw Err.Project.Workflow.workflowSolutionForbidden } await obj.removeWorkflow(workflowId) return } }