diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/advice/Advice.java b/src/main/java/org/kau/kkoolbeeServer/domain/advice/Advice.java index 8d74a15..820f320 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/advice/Advice.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/advice/Advice.java @@ -4,8 +4,15 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; @Entity +@Getter +@Setter +@NoArgsConstructor public class Advice { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -15,4 +22,8 @@ public class Advice { String spicy_advice; + public Advice(String kind_advice, String spicy_advice) { + this.kind_advice = kind_advice; + this.spicy_advice = spicy_advice; + } } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/advice/dto/AdviceResponseDto.java b/src/main/java/org/kau/kkoolbeeServer/domain/advice/dto/AdviceResponseDto.java new file mode 100644 index 0000000..1f88183 --- /dev/null +++ b/src/main/java/org/kau/kkoolbeeServer/domain/advice/dto/AdviceResponseDto.java @@ -0,0 +1,12 @@ +package org.kau.kkoolbeeServer.domain.advice.dto; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AdviceResponseDto { + private String spicy; + private String kind; +} diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java index c09f3ea..5a4d9b8 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java @@ -1,6 +1,9 @@ package org.kau.kkoolbeeServer.domain.diary; import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.kau.kkoolbeeServer.domain.advice.Advice; import org.kau.kkoolbeeServer.domain.member.Member; import org.kau.kkoolbeeServer.global.common.domain.BaseTimeEntity; @@ -10,6 +13,9 @@ import java.util.List; @Entity +@Getter +@Setter +@NoArgsConstructor public class Diary extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -33,18 +39,10 @@ public class Diary extends BaseTimeEntity { @Column(nullable = false,length = 1000) private String content; - private String title; - - - - - - - - - + private String imageurl; + private String title; } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java new file mode 100644 index 0000000..6ea3066 --- /dev/null +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java @@ -0,0 +1,73 @@ +package org.kau.kkoolbeeServer.domain.diary.controller; + +import org.kau.kkoolbeeServer.domain.advice.dto.AdviceResponseDto; +import org.kau.kkoolbeeServer.domain.diary.Diary; +import org.kau.kkoolbeeServer.domain.diary.dto.request.DiaryContentRequestDto; +import org.kau.kkoolbeeServer.domain.diary.dto.response.DiaryContentResponseDto; +import org.kau.kkoolbeeServer.domain.diary.service.DiaryService; +import org.kau.kkoolbeeServer.global.common.dto.ApiResponse; +import org.kau.kkoolbeeServer.global.common.dto.enums.ErrorType; +import org.kau.kkoolbeeServer.global.common.dto.enums.SuccessType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Optional; + +@RestController +public class DiaryController { + + private DiaryService diaryService; + @Autowired + public DiaryController(DiaryService diaryService) { + this.diaryService = diaryService; + } + + @PostMapping("/api/diary/content") + public ResponseEntity> getDiaryContents(@RequestBody DiaryContentRequestDto diaryContentRequestDto) { + + Long diaryId = diaryContentRequestDto.getDiaryId(); + + + try{ + Optional diaryOptional = diaryService.findDiaryById(diaryId); + if (diaryOptional.isPresent()) { + + Diary diary = diaryOptional.get(); + // Diary의 Advice 정보를 AdviceResponseDto 객체로 변환 + AdviceResponseDto adviceResponseDto = new AdviceResponseDto( + diary.getAdvice().getSpicy_advice(), //여기서 null이 나오면 ? + diary.getAdvice().getKind_advice() + ); + + + DiaryContentResponseDto responseDto = new DiaryContentResponseDto( + diary.getContent(), + adviceResponseDto, + diary.getFeeling().toString(), + diary.getImageurl(), + diary.getTitle() + ); + + return ResponseEntity.ok().body(ApiResponse.success(SuccessType.PROCESS_SUCCESS, responseDto)); + } else { + return ResponseEntity.status(ErrorType.REQUEST_VALIDATION_EXCEPTION.getHttpStatus()) + .body(ApiResponse.error(ErrorType.REQUEST_VALIDATION_EXCEPTION)); + //diary 가 null 일 경우 요청이상함 반환 + } + + } catch (Exception e){ + + return ResponseEntity.status(ErrorType.INTERNAL_SERVER_ERROR.getHttpStatus()) + .body(ApiResponse.error(ErrorType.INTERNAL_SERVER_ERROR)); + //다른 오류가 났을 경우 서버에러 + + } + + } + + +} \ No newline at end of file diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/request/DiaryContentRequestDto.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/request/DiaryContentRequestDto.java new file mode 100644 index 0000000..8f48855 --- /dev/null +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/request/DiaryContentRequestDto.java @@ -0,0 +1,14 @@ +package org.kau.kkoolbeeServer.domain.diary.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class DiaryContentRequestDto { + private Long diaryId; +} diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/response/DiaryContentResponseDto.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/response/DiaryContentResponseDto.java new file mode 100644 index 0000000..8bd60b0 --- /dev/null +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/dto/response/DiaryContentResponseDto.java @@ -0,0 +1,21 @@ +package org.kau.kkoolbeeServer.domain.diary.dto.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.kau.kkoolbeeServer.domain.advice.dto.AdviceResponseDto; +@JsonPropertyOrder({ "diary_content", "advice","feeling","imageUrl","diartTitle"}) + +@Getter +@AllArgsConstructor +public class DiaryContentResponseDto { + @JsonProperty("diary_content") + private String diaryContent; + private AdviceResponseDto advice; + private String feeling; + private String imageUrl; + private String diaryTitle; + + +} diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/repository/DiaryRepository.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/repository/DiaryRepository.java new file mode 100644 index 0000000..4329161 --- /dev/null +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/repository/DiaryRepository.java @@ -0,0 +1,13 @@ +package org.kau.kkoolbeeServer.domain.diary.repository; + +import org.kau.kkoolbeeServer.domain.diary.Diary; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DiaryRepository extends JpaRepository { + + + + +} diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java new file mode 100644 index 0000000..7a06556 --- /dev/null +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java @@ -0,0 +1,29 @@ +package org.kau.kkoolbeeServer.domain.diary.service; + +import org.kau.kkoolbeeServer.domain.diary.Diary; +import org.kau.kkoolbeeServer.domain.diary.repository.DiaryRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.swing.text.html.Option; +import java.util.Optional; + +@Service +public class DiaryService { + + private DiaryRepository diaryRepository; + + @Autowired + public DiaryService(DiaryRepository diaryRepository) { + this.diaryRepository = diaryRepository; + } + + public Optional findDiaryById(Long diary_id){ + + return diaryRepository.findById(diary_id); + + + } + + +} diff --git a/src/main/java/org/kau/kkoolbeeServer/global/common/dto/ApiResponse.java b/src/main/java/org/kau/kkoolbeeServer/global/common/dto/ApiResponse.java index 62edcb2..afe2caa 100644 --- a/src/main/java/org/kau/kkoolbeeServer/global/common/dto/ApiResponse.java +++ b/src/main/java/org/kau/kkoolbeeServer/global/common/dto/ApiResponse.java @@ -10,14 +10,15 @@ import org.kau.kkoolbeeServer.global.common.dto.enums.SuccessType; @Getter -@JsonPropertyOrder({"code", "message", "data"}) +@JsonPropertyOrder({"status","message", "data"}) @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class ApiResponse { - private final int code; // 상태 코드 + private final int status; // 상태 코드 private final String message; // 회원 조회가 정상 처리되었습니다! + @JsonInclude(JsonInclude.Include.NON_NULL) private T data; // 객체가 실제로 들어감 diff --git a/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/ErrorType.java b/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/ErrorType.java index c6d79c5..ffbb7b0 100644 --- a/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/ErrorType.java +++ b/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/ErrorType.java @@ -17,7 +17,7 @@ public enum ErrorType { /** * 500 INTERNAL SERVER ERROR */ - INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "알 수 없는 서버 에러가 발생했습니다."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부 오류"), ; private final HttpStatus httpStatus; diff --git a/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/SuccessType.java b/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/SuccessType.java index b664160..159611a 100644 --- a/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/SuccessType.java +++ b/src/main/java/org/kau/kkoolbeeServer/global/common/dto/enums/SuccessType.java @@ -12,7 +12,7 @@ public enum SuccessType { /** * 200 OK */ - PROCESS_SUCCESS(HttpStatus.OK, "OK"), + PROCESS_SUCCESS(HttpStatus.CREATED, "요청이 성공했습니다."), //api 명세서에 201로 나와있기에 바꿨습니다 ; private final HttpStatus httpStatus; diff --git a/src/test/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryControllerTest.java b/src/test/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryControllerTest.java new file mode 100644 index 0000000..526063a --- /dev/null +++ b/src/test/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryControllerTest.java @@ -0,0 +1,74 @@ +package org.kau.kkoolbeeServer.domain.diary.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.kau.kkoolbeeServer.domain.advice.Advice; +import org.kau.kkoolbeeServer.domain.advice.dto.AdviceResponseDto; +import org.kau.kkoolbeeServer.domain.diary.Diary; +import org.kau.kkoolbeeServer.domain.diary.Feeling; +import org.kau.kkoolbeeServer.domain.diary.dto.request.DiaryContentRequestDto; + +import org.kau.kkoolbeeServer.domain.diary.dto.response.DiaryContentResponseDto; +import org.kau.kkoolbeeServer.domain.diary.service.DiaryService; +import org.kau.kkoolbeeServer.global.common.dto.ApiResponse; +import org.kau.kkoolbeeServer.global.common.dto.enums.SuccessType; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.Optional; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; + +@ExtendWith(SpringExtension.class) +@WebMvcTest(DiaryController.class) +public class DiaryControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private DiaryService diaryService; + + @Autowired + private ObjectMapper objectMapper; + + @Test + public void testGetDiaryContents() throws Exception { + // Given + DiaryContentRequestDto requestDto = new DiaryContentRequestDto(); + requestDto.setDiary_id(1L); + + Advice advice = new Advice(); // Advice 객체 생성 + advice.setSpicy_advice("spicy_advice"); + advice.setKind_advice("kind_advice"); + Diary diary = new Diary(); // Diary 객체 생성 + diary.setContent("안뇽안뇽안뇽안뇽"); + diary.setFeeling(Feeling.ANGRY); + diary.setAdvice(advice); // Diary 객체에 Advice 설정 + + + AdviceResponseDto adviceResponseDto = new AdviceResponseDto("spicy_advice", "kind_advice"); + DiaryContentResponseDto responseDto = new DiaryContentResponseDto(diary.getContent(), adviceResponseDto,diary.getFeeling().toString()); + given(diaryService.findDiaryById(any(Long.class))).willReturn(Optional.of(diary)); + + // When & Then + mockMvc.perform(post("/api/diary/content") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(requestDto))) + .andExpect(status().isOk()) + .andExpect(content().json(objectMapper.writeValueAsString(ApiResponse.success(SuccessType.PROCESS_SUCCESS, responseDto)))) + .andDo(print()); + + } +}