Skip to content

Commit

Permalink
Merge pull request #7 from KTB-HACKATHON-TEAM-FLIGHT/feature/posts-li…
Browse files Browse the repository at this point in the history
…st-by-session

Feature: PPT 목록 및 반환 API 구현
  • Loading branch information
Youthhing authored Sep 5, 2024
2 parents 424a669 + 39c7338 commit 2816b7e
Show file tree
Hide file tree
Showing 9 changed files with 129 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/main/java/team/flight/backend/controller/PostController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import team.flight.backend.dto.FirstPostRequest;
import team.flight.backend.dto.PostDetailResponse;
import team.flight.backend.dto.PostsResponse;
import team.flight.backend.service.PostService;
import team.flight.backend.service.dto.FirstResponse;

Expand All @@ -27,4 +32,16 @@ public ResponseEntity<FirstResponse> sendFirstRequest(@RequestBody FirstPostRequ
return ResponseEntity.ok()
.body(postService.sendUserFirstRequest(UUID.fromString(request.sessionId()), request.postId(), request.request()));
}

@GetMapping
public ResponseEntity<PostsResponse> getPosts(@RequestParam("sessionId") String sessionId) {
return ResponseEntity.ok().body(postService.findAllPostsBy(UUID.fromString(sessionId)));
}

@Operation(summary = "특정 게시글 결과 조회 API")
@GetMapping("/{id}")
public ResponseEntity<PostDetailResponse> getPostDetail(@PathVariable("id") Long postId,
@RequestParam("sessionId") String sessionId) {
return ResponseEntity.ok().body(postService.findPostsBy(postId, UUID.fromString(sessionId)));
}
}
8 changes: 8 additions & 0 deletions src/main/java/team/flight/backend/dto/PostDetailResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package team.flight.backend.dto;

public record PostDetailResponse(
Long postId,
String request,
String result
) {
}
12 changes: 12 additions & 0 deletions src/main/java/team/flight/backend/dto/PostInfoResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package team.flight.backend.dto;

import team.flight.backend.entity.Post;

public record PostInfoResponse(
Long postId,
String request
) {
public static PostInfoResponse from(Post post) {
return new PostInfoResponse(post.getId(), post.getRequest());
}
}
10 changes: 10 additions & 0 deletions src/main/java/team/flight/backend/dto/PostsResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package team.flight.backend.dto;

import java.util.List;
import java.util.UUID;

public record PostsResponse(
UUID sessionId,
List<PostInfoResponse> posts
) {
}
16 changes: 16 additions & 0 deletions src/main/java/team/flight/backend/global/exception/ErrorCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package team.flight.backend.global.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
@AllArgsConstructor
public enum ErrorCode {

ENTITY_NOT_FOUND(HttpStatus.NOT_FOUND, 4004, "해당 객체가 존재하지 않습니다.")
;
private final HttpStatus httpStatus;
private final int code;
private final String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package team.flight.backend.global.exception;

import jakarta.servlet.http.HttpServletRequest;

public record ErrorResponse(
int code,
String message,
String method,
String requestURI
) {
public static ErrorResponse of(ErrorCode errorCode, HttpServletRequest request) {
return new ErrorResponse(
errorCode.getCode(),
errorCode.getMessage(),
request.getMethod(),
request.getRequestURI()
);
}

public static ErrorResponse of(HttpServletRequest request, ErrorCode errorCode, final String errorMessage) {
return new ErrorResponse(
errorCode.getCode(),
errorMessage,
request.getMethod(),
request.getRequestURI()
);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,23 @@
package team.flight.backend.global.exception;

import jakarta.persistence.EntityNotFoundException;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<ErrorResponse> handleEntityNotFoundException(HttpServletRequest request,
EntityNotFoundException ex) {
log.error("[Entity Not Found Exception 발생]: {}", ex.getMessage());
log.error("[발생 위치: {} {}]", request.getMethod(), request.getRequestURI());
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ErrorResponse.of(ErrorCode.ENTITY_NOT_FOUND, request));
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package team.flight.backend.repository;

import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.springframework.data.jpa.repository.JpaRepository;
import team.flight.backend.entity.Post;

public interface PostRepository extends JpaRepository<Post, Long> {
Optional<Post> findByIdAndSessionId(Long postId, UUID sessionId);

List<Post> findAllBySessionId(UUID sessionId);
}
21 changes: 21 additions & 0 deletions src/main/java/team/flight/backend/service/PostService.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package team.flight.backend.service;

import jakarta.persistence.EntityNotFoundException;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import team.flight.backend.dto.PostDetailResponse;
import team.flight.backend.dto.PostInfoResponse;
import team.flight.backend.dto.PostsResponse;
import team.flight.backend.entity.Post;
import team.flight.backend.repository.PostRepository;
import team.flight.backend.service.dto.FirstResponse;
Expand All @@ -28,4 +33,20 @@ public FirstResponse sendUserFirstRequest(UUID sessionId, Long postId, String re
postRepository.save(post);
return FirstResponse.from(post);
}

@Transactional(readOnly = true)
public PostsResponse findAllPostsBy(UUID sessionId) {
List<PostInfoResponse> response = postRepository.findAllBySessionId(sessionId).stream()
.map(PostInfoResponse::from)
.toList();
return new PostsResponse(sessionId, response);
}

@Transactional(readOnly = true)
public PostDetailResponse findPostsBy(Long postId, UUID sessionId) {
Post post = postRepository.findByIdAndSessionId(postId, sessionId)
.orElseThrow(() -> new EntityNotFoundException("해당 게시글을 찾을 수 없습니다."));

return new PostDetailResponse(post.getId(), post.getRequest(), post.getResult());
}
}

0 comments on commit 2816b7e

Please sign in to comment.