Skip to content

Commit 320ae01

Browse files
authored
Tht server 199 유저의 오늘의 대화주제 선택여부 조회 api (#201)
* docs : 대화주제선택여부 api 문서화 * test : 대화주제 선택여부 인수테스트 * Feat : 유저의 오늘의 대화주제 선택여부 조회 api
1 parent dc27811 commit 320ae01

File tree

8 files changed

+254
-84
lines changed

8 files changed

+254
-84
lines changed

src/main/java/com/tht/api/app/controller/DailyFallingController.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.tht.api.app.entity.user.User;
44
import com.tht.api.app.facade.main.DailyFallingFacade;
5+
import com.tht.api.app.facade.main.response.DailyTopicChooseResponse;
56
import com.tht.api.app.facade.main.response.TalkKeywordResponse;
67
import com.tht.api.app.facade.main.response.DailyFallingResponse;
78
import java.util.List;
@@ -27,8 +28,8 @@ public ResponseEntity<DailyFallingResponse> getDailyFallingList() {
2728

2829
@PostMapping("/falling/choice/daily-keyword/{daily-falling-idx}")
2930
public ResponseEntity<Object> chooseFallingKeyword(
30-
@PathVariable(name = "daily-falling-idx") final long dailyFallingIdx,
31-
@AuthenticationPrincipal User user
31+
@PathVariable(name = "daily-falling-idx") final long dailyFallingIdx,
32+
@AuthenticationPrincipal User user
3233
) {
3334

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

4142
return ResponseEntity.ok(dailyFallingFacade.getTalkKeywords());
4243
}
44+
45+
@GetMapping("/check/is-choose-daily-topic")
46+
public ResponseEntity<DailyTopicChooseResponse> isChooseDailyTopic(@AuthenticationPrincipal User user) {
47+
48+
return ResponseEntity.ok(dailyFallingFacade.checkIsChooseDailyTopicUser(user));
49+
}
4350
}

src/main/java/com/tht/api/app/facade/main/DailyFallingFacade.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package com.tht.api.app.facade.main;
22

33
import com.tht.api.app.entity.meta.DailyFallingActiveTimeTable;
4+
import com.tht.api.app.entity.user.User;
45
import com.tht.api.app.facade.Facade;
56
import com.tht.api.app.facade.main.response.DailyFallingResponse;
67
import com.tht.api.app.facade.main.response.DailyFallingTopicResponse;
8+
import com.tht.api.app.facade.main.response.DailyTopicChooseResponse;
79
import com.tht.api.app.facade.main.response.TalkKeywordResponse;
10+
import com.tht.api.app.repository.mapper.DailyFallingTimeMapper;
811
import com.tht.api.app.service.DailyFallingActiveService;
912
import com.tht.api.app.service.DailyFallingService;
1013
import com.tht.api.app.service.TalkKeywordService;
1114
import com.tht.api.app.service.UserDailyFallingService;
12-
import java.util.List;
13-
import java.util.Optional;
1415
import lombok.RequiredArgsConstructor;
1516
import org.springframework.transaction.annotation.Transactional;
1617

18+
import java.util.List;
19+
import java.util.Optional;
20+
1721
@Facade
1822
@Transactional
1923
@RequiredArgsConstructor
@@ -54,4 +58,14 @@ public List<TalkKeywordResponse> getTalkKeywords() {
5458
.map(TalkKeywordResponse::of)
5559
.toList();
5660
}
61+
62+
public DailyTopicChooseResponse checkIsChooseDailyTopicUser(final User user) {
63+
64+
Optional<DailyFallingTimeMapper> chooseTodayDailyFallingInfo = userDailyFallingService.findChooseTodayDailyFallingInfo(user.getUserUuid());
65+
66+
if (chooseTodayDailyFallingInfo.isPresent()) {
67+
return DailyTopicChooseResponse.isChooseDone();
68+
}
69+
return DailyTopicChooseResponse.isNotChoose();
70+
}
5771
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.tht.api.app.facade.main.response;
2+
3+
public record DailyTopicChooseResponse(
4+
boolean isChoose
5+
) {
6+
7+
public static DailyTopicChooseResponse isChooseDone() {
8+
return new DailyTopicChooseResponse(true);
9+
}
10+
11+
public static DailyTopicChooseResponse isNotChoose() {
12+
return new DailyTopicChooseResponse(false);
13+
}
14+
15+
}

src/main/java/com/tht/api/exception/ControllerExceptionHandler.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@
33
import static org.springframework.http.HttpStatus.BAD_REQUEST;
44
import static org.springframework.http.HttpStatus.NOT_FOUND;
55

6-
import com.tht.api.exception.custom.AligoException;
7-
import com.tht.api.exception.custom.EntityStateException;
8-
import com.tht.api.exception.custom.EnumStateNotFoundException;
9-
import com.tht.api.exception.custom.LikeException;
10-
import com.tht.api.exception.custom.UserCustomException;
11-
import com.tht.api.exception.custom.UserDailyFallingException;
12-
import com.tht.api.exception.custom.UserTokenException;
6+
import com.tht.api.exception.custom.*;
137
import jakarta.servlet.http.HttpServletRequest;
148
import java.time.format.DateTimeParseException;
159
import org.springframework.http.HttpStatus;
@@ -148,5 +142,13 @@ public ResponseEntity<ErrorResponse> handlerException(final UserTokenException e
148142
ErrorResponse.of(e.getStatusValue(), e.getReasonParse(), e.getMessage(), request)
149143
);
150144
}
145+
@ExceptionHandler
146+
public ResponseEntity<ErrorResponse> handlerException(final DailyFallingException e,
147+
final HttpServletRequest request) {
148+
149+
return ResponseEntity.badRequest().body(
150+
ErrorResponse.of(BAD_REQUEST, e.getMessage(), request)
151+
);
152+
}
151153

152154
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.tht.api.exception.custom;
2+
3+
import lombok.AccessLevel;
4+
import lombok.NoArgsConstructor;
5+
6+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
7+
public class DailyFallingException extends RuntimeException {
8+
9+
public DailyFallingException(final String message) {
10+
super(message);
11+
}
12+
13+
public static DailyFallingException notExist() {
14+
return new DailyFallingException("오늘의 폴링 주제어가 존재하지 않습니다.");
15+
}
16+
17+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.tht.api.app.acceptance;
2+
3+
import io.restassured.RestAssured;
4+
import io.restassured.response.ExtractableResponse;
5+
import io.restassured.response.Response;
6+
import org.springframework.http.MediaType;
7+
8+
public class DailyFallingAcceptanceStep {
9+
10+
public static ExtractableResponse<Response> 그날의주제어_선택여부_조회_요청(String accessToken) {
11+
return RestAssured.given().log().all()
12+
.auth().oauth2(accessToken)
13+
.contentType(MediaType.APPLICATION_JSON_VALUE)
14+
.when()
15+
.get("/check/is-choose-daily-topic")
16+
.then().log().all()
17+
.extract();
18+
}
19+
20+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.tht.api.app.acceptance;
2+
3+
import com.tht.api.app.acceptance.config.AcceptanceTest;
4+
import org.junit.jupiter.api.DisplayName;
5+
import org.junit.jupiter.api.Test;
6+
7+
import static com.tht.api.app.acceptance.DailyFallingAcceptanceStep.그날의주제어_선택여부_조회_요청;
8+
import static com.tht.api.app.acceptance.UserAcceptanceStep.그날의_대화토픽_선택_요청;
9+
import static com.tht.api.app.acceptance.UserAcceptanceStep.신규유저_생성_요청_후_토큰추출;
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
import static org.junit.jupiter.api.Assertions.assertAll;
12+
13+
public class DailyFallingAcceptanceTest extends AcceptanceTest {
14+
15+
@DisplayName("유저의 오늘의 토픽주제 선택여부 확인 - 미선택시 false")
16+
@Test
17+
public void isChooseDailyTopicFalse() {
18+
19+
//give
20+
var = 신규유저_생성_요청_후_토큰추출("일반 사용자1", "01065689787");
21+
그날의주제어_생성_요청();
22+
23+
//when
24+
var response = 그날의주제어_선택여부_조회_요청();
25+
26+
//then
27+
assertAll(
28+
() -> assertThat(response.statusCode()).isEqualTo(200),
29+
() -> assertThat(response.jsonPath().getBoolean("isChoose")).isFalse()
30+
31+
);
32+
33+
}
34+
35+
@DisplayName("유저의 오늘의 토픽주제 선택여부 확인 - 선택시 true")
36+
@Test
37+
public void isChooseDailyTopicTrue() {
38+
39+
//give
40+
var = 신규유저_생성_요청_후_토큰추출("일반 사용자1", "01065689787");
41+
var dailyFalling = 그날의주제어_생성_요청();
42+
43+
그날의_대화토픽_선택_요청(dailyFalling.getIdx(), );
44+
45+
//when
46+
var response = 그날의주제어_선택여부_조회_요청();
47+
48+
//then
49+
assertAll(
50+
() -> assertThat(response.statusCode()).isEqualTo(200),
51+
() -> assertThat(response.jsonPath().getBoolean("isChoose")).isTrue()
52+
53+
);
54+
55+
}
56+
}

0 commit comments

Comments
 (0)