123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- /*
- * <<
- * Davinci
- * ==
- * Copyright (C) 2016 - 2019 EDP
- * ==
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * >>
- *
- */
- package edp.davinci.controller;
- import com.github.pagehelper.PageInfo;
- import edp.core.annotation.CurrentUser;
- import edp.davinci.common.controller.BaseController;
- import edp.davinci.core.common.Constants;
- import edp.davinci.core.common.ResultMap;
- import edp.davinci.dto.organizationDto.OrganizationTransfer;
- import edp.davinci.dto.projectDto.*;
- import edp.davinci.dto.roleDto.RoleBaseInfo;
- import edp.davinci.dto.roleDto.RoleProject;
- import edp.davinci.dto.roleDto.RoleWithProjectPermission;
- import edp.davinci.model.User;
- import edp.davinci.service.ProjectService;
- import edp.davinci.service.RoleService;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import io.swagger.annotations.ApiResponse;
- import io.swagger.annotations.ApiResponses;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.MediaType;
- import org.springframework.http.ResponseEntity;
- import org.springframework.validation.BindingResult;
- import org.springframework.web.bind.annotation.*;
- import springfox.documentation.annotations.ApiIgnore;
- import javax.servlet.http.HttpServletRequest;
- import javax.validation.Valid;
- import java.util.Arrays;
- import java.util.List;
- @Api(value = "/project", tags = "project", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
- @ApiResponses(@ApiResponse(code = 404, message = "project not found"))
- @Slf4j
- @RestController
- @RequestMapping(value = Constants.BASE_API_PATH + "/projects", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
- public class ProjectController extends BaseController {
- @Autowired
- private ProjectService projectService;
- @Autowired
- private RoleService roleService;
- /**
- * 获取项目列表:用户创建和用户所在组可访问的
- *
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "get projects")
- @GetMapping
- public ResponseEntity getProjects(@ApiIgnore @CurrentUser User user, HttpServletRequest request) {
- List<ProjectInfo> projects = projectService.getProjects(user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(projects));
- }
- @ApiOperation(value = "get roles where project is located")
- @GetMapping("/{id}/roles")
- public ResponseEntity getRolesOfProject(@ApiIgnore @CurrentUser User user,
- @PathVariable Long id,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- List<RoleBaseInfo> list = roleService.getRolesByProjectId(id, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(list));
- }
- @ApiOperation(value = "get roles where project is located")
- @GetMapping("/{id}/roles/{roleId}")
- public ResponseEntity getRoleOfProject(@ApiIgnore @CurrentUser User user,
- @PathVariable Long id,
- @PathVariable Long roleId,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- RoleWithProjectPermission permission = roleService.getRoleByProject(id, roleId, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(permission));
- }
- /**
- * 获取项目列表:用户创建和用户所在组可访问的
- *
- * @param id
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "get project info")
- @GetMapping("/{id}")
- public ResponseEntity getProjectInfo(@PathVariable Long id,
- @ApiIgnore @CurrentUser User user,
- @ApiIgnore HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(projectService.getProjectInfo(id, user)));
- }
- /**
- * 获取项目列表:用户创建和用户所在组可访问的
- *
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "get admins of project")
- @GetMapping("/{id}/admins")
- public ResponseEntity getAdmins(@PathVariable Long id,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- List<RelProjectAdminDto> admins = projectService.getAdmins(id, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(admins));
- }
- @ApiOperation(value = "search projects by keywords")
- @GetMapping("/search")
- public ResponseEntity searchProjects(@RequestParam(value = "keywords", required = false) String keywords,
- @RequestParam(value = "pageNum", required = false, defaultValue = "1") int pageNum,
- @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- PageInfo<ProjectWithCreateBy> pageInfo = projectService.searchProjects(keywords, user, pageNum, pageSize);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(pageInfo));
- }
- /**
- * 创建项目
- *
- * @param projectCreat
- * @param user
- * @param bindingResult
- * @param request
- * @return
- */
- @ApiOperation(value = "create project", consumes = MediaType.APPLICATION_JSON_VALUE)
- @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity createProject(@Valid @RequestBody ProjectCreat projectCreat,
- @ApiIgnore BindingResult bindingResult,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (bindingResult.hasErrors()) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- ProjectInfo project = projectService.createProject(projectCreat, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(project));
- }
- /**
- * 移交项目
- *
- * @param id
- * @param organizationTransfer
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "transfer projects", consumes = MediaType.APPLICATION_JSON_VALUE)
- @PutMapping(value = "/{id}/transfer", consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity transferProject(@PathVariable Long id,
- @Valid @RequestBody OrganizationTransfer organizationTransfer,
- @ApiIgnore BindingResult bindingResult,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- if (bindingResult.hasErrors()) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- projectService.transferProject(id, organizationTransfer.getOrgId(), user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
- }
- /**
- * 删除project
- *
- * @param id
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "delete project")
- @DeleteMapping("/{id}")
- public ResponseEntity deleteProject(@PathVariable Long id,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- projectService.deleteProject(id, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
- }
- /**
- * 更新项目基本信息
- *
- * @param id
- * @param projectUpdate
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "update project", consumes = MediaType.APPLICATION_JSON_VALUE)
- @PutMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity updateProjectBaseInfo(@PathVariable Long id,
- @Valid @RequestBody ProjectUpdate projectUpdate,
- @ApiIgnore BindingResult bindingResult,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- if (bindingResult.hasErrors()) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- projectService.updateProject(id, projectUpdate, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
- }
- /**
- * 收藏project
- *
- * @param id
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "favorite project", consumes = MediaType.APPLICATION_JSON_VALUE)
- @PostMapping(value = "/favorite/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity favoriteProject(@PathVariable Long id,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- projectService.favoriteProject(id, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
- }
- /**
- * 获取已收藏project
- *
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "get favorite projects")
- @GetMapping(value = "/favorites")
- public ResponseEntity getFavoriteProjects(@ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- List<ProjectInfo> favoriteProjects = projectService.getFavoriteProjects(user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(favoriteProjects));
- }
- /**
- * 获取已收藏project
- *
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "remove favorite projects")
- @DeleteMapping(value = "/remove/favorites")
- public ResponseEntity removeFavoriteProjects(@ApiIgnore @CurrentUser User user,
- @RequestBody Long[] projectIds,
- HttpServletRequest request) {
- for (Long id : projectIds) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- }
- projectService.removeFavoriteProjects(user, projectIds);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
- }
- /**
- * 为project 添加管理员
- *
- * @param id
- * @param adminIds
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "add an admin for a project")
- @PostMapping(value = "/{id}/admins")
- public ResponseEntity addProjectAdmin(@PathVariable Long id,
- @RequestBody Long[] adminIds,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- if (adminIds.length == 0) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid admin ids");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- List<RelProjectAdminDto> list = projectService.addAdmins(id, Arrays.asList(adminIds), user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(list));
- }
- /**
- * 删除project admin
- *
- * @param id
- * @param relationId
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "remove an admin from a project")
- @DeleteMapping(value = "/{id}/admin/{relationId}")
- public ResponseEntity removeProjectAdmin(@PathVariable Long id,
- @PathVariable Long relationId,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- if (invalidId(relationId)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid admin id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- projectService.removeAdmin(relationId, user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
- }
- /**
- * 批量添加role
- *
- * @param id
- * @param roleIds
- * @param user
- * @param request
- * @return
- */
- @ApiOperation(value = "add project role relations")
- @PostMapping(value = "/{id}/roles", consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity addRoles(@PathVariable Long id,
- @RequestBody Long[] roleIds,
- @ApiIgnore @CurrentUser User user,
- HttpServletRequest request) {
- if (invalidId(id)) {
- ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
- return ResponseEntity.status(resultMap.getCode()).body(resultMap);
- }
- List<RoleProject> list = projectService.postRoles(id, Arrays.asList(roleIds), user);
- return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(list));
- }
- }
|