diff --git a/src/main/java/com/rest/api/controller/UserController.java b/src/main/java/com/rest/api/controller/UserController.java deleted file mode 100644 index 9a051bc..0000000 --- a/src/main/java/com/rest/api/controller/UserController.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.rest.api.controller; - -import com.rest.api.entity.User; -import com.rest.api.repo.UserJpaRepo; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -@Api(tags = {"1. User"}) -@RequiredArgsConstructor -@RestController -public class UserController { - - private final UserJpaRepo userJpaRepo; - - @ApiOperation(value = "회원 조회", notes = "모든 회원을 조회한다") - @GetMapping(value = "/user") - public List findAllUser() { - return userJpaRepo.findAll(); - } - - @ApiOperation(value = "회원 입력", notes = "모든 회원을 조회한다") - @PostMapping(value = "/user") - public User save(@ApiParam(value = "회원이름", required = true) @RequestParam String name, - @ApiParam(value = "회원이메일", required = true) @RequestParam String email) { - User user = new User(); - user.setName(name); - user.setEmail(email); - return userJpaRepo.save(user); - } -} diff --git a/src/main/java/com/rest/api/controller/v1/UserController.java b/src/main/java/com/rest/api/controller/v1/UserController.java new file mode 100644 index 0000000..0253ec4 --- /dev/null +++ b/src/main/java/com/rest/api/controller/v1/UserController.java @@ -0,0 +1,69 @@ +package com.rest.api.controller.v1; + +import com.rest.api.entity.User; +import com.rest.api.model.response.BasicResult; +import com.rest.api.model.response.CommonResult; +import com.rest.api.model.response.ListResult; +import com.rest.api.repo.UserJpaRepo; +import com.rest.api.service.ResponseService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@Api(tags = {"1. User"}) +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/v1") +public class UserController { + + private final UserJpaRepo userJpaRepo; + private final ResponseService responseService; // 결과를 처리할 Service + + @ApiOperation(value = "회원 리스트 조회", notes = "모든 회원을 조회한다") + @GetMapping(value = "/users") + public ListResult findAllUser() { + // 결과데이터가 여러건인경우 getListResult를 이용해서 결과를 출력한다. + return responseService.getListResult(userJpaRepo.findAll()); + } + + @ApiOperation(value = "회원 단건 조회", notes = "userId로 회원을 조회한다") + @GetMapping(value = "/user/{userId}") + public BasicResult findUserById(@ApiParam(value = "회원ID", required = true) @RequestParam int userId) { + // 결과데이터가 단일건인경우 getBasicResult를 이용해서 결과를 출력한다. + return responseService.getBasicResult(userJpaRepo.findById(userId).orElse(null)); + } + + @ApiOperation(value = "회원 입력", notes = "회원을 입력한다") + @PostMapping(value = "/user") + public BasicResult save(@ApiParam(value = "회원이름", required = true) @RequestParam String name, + @ApiParam(value = "회원이메일", required = true) @RequestParam String email) { + User user = new User(); + user.setName(name); + user.setEmail(email); + return responseService.getBasicResult(userJpaRepo.save(user)); + } + + @ApiOperation(value = "회원 수정", notes = "회원정보를 수정한다") + @PutMapping(value = "/user") + public BasicResult modify( + @ApiParam(value = "회원ID", required = true) @RequestParam int userId, + @ApiParam(value = "회원이름", required = true) @RequestParam String name, + @ApiParam(value = "회원이메일", required = true) @RequestParam String email) { + User user = new User(); + user.setId(userId); + user.setName(name); + user.setEmail(email); + return responseService.getBasicResult(userJpaRepo.save(user)); + } + + @ApiOperation(value = "회원 삭제", notes = "userId로 회원정보를 삭제한다") + @DeleteMapping(value = "/user/{userId}") + public CommonResult delete( + @ApiParam(value = "회원ID", required = true) @RequestParam int userId) { + userJpaRepo.deleteById(userId); + // 성공 결과 정보만 필요한경우 getSuccessResult()를 이용하여 결과를 출력한다. + return responseService.getSuccessResult(); + } +} diff --git a/src/main/java/com/rest/api/model/response/BasicResult.java b/src/main/java/com/rest/api/model/response/BasicResult.java new file mode 100644 index 0000000..1cc40a6 --- /dev/null +++ b/src/main/java/com/rest/api/model/response/BasicResult.java @@ -0,0 +1,10 @@ +package com.rest.api.model.response; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class BasicResult extends CommonResult { + private T data; +} \ No newline at end of file diff --git a/src/main/java/com/rest/api/model/response/CommonResult.java b/src/main/java/com/rest/api/model/response/CommonResult.java new file mode 100644 index 0000000..6b2d9a5 --- /dev/null +++ b/src/main/java/com/rest/api/model/response/CommonResult.java @@ -0,0 +1,20 @@ +package com.rest.api.model.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class CommonResult { + + @ApiModelProperty(value = "응답 성공여부 : true/false") + private boolean success; + + @ApiModelProperty(value = "응답 코드 번호 : > 0 정상, < 0 비정상") + private int code; + + @ApiModelProperty(value = "응답 메시지") + private String msg; +} + diff --git a/src/main/java/com/rest/api/model/response/ListResult.java b/src/main/java/com/rest/api/model/response/ListResult.java new file mode 100644 index 0000000..331036d --- /dev/null +++ b/src/main/java/com/rest/api/model/response/ListResult.java @@ -0,0 +1,12 @@ +package com.rest.api.model.response; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class ListResult extends CommonResult { + private List list; +} \ No newline at end of file diff --git a/src/main/java/com/rest/api/service/ResponseService.java b/src/main/java/com/rest/api/service/ResponseService.java new file mode 100644 index 0000000..027c71c --- /dev/null +++ b/src/main/java/com/rest/api/service/ResponseService.java @@ -0,0 +1,68 @@ +package com.rest.api.service; + +import com.rest.api.model.response.BasicResult; +import com.rest.api.model.response.CommonResult; +import com.rest.api.model.response.ListResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ResponseService { + + // enum으로 api 요청 결과에 대한 code, message를 정의합니다. + public enum CommonResponse { + SUCCESS(0, "성공하였습니디."), + FAIL(-1, "실패하였습니다."); + + int code; + String msg; + + CommonResponse(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public int getCode() { + return code; + } + + public String getMsg() { + return msg; + } + } + // 단일건 결과를 처리하는 메소드 + public BasicResult getBasicResult(T data) { + BasicResult result = new BasicResult<>(); + result.setData(data); + setSuccessResult(result); + return result; + } + // 다중건 결과를 처리하는 메소드 + public ListResult getListResult(List list) { + ListResult result = new ListResult<>(); + result.setList(list); + setSuccessResult(result); + return result; + } + // 성공 결과만 처리하는 메소드 + public CommonResult getSuccessResult() { + CommonResult result = new CommonResult(); + setSuccessResult(result); + return result; + } + // 실패 결과만 처리하는 메소드 + public CommonResult getFailResult() { + CommonResult result = new CommonResult(); + result.setSuccess(false); + result.setCode(CommonResponse.FAIL.getCode()); + result.setMsg(CommonResponse.FAIL.getMsg()); + return result; + } + // 결과 모델에 api 요청 성공 데이터를 세팅해주는 메소드 + private void setSuccessResult(CommonResult result) { + result.setSuccess(true); + result.setCode(CommonResponse.SUCCESS.getCode()); + result.setMsg(CommonResponse.SUCCESS.getMsg()); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f3876ff..b3b3048 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -8,5 +8,5 @@ spring: username: sa jpa: database-platform: org.hibernate.dialect.H2Dialect - properties.hibernate.hbm2ddl.auto: none + #properties.hibernate.hbm2ddl.auto: none showSql: true \ No newline at end of file