Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#24 diary content api #25

Closed
wants to merge 9 commits into from
11 changes: 11 additions & 0 deletions src/main/java/org/kau/kkoolbeeServer/domain/advice/Advice.java
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
18 changes: 8 additions & 10 deletions src/main/java/org/kau/kkoolbeeServer/domain/diary/Diary.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -10,6 +13,9 @@
import java.util.List;

@Entity
@Getter
@Setter
@NoArgsConstructor
public class Diary extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -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;


}
Original file line number Diff line number Diff line change
@@ -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<ApiResponse<?>> getDiaryContents(@RequestBody DiaryContentRequestDto diaryContentRequestDto) {

Long diaryId = diaryContentRequestDto.getDiaryId();


try{
Optional<Diary> 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));
//다른 오류가 났을 경우 서버에러

}

}


}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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;


}
Original file line number Diff line number Diff line change
@@ -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<Diary,Long> {




}
Original file line number Diff line number Diff line change
@@ -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<Diary> findDiaryById(Long diary_id){

return diaryRepository.findById(diary_id);


}


}
Original file line number Diff line number Diff line change
Expand Up @@ -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<T> {

private final int code; // 상태 코드
private final int status; // 상태 코드
private final String message; // 회원 조회가 정상 처리되었습니다!


@JsonInclude(JsonInclude.Include.NON_NULL)
private T data; // 객체가 실제로 들어감

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public enum SuccessType {
/**
* 200 OK
*/
PROCESS_SUCCESS(HttpStatus.OK, "OK"),
PROCESS_SUCCESS(HttpStatus.CREATED, "요청이 성공했습니다."), //api 명세서에 201로 나와있기에 바꿨습니다
;

private final HttpStatus httpStatus;
Expand Down
Original file line number Diff line number Diff line change
@@ -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());

}
}
Loading