Skip to content

Commit

Permalink
Tht server 199 유저의 오늘의 대화주제 선택여부 조회 api (#201)
Browse files Browse the repository at this point in the history
* docs : 대화주제선택여부 api 문서화

* test : 대화주제 선택여부 인수테스트

* Feat : 유저의 오늘의 대화주제 선택여부 조회 api
  • Loading branch information
thalals authored Apr 30, 2024
1 parent dc27811 commit 320ae01
Show file tree
Hide file tree
Showing 8 changed files with 254 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.tht.api.app.entity.user.User;
import com.tht.api.app.facade.main.DailyFallingFacade;
import com.tht.api.app.facade.main.response.DailyTopicChooseResponse;
import com.tht.api.app.facade.main.response.TalkKeywordResponse;
import com.tht.api.app.facade.main.response.DailyFallingResponse;
import java.util.List;
Expand All @@ -27,8 +28,8 @@ public ResponseEntity<DailyFallingResponse> getDailyFallingList() {

@PostMapping("/falling/choice/daily-keyword/{daily-falling-idx}")
public ResponseEntity<Object> chooseFallingKeyword(
@PathVariable(name = "daily-falling-idx") final long dailyFallingIdx,
@AuthenticationPrincipal User user
@PathVariable(name = "daily-falling-idx") final long dailyFallingIdx,
@AuthenticationPrincipal User user
) {

dailyFallingFacade.chooseDailyFallingKeyword(dailyFallingIdx, user.getUserUuid());
Expand All @@ -40,4 +41,10 @@ public ResponseEntity<List<TalkKeywordResponse>> getTalkKeyword() {

return ResponseEntity.ok(dailyFallingFacade.getTalkKeywords());
}

@GetMapping("/check/is-choose-daily-topic")
public ResponseEntity<DailyTopicChooseResponse> isChooseDailyTopic(@AuthenticationPrincipal User user) {

return ResponseEntity.ok(dailyFallingFacade.checkIsChooseDailyTopicUser(user));
}
}
18 changes: 16 additions & 2 deletions src/main/java/com/tht/api/app/facade/main/DailyFallingFacade.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
package com.tht.api.app.facade.main;

import com.tht.api.app.entity.meta.DailyFallingActiveTimeTable;
import com.tht.api.app.entity.user.User;
import com.tht.api.app.facade.Facade;
import com.tht.api.app.facade.main.response.DailyFallingResponse;
import com.tht.api.app.facade.main.response.DailyFallingTopicResponse;
import com.tht.api.app.facade.main.response.DailyTopicChooseResponse;
import com.tht.api.app.facade.main.response.TalkKeywordResponse;
import com.tht.api.app.repository.mapper.DailyFallingTimeMapper;
import com.tht.api.app.service.DailyFallingActiveService;
import com.tht.api.app.service.DailyFallingService;
import com.tht.api.app.service.TalkKeywordService;
import com.tht.api.app.service.UserDailyFallingService;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Facade
@Transactional
@RequiredArgsConstructor
Expand Down Expand Up @@ -54,4 +58,14 @@ public List<TalkKeywordResponse> getTalkKeywords() {
.map(TalkKeywordResponse::of)
.toList();
}

public DailyTopicChooseResponse checkIsChooseDailyTopicUser(final User user) {

Optional<DailyFallingTimeMapper> chooseTodayDailyFallingInfo = userDailyFallingService.findChooseTodayDailyFallingInfo(user.getUserUuid());

if (chooseTodayDailyFallingInfo.isPresent()) {
return DailyTopicChooseResponse.isChooseDone();
}
return DailyTopicChooseResponse.isNotChoose();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.tht.api.app.facade.main.response;

public record DailyTopicChooseResponse(
boolean isChoose
) {

public static DailyTopicChooseResponse isChooseDone() {
return new DailyTopicChooseResponse(true);
}

public static DailyTopicChooseResponse isNotChoose() {
return new DailyTopicChooseResponse(false);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,7 @@
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.NOT_FOUND;

import com.tht.api.exception.custom.AligoException;
import com.tht.api.exception.custom.EntityStateException;
import com.tht.api.exception.custom.EnumStateNotFoundException;
import com.tht.api.exception.custom.LikeException;
import com.tht.api.exception.custom.UserCustomException;
import com.tht.api.exception.custom.UserDailyFallingException;
import com.tht.api.exception.custom.UserTokenException;
import com.tht.api.exception.custom.*;
import jakarta.servlet.http.HttpServletRequest;
import java.time.format.DateTimeParseException;
import org.springframework.http.HttpStatus;
Expand Down Expand Up @@ -148,5 +142,13 @@ public ResponseEntity<ErrorResponse> handlerException(final UserTokenException e
ErrorResponse.of(e.getStatusValue(), e.getReasonParse(), e.getMessage(), request)
);
}
@ExceptionHandler
public ResponseEntity<ErrorResponse> handlerException(final DailyFallingException e,
final HttpServletRequest request) {

return ResponseEntity.badRequest().body(
ErrorResponse.of(BAD_REQUEST, e.getMessage(), request)
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.tht.api.exception.custom;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DailyFallingException extends RuntimeException {

public DailyFallingException(final String message) {
super(message);
}

public static DailyFallingException notExist() {
return new DailyFallingException("오늘의 폴링 주제어가 존재하지 않습니다.");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.tht.api.app.acceptance;

import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
import io.restassured.response.Response;
import org.springframework.http.MediaType;

public class DailyFallingAcceptanceStep {

public static ExtractableResponse<Response> 그날의주제어_선택여부_조회_요청(String accessToken) {
return RestAssured.given().log().all()
.auth().oauth2(accessToken)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.when()
.get("/check/is-choose-daily-topic")
.then().log().all()
.extract();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.tht.api.app.acceptance;

import com.tht.api.app.acceptance.config.AcceptanceTest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static com.tht.api.app.acceptance.DailyFallingAcceptanceStep.그날의주제어_선택여부_조회_요청;
import static com.tht.api.app.acceptance.UserAcceptanceStep.그날의_대화토픽_선택_요청;
import static com.tht.api.app.acceptance.UserAcceptanceStep.신규유저_생성_요청_후_토큰추출;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;

public class DailyFallingAcceptanceTest extends AcceptanceTest {

@DisplayName("유저의 오늘의 토픽주제 선택여부 확인 - 미선택시 false")
@Test
public void isChooseDailyTopicFalse() {

//give
var = 신규유저_생성_요청_후_토큰추출("일반 사용자1", "01065689787");
그날의주제어_생성_요청();

//when
var response = 그날의주제어_선택여부_조회_요청();

//then
assertAll(
() -> assertThat(response.statusCode()).isEqualTo(200),
() -> assertThat(response.jsonPath().getBoolean("isChoose")).isFalse()

);

}

@DisplayName("유저의 오늘의 토픽주제 선택여부 확인 - 선택시 true")
@Test
public void isChooseDailyTopicTrue() {

//give
var = 신규유저_생성_요청_후_토큰추출("일반 사용자1", "01065689787");
var dailyFalling = 그날의주제어_생성_요청();

그날의_대화토픽_선택_요청(dailyFalling.getIdx(), );

//when
var response = 그날의주제어_선택여부_조회_요청();

//then
assertAll(
() -> assertThat(response.statusCode()).isEqualTo(200),
() -> assertThat(response.jsonPath().getBoolean("isChoose")).isTrue()

);

}
}
Loading

0 comments on commit 320ae01

Please sign in to comment.