diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml new file mode 100644 index 0000000..6e6873f --- /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.132.78 + username: p4rker911 + source: "real_coding_server-0.0.1-SNAPSHOT.jar" + target: "/home/p4rker911" + 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.132.78 + username: p4rker911 + source: "deploy.sh" + target: "/home/p4rker911" + key: ${{ secrets.PRIVATE_KEY }} + - name: Execute script + uses: appleboy/ssh-action@master + with: + username: p4rker911 + host: 34.64.132.78 + key: ${{ secrets.PRIVATE_KEY }} + script_stop: true + script: cd /home/p4rker911 && chmod +x deploy.sh && ./deploy.sh diff --git a/README.md b/README.md index 32187be..57db5b6 100644 --- a/README.md +++ b/README.md @@ -37,3 +37,7 @@ WebMvcConfig에서 CORS를 위해 추가한 파일이라고 알아주시면 될 글솜씨가 없어 간단히 적었지만, 토이프로젝트를 하다보면 정말 자주 마주치는 문제 중 하나가 CORS입니다!!! 기본적인 지식이기도 하니 시간되실 때 아래의 블로그를 읽어보셔도 좋을 것 같습니다 📌 https://it-eldorado.tistory.com/163 + + +배포 중단 확인0 +배포 중단 확인1 diff --git a/src/main/java/com/cnu/real_coding_server/config/WebMVCConfig.java b/src/main/java/com/cnu/real_coding_server/config/WebMVCConfig.java deleted file mode 100644 index 2348439..0000000 --- a/src/main/java/com/cnu/real_coding_server/config/WebMVCConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.cnu.real_coding_server.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -public class WebMVCConfig implements WebMvcConfigurer { - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowCredentials(true) - .allowedMethods("*") - .allowedOriginPatterns("*"); - } -} diff --git a/src/main/java/com/cnu/real_coding_server/controller/PostController.java b/src/main/java/com/cnu/real_coding_server/controller/PostController.java index c31c90e..e210259 100644 --- a/src/main/java/com/cnu/real_coding_server/controller/PostController.java +++ b/src/main/java/com/cnu/real_coding_server/controller/PostController.java @@ -31,13 +31,12 @@ public ResponseEntity getPost(@PathVariable("postId") Integer postId) { } @PutMapping("/{postId}") - public ResponseEntity updatePost(@PathVariable("postId")Integer postId, - @RequestBody PostRequest postRequest) { + public ResponseEntity updatePost(@PathVariable("postId") Integer postId, @RequestBody PostRequest postRequest) { return ResponseEntity.ok(postService.updatePost(postId, postRequest).orElse(null)); } @DeleteMapping("/{postId}") - public ResponseEntity deletePost(@PathVariable("postId") Integer postId) { + public ResponseEntity deletePost(@PathVariable("postId")Integer postId) { postService.deletePost(postId); return ResponseEntity.noContent().build(); diff --git a/src/main/java/com/cnu/real_coding_server/controller/ProjectController.java b/src/main/java/com/cnu/real_coding_server/controller/ProjectController.java new file mode 100644 index 0000000..24bc0d6 --- /dev/null +++ b/src/main/java/com/cnu/real_coding_server/controller/ProjectController.java @@ -0,0 +1,44 @@ +package com.cnu.real_coding_server.controller; + +import com.cnu.real_coding_server.entity.Project; +import com.cnu.real_coding_server.model.request.ProjectRequest; +import com.cnu.real_coding_server.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; + + @PostMapping + public ResponseEntity createProject(@RequestBody ProjectRequest projectRequest) { + return ResponseEntity.ok(projectService.createProject(projectRequest)); + } + + @GetMapping + public ResponseEntity> getProjects() { + return ResponseEntity.ok(projectService.getProjects()); + } + + @GetMapping("/{projectId}") + public ResponseEntity getProject(@PathVariable("projectId") Integer projectId) { + return ResponseEntity.ok(projectService.getProject(projectId).orElse(null)); + } + + @PutMapping("/{projectId}") + public ResponseEntity updateProject(@PathVariable("projectId") Integer projectId, @RequestBody ProjectRequest projectRequest) { + return ResponseEntity.ok(projectService.updateProject(projectId, projectRequest).orElse(null)); + } + + @DeleteMapping("/{projectId}") + public ResponseEntity deleteProject(@PathVariable("projectId")Integer projectId) { + projectService.deleteProject(projectId); + + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/com/cnu/real_coding_server/entity/Post.java b/src/main/java/com/cnu/real_coding_server/entity/Post.java deleted file mode 100644 index bb99748..0000000 --- a/src/main/java/com/cnu/real_coding_server/entity/Post.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.cnu.real_coding_server.entity; - -import com.cnu.real_coding_server.model.type.Tag; -import jakarta.persistence.*; -import lombok.*; - -@Getter -@Entity(name = "posts") -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Post extends BaseEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; - - @Column - @Setter - private String title; - - @Column - @Setter - private String contents; - - @Setter - @Enumerated(EnumType.STRING) - private Tag tag; - - @Builder - public Post(String title, String contents, Tag tag) { - this.title = title; - this.contents = contents; - this.tag = tag; - } -} diff --git a/src/main/java/com/cnu/real_coding_server/entity/Project.java b/src/main/java/com/cnu/real_coding_server/entity/Project.java index 07203b9..47a1240 100644 --- a/src/main/java/com/cnu/real_coding_server/entity/Project.java +++ b/src/main/java/com/cnu/real_coding_server/entity/Project.java @@ -1,12 +1,11 @@ package com.cnu.real_coding_server.entity; +import com.cnu.real_coding_server.model.type.Tag; import jakarta.persistence.*; import lombok.*; -import java.time.LocalDateTime; - @Getter -@Entity(name = "projects") +@Entity(name = "project") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Project extends BaseEntity { @Id @@ -19,36 +18,16 @@ public class Project extends BaseEntity { @Column @Setter - private String summary; - - @Column - @Setter - private String description; + private String contents; - @Column - @Setter - private LocalDateTime startDate; - - @Column - @Setter - private LocalDateTime endDate; - - @Column @Setter - private Boolean isInProgress; + @Enumerated(EnumType.STRING) + private Tag tag; @Builder - private Project(String title, - String summary, - String description, - LocalDateTime startDate, - LocalDateTime endDate, - Boolean isInProgress) { + public Project(String title, String contents, Tag tag) { this.title = title; - this.summary = summary; - this.description = description; - this.startDate = startDate; - this.endDate = endDate; - this.isInProgress = isInProgress; + this.contents = contents; + this.tag = tag; } } diff --git a/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java b/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java index 5bd6733..e8943c1 100644 --- a/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java +++ b/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java @@ -3,12 +3,10 @@ import com.cnu.real_coding_server.entity.Post; import com.cnu.real_coding_server.model.type.Tag; -import jakarta.validation.Valid; import lombok.Getter; @Getter public class PostRequest { - @Valid private String title; private String contents; diff --git a/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java b/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java index 2e80181..736933c 100644 --- a/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java +++ b/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java @@ -1,32 +1,22 @@ package com.cnu.real_coding_server.model.request; + import com.cnu.real_coding_server.entity.Project; +import com.cnu.real_coding_server.model.type.Tag; import lombok.Getter; -import java.time.LocalDateTime; - @Getter public class ProjectRequest { private String title; + private String contents; - private String summary; - - private String description; - - private LocalDateTime startDate; - - private LocalDateTime endDate; - - private Boolean isInProgress; + private Tag tag; public Project toEntity() { return Project.builder() .title(title) - .summary(summary) - .description(description) - .startDate(startDate) - .endDate(endDate) - .isInProgress(isInProgress) + .contents(contents) + .tag(tag) .build(); } } diff --git a/src/main/java/com/cnu/real_coding_server/repository/PostRepository.java b/src/main/java/com/cnu/real_coding_server/repository/PostRepository.java deleted file mode 100644 index 0366c87..0000000 --- a/src/main/java/com/cnu/real_coding_server/repository/PostRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.cnu.real_coding_server.repository; - -import com.cnu.real_coding_server.entity.Post; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface PostRepository extends JpaRepository { -// Post save(Post post); -// List findAll(); -// Optional findById(Integer postId); -// void delete(Post post); -} diff --git a/src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java b/src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java index 2296df6..b8419f3 100644 --- a/src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java +++ b/src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java @@ -6,8 +6,8 @@ @Repository public interface ProjectRepository extends JpaRepository { -// Project save(Project post); +// Project save(Project project); // 정록: JpaRepository 상속 받아서 아래 함수들을 알아서 제공해줌 // List findAll(); -// Optional findById(Integer projectId); -// void delete(Project projectId); +// Optional findById(Integer ProjcetId); +// void delete(Project project); } diff --git a/src/main/java/com/cnu/real_coding_server/service/PostService.java b/src/main/java/com/cnu/real_coding_server/service/PostService.java index 490a745..2647129 100644 --- a/src/main/java/com/cnu/real_coding_server/service/PostService.java +++ b/src/main/java/com/cnu/real_coding_server/service/PostService.java @@ -12,9 +12,7 @@ @Service @RequiredArgsConstructor public class PostService { - private final PostRepository postRepository; - public Post createPost(PostRequest postRequest) { return postRepository.save(postRequest.toEntity()); } @@ -33,6 +31,7 @@ public Optional updatePost(Integer postId, PostRequest postRequest) { post.setTitle(postRequest.getTitle()); post.setContents(postRequest.getContents()); post.setTag(postRequest.getTag()); + return postRepository.save(post); }); } diff --git a/src/main/java/com/cnu/real_coding_server/service/ProjectService.java b/src/main/java/com/cnu/real_coding_server/service/ProjectService.java new file mode 100644 index 0000000..b424e99 --- /dev/null +++ b/src/main/java/com/cnu/real_coding_server/service/ProjectService.java @@ -0,0 +1,43 @@ +package com.cnu.real_coding_server.service; + +import com.cnu.real_coding_server.entity.Project; +import com.cnu.real_coding_server.model.request.ProjectRequest; +import com.cnu.real_coding_server.repository.ProjectRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class ProjectService { + private final ProjectRepository projectRepository; + public Project createProject(ProjectRequest projectRequest) { + return projectRepository.save(projectRequest.toEntity()); + } + + public List getProjects() { + return projectRepository.findAll(); + } + + public Optional getProject(Integer projectId) { + return projectRepository.findById(projectId); + } + + public Optional updateProject(Integer projectId, ProjectRequest projectRequest) { + return projectRepository.findById(projectId) + .map(project -> { + project.setTitle(projectRequest.getTitle()); + project.setContents(projectRequest.getContents()); + project.setTag(projectRequest.getTag()); + + return projectRepository.save(project); + }); + } + + public void deleteProject(Integer projectId) { + projectRepository.findById(projectId) + .ifPresent(projectRepository::delete); + } +}