import {ECommon_Model_Organization_Member_Type} from "../../../common/model/organization"; import {ECommon_User_Type} from "../../../common/model/user"; import projectApi from "../../../common/routes/project"; import {Err} from "../../../common/status/error"; import {DHttpApi, DHttpController, DHttpReqParam, DHttpReqParamRequired, DHttpUser} from "../../common/http/http"; import {ProjectService} from "../service/project"; import {IUserSession} from "../../user/types/config"; import rpcAuthApi from "../../auth/rpc/auth"; @DHttpController(projectApi) class ProjectController { @DHttpApi(projectApi.routes.basic) async projectInfo(@DHttpReqParamRequired("projectId") projectId:string):Promise{ let obj=await ProjectService.getItemById(projectId); if(!obj) { throw Err.Project.projectNotFound } return obj.getItem(); } @DHttpApi(projectApi.routes.create) async createProject(@DHttpReqParamRequired("name") name:string,@DHttpReqParamRequired("keyword") keyword:string,@DHttpReqParam("photo") photo:string,@DHttpReqParam("description") description:string,@DHttpUser user:IUserSession):Promise{ let obj=new ProjectService() obj.assignItem({ keyword:keyword, name:name, created_by:user.organizationInfo.organizationUserId, description:description, photo:photo, organization_id:user.organizationInfo.organizationId }) let ret=await obj.create() return ret } @DHttpApi(projectApi.routes.edit) async editProject(@DHttpReqParam("name") name:string,@DHttpReqParam("keyword") keyword:string,@DHttpReqParam("photo") photo:string,@DHttpReqParam("description") description:string,@DHttpReqParam("projectId") projectId:string):Promise{ let obj=await ProjectService.getItemById(projectId); if(!obj) { throw Err.Project.projectNotFound } let item=obj.getItem() item.name=name; item.keyword=keyword item.photo=photo item.description=description let ret=await obj.update() return ret; } @DHttpApi(projectApi.routes.remove) async removeProject(@DHttpReqParamRequired("projectId") projectId:string):Promise{ let obj=await ProjectService.getItemById(projectId); if(!obj) { throw Err.Project.projectNotFound } await obj.delete() return } @DHttpApi(projectApi.routes.listMember) async listMember(@DHttpReqParamRequired("projectId") projectId:string,@DHttpReqParamRequired("memberType") memberType:ECommon_Model_Organization_Member_Type,@DHttpReqParamRequired("page") page:number,@DHttpReqParamRequired("size") size:number,@DHttpReqParam("key") key:string):Promise{ let obj=await ProjectService.getItemById(projectId); if(!obj) { throw Err.Project.projectNotFound } let ret=await obj.listMember(memberType,page,size,key); return ret; } @DHttpApi(projectApi.routes.addMember) async addMember(@DHttpReqParamRequired("projectId") projectId:string, @DHttpReqParam("memberId") memberId:string, @DHttpReqParamRequired("type") type:ECommon_Model_Organization_Member_Type, @DHttpReqParamRequired("roleId") roleId:string):Promise{ let obj=await ProjectService.getItemById(projectId); if(!obj) { throw Err.Project.projectNotFound } let ret=await obj.addMember(memberId,type,roleId) return ret; } @DHttpApi(projectApi.routes.editMember) async editMember(@DHttpReqParamRequired("projectId") projectId:string,@DHttpReqParamRequired("memberId") memberId:string,@DHttpReqParam("type") type:ECommon_Model_Organization_Member_Type,@DHttpReqParamRequired("roleId") roleId:string):Promise{ let obj=await ProjectService.getItemById(projectId); if(!obj) { throw Err.Project.projectNotFound } let ret=await obj.editMember(memberId,type,roleId); return ret; } @DHttpApi(projectApi.routes.removeMember) async removeMember(@DHttpReqParamRequired("projectId") projectId:string,@DHttpReqParam("memberId") memberId:string,@DHttpReqParamRequired("type") type:ECommon_Model_Organization_Member_Type):Promise{ let obj=await ProjectService.getItemById(projectId); if(!obj) { throw Err.Project.projectNotFound } await obj.removeMember(memberId,type) return } @DHttpApi(projectApi.routes.list) async list(@DHttpReqParam("keyword") keyword:string,@DHttpReqParamRequired("page") page:number,@DHttpReqParamRequired("size") size:number,@DHttpReqParam("organizationUserId") organizationUserId:string,@DHttpUser userInfo:IUserSession) :Promise{ let user="" if(userInfo.type==ECommon_User_Type.ADMIN && organizationUserId) { user=organizationUserId } else if(userInfo.type==ECommon_User_Type.USER) { user=userInfo.organizationInfo.organizationUserId } let list=await ProjectService.list(userInfo.organizationInfo.organizationId,page,size,keyword,user) return list } @DHttpApi(projectApi.routes.issueTypeList) async issueTypeList(@DHttpReqParamRequired("projectId") projectId:string) :Promise { let project=await ProjectService.getItemById(projectId) if(!project) { throw Err.Project.projectNotFound } let ret=await project.issueTypeList() return ret; } @DHttpApi(projectApi.routes.recentProjectList) async recentProjectList(@DHttpUser user:IUserSession) :Promise { let ret=await ProjectService.recentProjectList(user.userId); return ret; } @DHttpApi(projectApi.routes.listRole) async listRole(@DHttpReqParam("projectId") projectId:string,@DHttpUser user:IUserSession) :Promise{ if(projectId) { let obj=await ProjectService.getItemById(projectId) if(!obj) { throw Err.Project.projectNotFound } let ret=await obj.listRole(); return ret; } else { let ret=await ProjectService.listGlobalRole(user.organizationInfo.organizationId); return ret; } } @DHttpApi(projectApi.routes.addRole) async addRole(@DHttpReqParam("projectId") projectId:string, @DHttpReqParamRequired("name") name :string, @DHttpReqParamRequired("value") value:number, @DHttpReqParam("description") description:string,@DHttpUser user:IUserSession) :Promise{ if(projectId) { let obj=await ProjectService.getItemById(projectId) if(!obj) { throw Err.Project.projectNotFound } let ret=await obj.createRole(name,description,value); return ret; } else { let ret=await ProjectService.createGlobalRole(user.organizationInfo.organizationId,name,description,value) return ret; } } @DHttpApi(projectApi.routes.editRole) async editRole(@DHttpReqParamRequired("roleId") roleId:string, @DHttpReqParam("name") name :string, @DHttpReqParam("value") value:number, @DHttpReqParam("description") description:string, @DHttpUser user:IUserSession) :Promise{ let ret=await rpcAuthApi.updateRole({ id:roleId, name, description, value:value }); return ret; } @DHttpApi(projectApi.routes.removeRole) async removeRole(@DHttpReqParamRequired("roleId") roleId:string,@DHttpUser user:IUserSession) :Promise{ await rpcAuthApi.removeRole(roleId); return; } } export default new ProjectController