diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..3b4dc80 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,57 @@ +name: Post_CI/CI + +on: + push: + branches: + - kkb +jobs: + cicd-deploy: + runs-on: ubuntu-latest + steps: + - name: Github Repository내 파일들 checkout(불러오기) 수행 + uses: actions/checkout@v4 + + # JDK 17 버전 설치 + - name: JDK 17 버전 설치 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' # See 'Supported distributions' for available options + java-version: '17' + - name: application.properties 동적 생성 + run : | + echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.properties + + - name: 단위 테스트 및 빌드 + run: | + chmod +x ./gradlew + ./gradlew clean build + - name: 관리상 빌드된 결과물의 이름을 변경 처리 + run: | + mv ./build/libs/*SNAPSHOT.jar ./run.jar + ls + + - name: EC2에 jar파일 업로드 + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + source: run.jar + target: /home/ubuntu/server/demo + + - name : SSH로 EC2에 접속후 서버가동 + uses: appleboy/ssh-action@v1.2.0 + + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + script_stop: true + script: | + rm -rf /home/ubuntu/server/web + mkdir /home/ubuntu/server/web + mv /home/ubuntu/server/demo/run.jar /home/ubuntu/server/web/run.jar + cd /home/ubuntu/server/web + sudo fuser -k -n tcp 8080 || true + nohup java -jar run.jar > ./output.log 2>&1 & + rm -rf /home/ubuntu/server/demo \ No newline at end of file diff --git a/.gitignore b/.gitignore index c2065bc..7f915e8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ +application.properties ### STS ### .apt_generated diff --git a/src/main/java/com/example/minipro2_post/controller/CommentController.java b/src/main/java/com/example/minipro2_post/controller/CommentController.java index 965d738..7c1d848 100644 --- a/src/main/java/com/example/minipro2_post/controller/CommentController.java +++ b/src/main/java/com/example/minipro2_post/controller/CommentController.java @@ -3,6 +3,7 @@ import com.example.minipro2_post.dto.CommentDto; import com.example.minipro2_post.service.CommentService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -10,6 +11,7 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.List; /** @@ -55,8 +57,20 @@ public ResponseEntity createComment( .bodyToMono(Long.class); Long uid = webClient.block(); // 동기 처리 +// List gid = new ArrayList<>(); + // GID 확인 + Mono> webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() + .get() + .uri(uriBuilder -> uriBuilder.path("/user/groupCheck") + .queryParam("email", email).build()) + .retrieve() + .bodyToMono(new ParameterizedTypeReference>() {}) // List로 먼저 받아서 + .map(list -> list.stream() + .map(obj -> ((Number) obj).longValue()) // Object → Number → Long 변환 + .toList()); - commentService.addComment(commentDto, pid,uid); + List gid = webClient_2.block(); + commentService.addComment(commentDto, pid,uid,gid); return ResponseEntity.ok("댓글 저장완료"); } // 댓글 수정 진행 diff --git a/src/main/java/com/example/minipro2_post/controller/SearchController.java b/src/main/java/com/example/minipro2_post/controller/SearchController.java index 514bca6..c9214e2 100644 --- a/src/main/java/com/example/minipro2_post/controller/SearchController.java +++ b/src/main/java/com/example/minipro2_post/controller/SearchController.java @@ -5,9 +5,13 @@ import com.example.minipro2_post.repository.PostRepository; import com.example.minipro2_post.service.SearchService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -27,6 +31,9 @@ public class SearchController { @Autowired private PostRepository postRepository; + @Autowired + private WebClient.Builder webClientBuilder; + // 메인 페이지 테스트 @GetMapping @@ -55,6 +62,36 @@ public ResponseEntity search(@RequestBody HashMap map) { List postDtoList = null; +// Mono webClient = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List result = webClient.block(); + +// System.out.println(result); + +// Mono webClient = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List result = webClient.block(); + +// System.out.println(result); + +// Mono webClient = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List result = webClient.block(); + +// System.out.println(result); + try { if("tag".equals(type)) { postDtoList = searchService.searchByTag(searchString); @@ -67,6 +104,15 @@ public ResponseEntity search(@RequestBody HashMap map) { } catch (Exception e) { return ResponseEntity.ok("해당 이메일을 가진 사용자가 없습니다."); } + List postIds = new ArrayList<>(); + for (PostEntity postEntity1 : postEntity) { + if (!postEntity1.getGid().equals(0)) { + postIds.add(postEntity1.getGid()); + } + } + for (int i = postIds.size() - 1; i >= 0; i--) { + postEntity.remove(postIds.get(i)); + } if (postDtoList == null || postDtoList.isEmpty()) { return ResponseEntity.ok("검색 결과가 없습니다"); diff --git a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java index 2bb0d54..8e5891b 100644 --- a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java @@ -12,6 +12,8 @@ public interface CommentRepository extends JpaRepository { List findByPid(PostEntity post); + List findByUid(PostEntity post); + // 특정 사용자가 작성한 모든 댓글 삭제 @Modifying @Transactional diff --git a/src/main/java/com/example/minipro2_post/repository/PostRepository.java b/src/main/java/com/example/minipro2_post/repository/PostRepository.java index 3c429a2..639febd 100644 --- a/src/main/java/com/example/minipro2_post/repository/PostRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/PostRepository.java @@ -16,6 +16,7 @@ public interface PostRepository extends JpaRepository { List findByUid(Long uid); + // uid로 게시글 삭제 @Modifying @Transactional diff --git a/src/main/java/com/example/minipro2_post/service/CommentService.java b/src/main/java/com/example/minipro2_post/service/CommentService.java index 10d0889..52a9794 100644 --- a/src/main/java/com/example/minipro2_post/service/CommentService.java +++ b/src/main/java/com/example/minipro2_post/service/CommentService.java @@ -32,10 +32,18 @@ public class CommentService { private CommentEventPublisher commentEventPublisher; // 댓글 추가 - public void addComment(CommentDto commentDto, Long pid, Long uid) { + public void addComment(CommentDto commentDto, Long pid, Long uid, List gids) { Optional postEntity = postRepository.findById(pid); - if (postEntity.isPresent()) { + Boolean gidCheck = false; + // public 확인 + if (postEntity.get().getGid() ==0L) gidCheck = true; + + for (Long gid:gids) { + if (gid == postEntity.get().getGid()) gidCheck = true; + } + System.out.println(postEntity.isPresent()+" / "+postEntity.get().getGid() +" / "+gids); + if (postEntity.isPresent() && gidCheck ) { CommentEntity commentEntity = CommentEntity.builder() .pid(postEntity.get()) .uid(commentDto.getUid()) diff --git a/src/main/java/com/example/minipro2_post/service/PostService.java b/src/main/java/com/example/minipro2_post/service/PostService.java index 0842649..6942d29 100644 --- a/src/main/java/com/example/minipro2_post/service/PostService.java +++ b/src/main/java/com/example/minipro2_post/service/PostService.java @@ -48,10 +48,11 @@ else if(!postDto.getType().equals("public") &&!postDto.getType().equals("groupOnly")) { throw new RuntimeException("게시글 타입이 옳지 않거나 공백입니다."); } + PostEntity postEntity = PostEntity.builder() .uid(result) .type(postDto.getType()) - .gid(postDto.getGid() != null ? postDto.getGid() : 0L) + .gid(postDto.getType().equals("public") ? 0L : postDto.getGid()) .date(postDto.getDate() != null ? postDto.getDate() : LocalDateTime.now()) .content(postDto.getContent()) .youLike(postDto.getLike() != null ? postDto.getLike() : 0L) diff --git a/src/main/resources/1 b/src/main/resources/1 new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 94ab4dc..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,38 +0,0 @@ -spring.application.name=post -# \uC11C\uBE44\uC2A4 \uD3EC\uD2B8 \uC124\uC815 -server.port=8081 - - -# \uC720\uB808\uCE74 \uC11C\uBC84 \uC5F0\uACB0 -eureka.client.service-url.defaultZone=http://localhost:8761/eureka -# \uD5EC\uC2A4 \uCCB4\uD06C -# \uAE30\uBCF8 30\uCD08 -> 15\uCD08 \uC8FC\uAE30 \uC870\uC815 -eureka.instance.lease-renewal-interval-in-seconds=15 -# \uAE30\uBCF8 90\uCD08 -> 20\uCD08 \uC815\uB3C4 \uB300\uAE30 -eureka.instance.lease-expiration-duration-in-seconds=20 - - -# RDS mysql -spring.datasource.url=jdbc:mysql://localhost:3306/miniproject -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password=p1234 - -# No-SQL redis -spring.data.redis.host=localhost -spring.data.redis.port=6379 -spring.data.redis.repositories.enabled=false - -# kafka -spring.kafka.bootstrap-servers=localhost:9092 -spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.auto-offset-reset=earliest -spring.kafka.consumer.group-id=test-group -spring.kafka.listener.missing-topics-fatal=false - -# JPA -spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file