Skip to content

Commit

Permalink
Merge pull request #57 from potenday-project/feat/#55
Browse files Browse the repository at this point in the history
Feat/#55
  • Loading branch information
oU-Ua authored Jan 1, 2024
2 parents ad72a6c + c1e9d69 commit 6297049
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public enum ErrorCode implements EnumModel{

//조회시 발생 가능 예외
RPOJECT_NOT_FOUND(401,"P001","프로젝트를 찾을 수 없습니다."),
CATEGORY_SERVER_ERROR(500,"P002","카테고리 불러오는 것을 실패하였습니다."),
MEMBER_NOT_FOUND(401,"M001","해당하는 멤버를 찾을 수 없습니다."),
CALENDER_NOT_FOUND(401,"C001","해당하는 일정을 찾을 수 없습니다.");

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/mvc/promiseme/config/SwaggerConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@
public class SwaggerConfig {

@Bean
public GroupedOpenApi chatOpenApi() {
public GroupedOpenApi PromiseMeAPI() {
String[] paths = {"/**"};

return GroupedOpenApi.builder()
.group("PromiseMe v1")
.pathsToMatch(paths)
.build();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
package mvc.promiseme.project.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import mvc.promiseme.common.exception.ErrorCode;
import mvc.promiseme.common.exception.ErrorResponse;
import mvc.promiseme.project.dto.ProjectRequestDTO;
import mvc.promiseme.project.dto.ProjectResponseDTO;
import mvc.promiseme.project.dto.RecommendMemberRequestDTO;
Expand All @@ -19,6 +26,7 @@

@Slf4j
@RestController
@Tag(name = "Project", description = "프로젝트 API")
@RequiredArgsConstructor
@CrossOrigin(origins ="*", allowedHeaders = "*")
@RequestMapping("/project")
Expand All @@ -27,18 +35,36 @@ public class ProjectController {
private final RecommendService recommendService;
@GetMapping("/")
@Operation(summary = "전체 프로젝트조회", description = "user가 포함된 모든 프로젝트를 조회")
@ApiResponse()
public ResponseEntity<List<ProjectResponseDTO>> projectAll(@RequestParam("userId") Long userId){
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = ProjectResponseDTO.class))),
@ApiResponse(responseCode = "401", description = "프로젝트를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
public ResponseEntity<List<ProjectResponseDTO>> projectAll(@Parameter(description = "유저ID", required = true) @RequestParam("userId") Long userId){
return ResponseEntity.ok(projectService.projectAll(userId));

}
@GetMapping("/category")
@Operation(summary = "상위 카테고리 조회", description = "현재 존재하는 프로젝트 카테고리중 많은 순으로 6개 조회")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = List.class))),
@ApiResponse(responseCode = "501", description = "존재하는 프로젝트가 없어서 카테고리를 가져올 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
public ResponseEntity<List<String>> categoryRanking(){
// if(projectService.categoryRanking()==null)
// return ResponseEntity.status(ErrorCode.CATEGORY_SERVER_ERROR.getStatus()).body(ErrorCode.CATEGORY_SERVER_ERROR.getMessage());

return ResponseEntity.ok(projectService.categoryRanking());

}

@Operation(summary = "프로젝트 생성", description = "새로운 프로젝트 생성")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = Map.class))),
@ApiResponse(responseCode = "501", description = "프로젝트 생성 중 알 수 없는 에러가 발생하였습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@PostMapping("/create")
public ResponseEntity<Map<String, Long>> insert(@RequestBody ProjectRequestDTO projectRequestDTO){
Map<String, Long> result = new HashMap<>();
Expand All @@ -47,25 +73,49 @@ public ResponseEntity<Map<String, Long>> insert(@RequestBody ProjectRequestDTO p
result.put("projectId",projectService.insert(projectRequestDTO));
return ResponseEntity.ok(result);
}
@Operation(summary = "프로젝트 진행척도", description = "현재 프로젝트가 얼마나 진행되었는지 퍼센트로 확인할 수 있다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = Map.class))),
@ApiResponse(responseCode = "401", description = "해당 프로젝트를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@GetMapping("/progress")
public ResponseEntity<Map<String, Integer>> progress(@RequestParam("projectId")Long projectId){
Map<String,Integer> progressResult = new HashMap<>();
progressResult.put("progress", projectService.progress(projectId));
return ResponseEntity.ok(progressResult);
}
@Operation(summary = "프로젝트 디데이", description = "해당하는 프로젝트의 디데이를 계산한다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = Map.class))),
@ApiResponse(responseCode = "401", description = "프로젝트를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@GetMapping("/dday")
public ResponseEntity <Map<String,Integer>> dday(@RequestParam("projectId") Long projectId){
Map<String,Integer> ddayResult = new HashMap<>();
ddayResult.put("Dday", projectService.dday(projectId));

return ResponseEntity.ok(ddayResult);
}

@Operation(summary = "멤버 추천", description = "입력한 값에 맞는 프로젝트 역할과 할일을 보여준다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = Map.class))),
@ApiResponse(responseCode = "401", description = "프로젝트를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@PostMapping("/recommend/member")
public ResponseEntity<Map<String,String>> recommendMember(@RequestBody RecommendMemberRequestDTO recommendMemberRequestDTO){
return ResponseEntity.ok(recommendService.recommendMember(recommendMemberRequestDTO));
}

@Operation(summary = "프로젝트 일정 추천", description = "입력한 값에 맞는 프로젝트 역할과 할일을 보여준다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = ProjectResponseDTO.class))),
@ApiResponse(responseCode = "401", description = "프로젝트를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@PostMapping("/recommend/schedule")
public ResponseEntity<List<Map<String, String>>> recommendSchedule(@RequestBody RecommendScheduleRequestDTO recommendScheduleRequestDTO){
return ResponseEntity.ok(recommendService.recommendSchedule(recommendScheduleRequestDTO));
Expand Down
35 changes: 32 additions & 3 deletions src/main/java/mvc/promiseme/users/controller/UserController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
package mvc.promiseme.users.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import mvc.promiseme.common.exception.ErrorCode;
import mvc.promiseme.common.exception.ErrorResponse;
import mvc.promiseme.project.dto.ProjectResponseDTO;
import mvc.promiseme.users.dto.LoginRequestDTO;
import mvc.promiseme.users.dto.LoginResponseDTO;
import mvc.promiseme.users.dto.UserDTO;
Expand All @@ -14,33 +24,52 @@
import java.util.Map;

@Slf4j
@Tag(name = "User", description = "회원관리 API")
@RestController
@RequiredArgsConstructor

public class UserController {
private final UserService userService;

@Operation(summary = "회원가입", description = "닉네임과 이메일, 패스워드를 입력받아 회원가입을 진행한다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = String.class))),
@ApiResponse(responseCode = "401", description = "중복된 이메일입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@PostMapping("/users/register")
public ResponseEntity<String>register(@RequestBody UserDTO userdto){
public ResponseEntity<String>register( @RequestBody UserDTO userdto){
if(userService.register(userdto).equals("success"))
return ResponseEntity.ok("회원가입이 완료되었습니다.");
else {
return ResponseEntity.ok(userService.register(userdto));
}
}
@Operation(summary = "로그인", description = "이메일, 패스워드를 입력받아 로그인을 진행한다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = LoginResponseDTO.class))),
@ApiResponse(responseCode = "401", description = "존재하지 않는 고객 정보입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "401", description = "비밀번호가 일치하지 않습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@PostMapping("/users/login")
public ResponseEntity<LoginResponseDTO>login(@RequestBody LoginRequestDTO loginRequestDTO){
return ResponseEntity.ok(userService.login(loginRequestDTO));
}

@Operation(summary = "로그아웃", description = "로그아웃을 진행한다.")
@PostMapping("/users/logout")
public ResponseEntity<String>logout(@RequestBody String token){
return ResponseEntity.ok(userService.logout(token));
}

@Operation(summary = "유저 조회", description = "닉네임과 이메일, 패스워드를 입력받아 회원가입을 진행한다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공", content = @Content(schema = @Schema(implementation = String.class))),
@ApiResponse(responseCode = "401", description = "중복된 이메일입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))

})
@PostMapping("/users/check")
public ResponseEntity<Long>check(@RequestBody Map<String, String> requestBody){
public ResponseEntity<Long>searchAll(@RequestBody Map<String, String> requestBody){
return ResponseEntity.ok(userService.check(requestBody.get("email")));
}

Expand Down
5 changes: 5 additions & 0 deletions src/main/java/mvc/promiseme/users/dto/UserDTO.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package mvc.promiseme.users.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@Schema(description = "회원가입DTO")
public class UserDTO {
@Schema(description = "닉네임", required = true, type = "String", example = "사용자1")
private String nickname;
@Schema(description = "이메일", required = true, type = "String", example = "[email protected]")
private String email;
@Schema(description = "비밀번호", required = true, type = "String", example = "password1")
private String password;

}
15 changes: 6 additions & 9 deletions src/test/java/mvc/promiseme/project/projectTest.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package mvc.promiseme.project;

import mvc.promiseme.project.dto.MemberDTO;
import mvc.promiseme.project.dto.ProjectRequestDTO;
import mvc.promiseme.project.dto.ProjectResponseDTO;
import mvc.promiseme.project.dto.RecommendScheduleRequestDTO;
import mvc.promiseme.project.dto.*;
import mvc.promiseme.project.service.ProjectService;
import mvc.promiseme.project.service.RecommendService;
import mvc.promiseme.users.service.UserService;
Expand Down Expand Up @@ -58,11 +55,11 @@ public void testProjectAll(){
}
@Test
public void testInsert(){
List<MemberDTO> memberDTOList = new ArrayList<>();
memberDTOList.add(MemberDTO.builder().role("기획자").userId(1L).build());
memberDTOList.add(MemberDTO.builder().role("디자이너").userId(2L).build());
memberDTOList.add(MemberDTO.builder().role("프론트 개발자").userId(3L).build());
memberDTOList.add(MemberDTO.builder().role("백엔드 개발자").userId(4L).build());
List<MemberRequestDTO> memberDTOList = new ArrayList<>();
memberDTOList.add(MemberRequestDTO.builder().role("기획자").email("[email protected]").build());
memberDTOList.add(MemberRequestDTO.builder().role("디자이너").email("[email protected]").build());
memberDTOList.add(MemberRequestDTO.builder().role("프론트 개발자").email("[email protected]").build());
memberDTOList.add(MemberRequestDTO.builder().role("백엔드 개발자").email("[email protected]").build());
ProjectRequestDTO requestDTO = ProjectRequestDTO.builder()
.category("웹개발").
deadline(LocalDate.parse("2023-12-17"))
Expand Down

0 comments on commit 6297049

Please sign in to comment.