From d65e33afa3845a493ed42227cc72a8adc558aaa8 Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:42:24 +0900 Subject: [PATCH 01/12] Update PostController.java --- .../cnu/devlog_springboot/controller/PostController.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/com/cnu/devlog_springboot/controller/PostController.java b/src/main/java/com/com/cnu/devlog_springboot/controller/PostController.java index 7d6847f..1874a51 100644 --- a/src/main/java/com/com/cnu/devlog_springboot/controller/PostController.java +++ b/src/main/java/com/com/cnu/devlog_springboot/controller/PostController.java @@ -3,6 +3,8 @@ import com.com.cnu.devlog_springboot.model.Post; import com.com.cnu.devlog_springboot.model.request.PostRequest; import com.com.cnu.devlog_springboot.service.PostService; +import com.com.cnu.devlog_springboot.type.Tag; +import jakarta.annotation.Nullable; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -17,8 +19,8 @@ public class PostController { // GET /posts @GetMapping - public ResponseEntity> getPosts() { - return ResponseEntity.ok(postService.getPosts()); + public ResponseEntity> getPosts(@RequestParam("tag") @Nullable Tag tag{ + return ResponseEntity.ok(postService.getPosts(tag)); } // GET /posts/{postId} From a2e1b85cfb9d0ba7640a5ac081f4e568e9297fcc Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:43:38 +0900 Subject: [PATCH 02/12] Create ProjectController.java --- .../controller/ProjectController.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/controller/ProjectController.java diff --git a/src/main/java/com/com/cnu/devlog_springboot/controller/ProjectController.java b/src/main/java/com/com/cnu/devlog_springboot/controller/ProjectController.java new file mode 100644 index 0000000..5db88c2 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/controller/ProjectController.java @@ -0,0 +1,54 @@ +package com.com.cnu.devlog_springboot.controller; + +import com.com.cnu.devlog_springboot.model.Project; +import com.com.cnu.devlog_springboot.model.request.ProjectRequest; +import com.com.cnu.devlog_springboot.service.ProjectService; +import com.com.cnu.devlog_springboot.type.Tag; +import jakarta.annotation.Nullable; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/projects") +@RequiredArgsConstructor +public class ProjectController { + private final ProjectService projectService; + + // GET /projects + @GetMapping + public ResponseEntity> getProjects() { + return ResponseEntity.ok(projectService.getProjects()); + } + + // GET /projects/{projectId} + @GetMapping("{projectId}") + public ResponseEntity getProject(@PathVariable("projectId")Integer projectId) { + return ResponseEntity.ok(projectService.getProject(projectId)); + } + + // POST /projects + @PostMapping + public ResponseEntity createProject(@RequestBody ProjectRequest projectRequest) { + return ResponseEntity.ok(projectService.creatProject(projectRequest)); + } + + // PUT /projects/{projectId} + // ex. localhost:8080/projects/3 + @PutMapping("{projectId}") + public ResponseEntity updateProject( + @PathVariable("projectId")Integer projectId, + @RequestBody ProjectRequest projectRequest + ) { + return ResponseEntity.ok(projectService.updateProject(projectId, projectRequest)); + } + + // DELETE /projects/{projectId} + @DeleteMapping("{projectId}") + public ResponseEntity deleteProject(@PathVariable("projectId") Integer projectId) { + projectService.deleteProject(projectId); + return ResponseEntity.noContent().build(); + } +} From 4d1ff82d8f0d94959bb7dee1acebd915063839bc Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:44:24 +0900 Subject: [PATCH 03/12] Create DevlogException.java --- .../devlog_springboot/exception/DevlogException.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/exception/DevlogException.java diff --git a/src/main/java/com/com/cnu/devlog_springboot/exception/DevlogException.java b/src/main/java/com/com/cnu/devlog_springboot/exception/DevlogException.java new file mode 100644 index 0000000..9da0b4e --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/exception/DevlogException.java @@ -0,0 +1,11 @@ +package com.com.cnu.devlog_springboot.exception; + +import com.com.cnu.devlog_springboot.type.ErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class DevlogException extends RuntimeException { + private final ErrorCode errorCode; +} From d2743cd84cf7b37f47dbf0457b92dceb5ec3e4a6 Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:45:20 +0900 Subject: [PATCH 04/12] Create GlobalExceptionHandler.java --- .../exception/GlobalExceptionHandler.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/exception/GlobalExceptionHandler.java diff --git a/src/main/java/com/com/cnu/devlog_springboot/exception/GlobalExceptionHandler.java b/src/main/java/com/com/cnu/devlog_springboot/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..fe0fd60 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/exception/GlobalExceptionHandler.java @@ -0,0 +1,26 @@ +package com.com.cnu.devlog_springboot.exception; + +import com.com.cnu.devlog_springboot.model.response.ErrorResponse; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(DevlogException.class) + public ResponseEntity handleDevlogException( + HttpServletRequest request, DevlogException e + ) { + return ResponseEntity.status(e.getErrorCode().getHttpStatus()) + .body( + new ErrorResponse( + e.getErrorCode().getDescription(), + e.getErrorCode().getHttpStatus().value(), + e.getErrorCode().getErrorCode(), + request.getRequestURI() + ) + ); + } +} From c3ef96c14efc0a6ac22151594309c909d0f935df Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:46:05 +0900 Subject: [PATCH 05/12] Create ErrorResponse.java --- .../model/response/ErrorResponse.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/model/response/ErrorResponse.java diff --git a/src/main/java/com/com/cnu/devlog_springboot/model/response/ErrorResponse.java b/src/main/java/com/com/cnu/devlog_springboot/model/response/ErrorResponse.java new file mode 100644 index 0000000..79353b3 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/model/response/ErrorResponse.java @@ -0,0 +1,11 @@ +package com.com.cnu.devlog_springboot.model.response; + +public record ErrorResponse ( + String title, + Integer status, + Integer code, + String instance + +) { + +} From dc67e88d43316cc4183c99754621e84e9e0fd619 Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:47:21 +0900 Subject: [PATCH 06/12] Update PostRepository.java --- .../com/cnu/devlog_springboot/repository/PostRepository.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/com/cnu/devlog_springboot/repository/PostRepository.java b/src/main/java/com/com/cnu/devlog_springboot/repository/PostRepository.java index bb39395..21b7f8d 100644 --- a/src/main/java/com/com/cnu/devlog_springboot/repository/PostRepository.java +++ b/src/main/java/com/com/cnu/devlog_springboot/repository/PostRepository.java @@ -1,13 +1,17 @@ package com.com.cnu.devlog_springboot.repository; import com.com.cnu.devlog_springboot.model.Post; +import com.com.cnu.devlog_springboot.type.Tag; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface PostRepository extends JpaRepository { // Post save(Post post); // List findAll(); // Optional findById(Integer postId); // void delete(Post post); + List findAllByTag(Tag tag); } From 92211f4cae9010a888e7f8ab8a0ae64a0af0f2c1 Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:47:54 +0900 Subject: [PATCH 07/12] Create ProjectRepository.java --- .../repository/ProjectRepository.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java diff --git a/src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java b/src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java new file mode 100644 index 0000000..bb3f824 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java @@ -0,0 +1,16 @@ +package com.com.cnu.devlog_springboot.repository; + +import com.com.cnu.devlog_springboot.model.Project; +import com.com.cnu.devlog_springboot.type.Tag; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface ProjectRepository extends JpaRepository { +// Project save(Project project); +// List findAll(); +// Optional findById(Integer projectId); +// void delete(Project project); +} From 364ccd0fa12d18b0df8a36bdd836f86418929a0f Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:51:17 +0900 Subject: [PATCH 08/12] Update PostService.java --- .../cnu/devlog_springboot/service/PostService.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/com/cnu/devlog_springboot/service/PostService.java b/src/main/java/com/com/cnu/devlog_springboot/service/PostService.java index 3823d7a..55c518e 100644 --- a/src/main/java/com/com/cnu/devlog_springboot/service/PostService.java +++ b/src/main/java/com/com/cnu/devlog_springboot/service/PostService.java @@ -1,8 +1,12 @@ package com.com.cnu.devlog_springboot.service; +import com.com.cnu.devlog_springboot.exception.DevlogException; import com.com.cnu.devlog_springboot.model.Post; import com.com.cnu.devlog_springboot.model.request.PostRequest; import com.com.cnu.devlog_springboot.repository.PostRepository; +import com.com.cnu.devlog_springboot.type.ErrorCode; +import com.com.cnu.devlog_springboot.type.Tag; +import jakarta.annotation.Nullable; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -13,7 +17,10 @@ public class PostService { private final PostRepository postRepository; - public List getPosts() { + public List getPosts(@Nullable Tag tag) { + if (tag != null) { + return postRepository.findAllByTag(tag); + } return postRepository.findAll(); } @@ -38,7 +45,7 @@ public Post updatePost(Integer postId, PostRequest postRequest) { public Post getPost(Integer postId) { return postRepository.findById(postId) - .orElse(null); + .orElseThrow(() -> new DevlogException(ErrorCode.POST_NOT_FOUND)); } public void deletePost(Integer postId) { From 54fe2b125a67950b2915d2a9347ac6920809798f Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:51:51 +0900 Subject: [PATCH 09/12] Create ProjectService.java --- .../service/ProjectService.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/service/ProjectService.java diff --git a/src/main/java/com/com/cnu/devlog_springboot/service/ProjectService.java b/src/main/java/com/com/cnu/devlog_springboot/service/ProjectService.java new file mode 100644 index 0000000..f7ea528 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/service/ProjectService.java @@ -0,0 +1,59 @@ +package com.com.cnu.devlog_springboot.service; + +import com.com.cnu.devlog_springboot.exception.DevlogException; +import com.com.cnu.devlog_springboot.model.Project; +import com.com.cnu.devlog_springboot.model.request.ProjectRequest; +import com.com.cnu.devlog_springboot.repository.ProjectRepository; +import com.com.cnu.devlog_springboot.type.ErrorCode; +import com.com.cnu.devlog_springboot.type.Tag; +import jakarta.annotation.Nullable; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ProjectService { + private final ProjectRepository projectRepository; + + public List getProjects() { + return projectRepository.findAll(); + } + + public Project creatProject(ProjectRequest projectRequest) { + return projectRepository.save(new Project( + null, + projectRequest.title(), + projectRequest.summary(), + projectRequest.contents(), + projectRequest.startDate(), + projectRequest.endDate() + )); + } + + public Project updateProject(Integer projectId, ProjectRequest projectRequest) { + return projectRepository.findById(projectId) + .map(project -> { + project.setTitle(projectRequest.title()); + project.setSummary(projectRequest.summary()); + project.setContents(projectRequest.contents()); + project.setStartDate(projectRequest.startDate()); + project.setEndDate(projectRequest.endDate()); + return projectRepository.save(project); + }) + .orElseThrow(() -> new DevlogException(ErrorCode.PROJECT_NOT_FOUND)); + } + + public Project getProject(Integer projectId) { + return projectRepository.findById(projectId) + .orElseThrow(() -> new DevlogException(ErrorCode.PROJECT_NOT_FOUND)); + } + + public void deleteProject(Integer projectId) { + Project project = projectRepository.findById(projectId) + .orElseThrow(() -> new DevlogException(ErrorCode.PROJECT_NOT_FOUND)); + projectRepository.delete(project); + } +} From 34011a6112b7f68b70dc1f9fcd42890095242603 Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:52:24 +0900 Subject: [PATCH 10/12] Create ErrorCode.java --- .../cnu/devlog_springboot/type/ErrorCode.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/type/ErrorCode.java diff --git a/src/main/java/com/com/cnu/devlog_springboot/type/ErrorCode.java b/src/main/java/com/com/cnu/devlog_springboot/type/ErrorCode.java new file mode 100644 index 0000000..0e5b05a --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/type/ErrorCode.java @@ -0,0 +1,30 @@ +package com.com.cnu.devlog_springboot.type; + +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +public enum ErrorCode { + //4XX + POST_NOT_FOUND( + HttpStatus.NOT_FOUND, + 4000, + "해당 게시물을 찾을 수 없습니다." + ), + + PROJECT_NOT_FOUND( + HttpStatus.NOT_FOUND, + 404, + "해당 프로젝트을 찾을 수 없습니다." + ); + + private final HttpStatus httpStatus; + private final Integer errorCode; + private final String description; + ErrorCode(HttpStatus httpStatus, Integer errorCode, String description) { + this.httpStatus = httpStatus; + this.errorCode = errorCode; + this.description = description; + } + +} From 088c6fd52b32a8d9a3d819662b3318361b7f57a0 Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:53:23 +0900 Subject: [PATCH 11/12] Rename deployment_scp.yml to blank.yml --- .github/workflows/{deployment_scp.yml => blank.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{deployment_scp.yml => blank.yml} (100%) diff --git a/.github/workflows/deployment_scp.yml b/.github/workflows/blank.yml similarity index 100% rename from .github/workflows/deployment_scp.yml rename to .github/workflows/blank.yml From c312628cdb8c6827418ad37b0fb78791b38d47ec Mon Sep 17 00:00:00 2001 From: cyh1443 <126747535+cyh1443@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:58:22 +0900 Subject: [PATCH 12/12] Rename blank.yml to deployment_scp.yml --- .github/workflows/{blank.yml => deployment_scp.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{blank.yml => deployment_scp.yml} (100%) diff --git a/.github/workflows/blank.yml b/.github/workflows/deployment_scp.yml similarity index 100% rename from .github/workflows/blank.yml rename to .github/workflows/deployment_scp.yml