From 797caa355787e07a99dd8bf5c7edb306924be509 Mon Sep 17 00:00:00 2001 From: sophiakkm <126759831+sophiakkm@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:35:45 +0900 Subject: [PATCH 1/7] Create blank.yml --- .github/workflows/blank.yml | 76 +++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .github/workflows/blank.yml diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml new file mode 100644 index 0000000..f596046 --- /dev/null +++ b/.github/workflows/blank.yml @@ -0,0 +1,76 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Deployment + +on: + workflow_dispatch: + push: + branches: [ "main" ] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + - name: Build with Gradle + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 + with: + arguments: build + - uses: actions/upload-artifact@v3 + with: + name: jar + path: build/libs + + send-jar: + needs: build + runs-on: ubuntu-latest + steps: + - name: Download jar + uses: actions/download-artifact@v3 + with: + name: jar + - name: Send jar to remote server + uses: appleboy/scp-action@master + with: + host: {34.64.188.42} + username: {kongju8466} + source: "devlog_springboot-0.0.1-SNAPSHOT.jar" + target: "/home/{kongju8466}" + key: ${{ secrets.PRIVATE_KEY }} + + run-app: + needs: send-jar + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Move deploy.sh + uses: appleboy/scp-action@master + with: + host: {34.64.188.42} + username: {kongju8466} + source: "deploy.sh" + target: "/home/{kongju8466}" + key: ${{ secrets.PRIVATE_KEY }} + - name: Execute script + uses: appleboy/ssh-action@master + with: + username: {kongju8466} + host: {34.64.188.42} + key: ${{ secrets.PRIVATE_KEY }} + script_stop: true + script: cd /home/{kongju8466} && chmod +x deploy.sh && ./deploy.sh From 58192b56838feaee51e45445cacf54e1afe57783 Mon Sep 17 00:00:00 2001 From: sophiakkm <126759831+sophiakkm@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:36:03 +0900 Subject: [PATCH 2/7] Create read.md --- read.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 read.md diff --git a/read.md b/read.md new file mode 100644 index 0000000..a82bd16 --- /dev/null +++ b/read.md @@ -0,0 +1 @@ +hihihi From e1ab967de0bd54a62d69693d1c7417b6752a0876 Mon Sep 17 00:00:00 2001 From: sophiakkm <126759831+sophiakkm@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:38:12 +0900 Subject: [PATCH 3/7] Update blank.yml --- .github/workflows/blank.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml index f596046..a7b0ddf 100644 --- a/.github/workflows/blank.yml +++ b/.github/workflows/blank.yml @@ -46,8 +46,8 @@ jobs: - name: Send jar to remote server uses: appleboy/scp-action@master with: - host: {34.64.188.42} - username: {kongju8466} + host: 34.64.188.42 + username: kongju8466 source: "devlog_springboot-0.0.1-SNAPSHOT.jar" target: "/home/{kongju8466}" key: ${{ secrets.PRIVATE_KEY }} @@ -61,16 +61,16 @@ jobs: - name: Move deploy.sh uses: appleboy/scp-action@master with: - host: {34.64.188.42} - username: {kongju8466} + host: 34.64.188.42 + username: kongju8466 source: "deploy.sh" target: "/home/{kongju8466}" key: ${{ secrets.PRIVATE_KEY }} - name: Execute script uses: appleboy/ssh-action@master with: - username: {kongju8466} - host: {34.64.188.42} + username: kongju8466 + host: 34.64.188.42 key: ${{ secrets.PRIVATE_KEY }} script_stop: true script: cd /home/{kongju8466} && chmod +x deploy.sh && ./deploy.sh From bdd965de1bdccf27df2856f1e9374f67f8ab2816 Mon Sep 17 00:00:00 2001 From: sophiakkm <126759831+sophiakkm@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:43:30 +0900 Subject: [PATCH 4/7] Update blank.yml --- .github/workflows/blank.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml index a7b0ddf..3779d7d 100644 --- a/.github/workflows/blank.yml +++ b/.github/workflows/blank.yml @@ -49,7 +49,7 @@ jobs: host: 34.64.188.42 username: kongju8466 source: "devlog_springboot-0.0.1-SNAPSHOT.jar" - target: "/home/{kongju8466}" + target: "/home/kongju8466" key: ${{ secrets.PRIVATE_KEY }} run-app: @@ -64,7 +64,7 @@ jobs: host: 34.64.188.42 username: kongju8466 source: "deploy.sh" - target: "/home/{kongju8466}" + target: "/home/kongju8466" key: ${{ secrets.PRIVATE_KEY }} - name: Execute script uses: appleboy/ssh-action@master @@ -73,4 +73,4 @@ jobs: host: 34.64.188.42 key: ${{ secrets.PRIVATE_KEY }} script_stop: true - script: cd /home/{kongju8466} && chmod +x deploy.sh && ./deploy.sh + script: cd /home/kongju8466 && chmod +x deploy.sh && ./deploy.sh From bb5623c627dee7a436e9c6755ba13b6628a38f0b Mon Sep 17 00:00:00 2001 From: sophiakkm <126759831+sophiakkm@users.noreply.github.com> Date: Mon, 15 Apr 2024 18:12:48 +0900 Subject: [PATCH 5/7] Update blank.yml --- .github/workflows/blank.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml index 3779d7d..80229cb 100644 --- a/.github/workflows/blank.yml +++ b/.github/workflows/blank.yml @@ -21,10 +21,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' + java-version: '21' distribution: 'temurin' - name: Build with Gradle uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 From 6b2da4f824c6d1ef75bec0b1ec1236f67147052c Mon Sep 17 00:00:00 2001 From: sophiakkm <126759831+sophiakkm@users.noreply.github.com> Date: Mon, 15 Apr 2024 18:23:37 +0900 Subject: [PATCH 6/7] Update blank.yml From 84427bb2d3eb0bd118ba2b3aa6f22dcecbb904b3 Mon Sep 17 00:00:00 2001 From: kyeongmin Date: Mon, 6 May 2024 21:14:19 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=EC=88=98=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PostController.java | 19 ++++--- .../controller/ProjectController.java | 52 ++++++++++++++++++ .../exception/DevlogException.java | 11 ++++ .../exception/GlobalExceptionHandler.java | 28 ++++++++++ .../model/request/PostRequest.java | 2 +- .../model/response/ErrorResponse.java | 9 +++ .../repository/PostRepository.java | 4 ++ .../repository/ProjectRepository.java | 11 ++++ .../service/PostService.java | 17 ++++-- .../service/ProjectService.java | 55 +++++++++++++++++++ .../cnu/devlog_springboot/type/ErrorCode.java | 20 +++++++ 11 files changed, 213 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/com/cnu/devlog_springboot/controller/ProjectController.java create mode 100644 src/main/java/com/com/cnu/devlog_springboot/exception/DevlogException.java create mode 100644 src/main/java/com/com/cnu/devlog_springboot/exception/GlobalExceptionHandler.java create mode 100644 src/main/java/com/com/cnu/devlog_springboot/model/response/ErrorResponse.java create mode 100644 src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java create mode 100644 src/main/java/com/com/cnu/devlog_springboot/service/ProjectService.java 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/controller/PostController.java b/src/main/java/com/com/cnu/devlog_springboot/controller/PostController.java index 7d6847f..2b42c3f 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.*; @@ -15,26 +17,25 @@ public class PostController { private final PostService postService; - // 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} + //GET /posts/{postId} @GetMapping("{postId}") public ResponseEntity getPost(@PathVariable("postId")Integer postId) { return ResponseEntity.ok(postService.getPost(postId)); } - // POST /posts + //POST /posts @PostMapping public ResponseEntity createPost(@RequestBody PostRequest postRequest) { - return ResponseEntity.ok(postService.creatPost(postRequest)); + return ResponseEntity.ok(postService.createPost(postRequest)); } // PUT /posts/{postId} - // ex. localhost:8080/posts/3 + // localhost:8080/posts/3 @PutMapping("{postId}") public ResponseEntity updatePost( @PathVariable("postId")Integer postId, @@ -42,11 +43,11 @@ public ResponseEntity updatePost( ) { return ResponseEntity.ok(postService.updatePost(postId, postRequest)); } - - // DELETE /posts/{postId} + // DELETE /posts/{postid} @DeleteMapping("{postId}") public ResponseEntity deletePost(@PathVariable("postId") Integer postId) { postService.deletePost(postId); return ResponseEntity.noContent().build(); } + } 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..171bb6c --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/controller/ProjectController.java @@ -0,0 +1,52 @@ +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 lombok.AllArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/projects") +@AllArgsConstructor +public class ProjectController { + private final ProjectService projectService; + + @GetMapping + public ResponseEntity> getProjects() { + return ResponseEntity.ok(projectService.getProjects()); + } + + // GET /posts/{postId} + @GetMapping("{projectId}") + public ResponseEntity getProject(@PathVariable("projectId")Integer projectId) { + return ResponseEntity.ok(projectService.getProject(projectId)); + } + + // POST /posts + @PostMapping + public ResponseEntity createProject(@RequestBody ProjectRequest projectRequest) { + return ResponseEntity.ok(projectService.createProject(projectRequest)); + } + + // PUT /posts/{postId} + // localhost:8080/posts/3 + @PutMapping("{projectId}") + public ResponseEntity updateProject( + @PathVariable Integer projectId, + @RequestBody ProjectRequest projectRequest + ) { + return ResponseEntity.ok(projectService.updateProject(projectId, projectRequest)); + } + + // DELETE /posts/{postId} + @DeleteMapping("{projectId}") + public ResponseEntity deleteProject(@PathVariable("projectId")Integer projectId) { + projectService.deleteProject(projectId); + return ResponseEntity.noContent().build(); + } + +} 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; +} 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..fc6782a --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/exception/GlobalExceptionHandler.java @@ -0,0 +1,28 @@ +package com.com.cnu.devlog_springboot.exception; + +import com.com.cnu.devlog_springboot.model.response.ErrorResponse; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +import java.util.Locale; + +@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() + ) + ); + } +} diff --git a/src/main/java/com/com/cnu/devlog_springboot/model/request/PostRequest.java b/src/main/java/com/com/cnu/devlog_springboot/model/request/PostRequest.java index 14efa3b..f98f828 100644 --- a/src/main/java/com/com/cnu/devlog_springboot/model/request/PostRequest.java +++ b/src/main/java/com/com/cnu/devlog_springboot/model/request/PostRequest.java @@ -4,7 +4,7 @@ public record PostRequest( String title, - String contents, + String content, Tag tag ) { } 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..c102932 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/model/response/ErrorResponse.java @@ -0,0 +1,9 @@ +package com.com.cnu.devlog_springboot.model.response; + +public record ErrorResponse( + String title, + Integer status, + Integer code, + String instance +) { +} 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..1cc53d6 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); } 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..4dfb1ca --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java @@ -0,0 +1,11 @@ +package com.com.cnu.devlog_springboot.repository; + +import com.com.cnu.devlog_springboot.model.Project; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface ProjectRepository extends JpaRepository { +} \ No newline at end of file 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..5d7b198 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,15 +17,18 @@ 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(); } - public Post creatPost(PostRequest postRequest) { + public Post createPost(PostRequest postRequest) { return postRepository.save(new Post( null, postRequest.title(), - postRequest.contents(), + postRequest.content(), postRequest.tag() )); } @@ -30,7 +37,7 @@ public Post updatePost(Integer postId, PostRequest postRequest) { return postRepository.findById(postId) .map(post -> { post.setTitle(postRequest.title()); - post.setContents(postRequest.contents()); + post.setContents(postRequest.content()); return postRepository.save(post); }) .orElse(null); @@ -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) { 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..bb1d672 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/service/ProjectService.java @@ -0,0 +1,55 @@ +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 lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +@Service +@AllArgsConstructor +public class ProjectService { + private final ProjectRepository projectRepository; + + public List getProjects() { + return projectRepository.findAll(); + } + + public Project createProject(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.setContents(projectRequest.contents()); + project.setSummary(projectRequest.summary()); + 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) { + projectRepository.findById(projectId) + .ifPresent(projectRepository::delete); + } +} \ No newline at end of file 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..d0e06d4 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/type/ErrorCode.java @@ -0,0 +1,20 @@ +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, 4001,"해당 프로젝트를 찾을 수 없습니다."); + 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; + } +}