From b1311afca68ca49d34718bda8f6f1b530cca92ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=83=81=EC=A4=80?= <69718646+sangjun19@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:28:12 +0900 Subject: [PATCH 1/8] Update deployment_scp.yml --- .github/workflows/deployment_scp.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/deployment_scp.yml b/.github/workflows/deployment_scp.yml index 8d91ebb..25e1bda 100644 --- a/.github/workflows/deployment_scp.yml +++ b/.github/workflows/deployment_scp.yml @@ -46,10 +46,10 @@ jobs: - name: Send jar to remote server uses: appleboy/scp-action@master with: - host: {나의 public ip} - username: {나의 userName} + host: 34.64.108.151 + username: sangjun0319 source: "devlog_springboot-0.0.1-SNAPSHOT.jar" - target: "/home/{나의 userName}" + target: "/home/sangjun0319" key: ${{ secrets.PRIVATE_KEY }} run-app: @@ -61,16 +61,16 @@ jobs: - name: Move deploy.sh uses: appleboy/scp-action@master with: - host: {나의 public ip} - username: {나의 userName} + host: 34.64.108.151 + username: sangjun0319 source: "deploy.sh" target: "/home/{나의 userName}" key: ${{ secrets.PRIVATE_KEY }} - name: Execute script uses: appleboy/ssh-action@master with: - username: {나의 userName} - host: {나의 public ip} + username: sangjun0319 + host: 34.64.108.151 key: ${{ secrets.PRIVATE_KEY }} script_stop: true - script: cd /home/{나의 userName} && chmod +x deploy.sh && ./deploy.sh + script: cd /home/sangjun0319 && chmod +x deploy.sh && ./deploy.sh From 20144d588e347fa9dc389a727ee5bcb9e347b888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=83=81=EC=A4=80?= <69718646+sangjun19@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:29:22 +0900 Subject: [PATCH 2/8] Create README.md --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..3ad7759 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +hello world1 From a98185aa0a7042c085f142c79f847562263de3b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=83=81=EC=A4=80?= <69718646+sangjun19@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:30:45 +0900 Subject: [PATCH 3/8] 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..25e1bda --- /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.108.151 + username: sangjun0319 + source: "devlog_springboot-0.0.1-SNAPSHOT.jar" + target: "/home/sangjun0319" + 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.108.151 + username: sangjun0319 + source: "deploy.sh" + target: "/home/{나의 userName}" + key: ${{ secrets.PRIVATE_KEY }} + - name: Execute script + uses: appleboy/ssh-action@master + with: + username: sangjun0319 + host: 34.64.108.151 + key: ${{ secrets.PRIVATE_KEY }} + script_stop: true + script: cd /home/sangjun0319 && chmod +x deploy.sh && ./deploy.sh From af0c31e64d406e1cf2947577d344645c60c12d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=83=81=EC=A4=80?= <69718646+sangjun19@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:43:11 +0900 Subject: [PATCH 4/8] Delete .github/workflows/deployment_scp.yml --- .github/workflows/deployment_scp.yml | 76 ---------------------------- 1 file changed, 76 deletions(-) delete mode 100644 .github/workflows/deployment_scp.yml diff --git a/.github/workflows/deployment_scp.yml b/.github/workflows/deployment_scp.yml deleted file mode 100644 index 25e1bda..0000000 --- a/.github/workflows/deployment_scp.yml +++ /dev/null @@ -1,76 +0,0 @@ -# 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.108.151 - username: sangjun0319 - source: "devlog_springboot-0.0.1-SNAPSHOT.jar" - target: "/home/sangjun0319" - 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.108.151 - username: sangjun0319 - source: "deploy.sh" - target: "/home/{나의 userName}" - key: ${{ secrets.PRIVATE_KEY }} - - name: Execute script - uses: appleboy/ssh-action@master - with: - username: sangjun0319 - host: 34.64.108.151 - key: ${{ secrets.PRIVATE_KEY }} - script_stop: true - script: cd /home/sangjun0319 && chmod +x deploy.sh && ./deploy.sh From 3c2f497fd72fd5b17c0108d92363a9b7109051d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=83=81=EC=A4=80?= <69718646+sangjun19@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:43:34 +0900 Subject: [PATCH 5/8] Update blank.yml --- .github/workflows/blank.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml index 25e1bda..3565d23 100644 --- a/.github/workflows/blank.yml +++ b/.github/workflows/blank.yml @@ -24,7 +24,7 @@ jobs: - name: Set up JDK 17 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 2888b21060da1dfa16ad065478bba76455cb6f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=83=81=EC=A4=80?= <69718646+sangjun19@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:49:02 +0900 Subject: [PATCH 6/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ad7759..a042389 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -hello world1 +hello world! From 108a036bc5e7a412ac7aac0f92e04a908986c8b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=83=81=EC=A4=80?= <69718646+sangjun19@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:52:31 +0900 Subject: [PATCH 7/8] 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 3565d23..8483c72 100644 --- a/.github/workflows/blank.yml +++ b/.github/workflows/blank.yml @@ -21,7 +21,7 @@ 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: '21' @@ -64,7 +64,7 @@ jobs: host: 34.64.108.151 username: sangjun0319 source: "deploy.sh" - target: "/home/{나의 userName}" + target: "/home/sangjun0319" key: ${{ secrets.PRIVATE_KEY }} - name: Execute script uses: appleboy/ssh-action@master From d3c496d0509ac2cf8faf2b9983fea65b38c57c38 Mon Sep 17 00:00:00 2001 From: sangjun19 Date: Sun, 5 May 2024 14:52:29 +0900 Subject: [PATCH 8/8] first commit --- .../controller/ProjectController.java | 52 +++++++++++++++++ .../exception/DevlogException.java | 11 ++++ .../exception/GlobalExceptionHandler.java | 25 ++++++++ .../model/response/ErrorResponse.java | 9 +++ .../repository/ProjectRepository.java | 10 ++++ .../service/ProjectService.java | 57 +++++++++++++++++++ .../cnu/devlog_springboot/type/ErrorCode.java | 31 ++++++++++ 7 files changed, 195 insertions(+) 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/ProjectController.java b/src/main/java/com/com/cnu/devlog_springboot/controller/ProjectController.java new file mode 100644 index 0000000..be0333c --- /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.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(); + } +} 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..3d9d1cd --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/exception/GlobalExceptionHandler.java @@ -0,0 +1,25 @@ +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; + +@ControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(com.com.cnu.devlog_springboot.exception.DevlogException.class) + public ResponseEntity handleDevlogException( + HttpServletRequest request, com.com.cnu.devlog_springboot.exception.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/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/ProjectRepository.java b/src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java new file mode 100644 index 0000000..87b8243 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/repository/ProjectRepository.java @@ -0,0 +1,10 @@ +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; + +@Repository +public interface ProjectRepository extends JpaRepository { + +} 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..bed7379 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/service/ProjectService.java @@ -0,0 +1,57 @@ +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.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +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); + } +} 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..9ce82a5 --- /dev/null +++ b/src/main/java/com/com/cnu/devlog_springboot/type/ErrorCode.java @@ -0,0 +1,31 @@ +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; + } + +} \ No newline at end of file