Skip to content

Commit

Permalink
YEL-213 [feat] conflict solve
Browse files Browse the repository at this point in the history
  • Loading branch information
hyeonjeongs committed Feb 10, 2024
2 parents 269e57b + c854cd2 commit e80b65b
Show file tree
Hide file tree
Showing 11 changed files with 90 additions and 33 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

## Tech Stack

- [Spring Boot 2.7](https://spring.io/blog/2022/09/22/spring-boot-2-7-4-available-now)
- [Spring Boot 3.2.2](https://spring.io/blog/2024/01/19/spring-boot-3-2-2-available-now)
with [Java 17](https://docs.oracle.com/en/java/javase/17/docs/api/index.html)
- [MySQL](https://dev.mysql.com/doc/) & [JPA](https://docs.spring.io/spring-data/jpa/docs/current/reference/html/)
- [JUnit5](https://junit.org/junit5/docs/current/user-guide/) for testing
Expand Down
1 change: 0 additions & 1 deletion src/docs/asciidoc/find-event.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ include::{snippets}/api/v1/event/3/http-response.adoc[]
=== NOTE

- *!* LUNCH_EVENT에 해당하는 Response가 없거나, LUNCH_EVENT Response의 eventReward가 null이면, 메인화면 접속시, 이벤트 화면을 띄워주지마세요.
- 이벤트 참여 요청, 이벤트 보상 반환 API 문서 작성중..

=== CHANGELOG

Expand Down
7 changes: 5 additions & 2 deletions src/docs/asciidoc/user-data-get.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@

=== 요청

include::{snippets}/api/v1/user/data/read/http-request.adoc[]
include::{snippets}/api/v1/user/data/read/1/http-request.adoc[]

*필드 타입*

- "TAG": "account-updated-at" | "recommended" | "withdraw-reason"

=== 응답

include::{snippets}/api/v1/user/data/read/http-response.adoc[]
include::{snippets}/api/v1/user/data/read/1/http-response.adoc[]
include::{snippets}/api/v1/user/data/read/2/http-response.adoc[]

*필드 타입*

Expand All @@ -20,6 +21,7 @@ include::{snippets}/api/v1/user/data/read/http-response.adoc[]
* ACCOUNT_UPDATED_AT일 때, `{boolean}|{updated_at}|{created_at}` 를 반환합니다.
** boolean 및 updated_at 값을 parse하여 사용해주세요.
** 예시) **"false|2024-01-31|2024-01-31"**
** "updated_at": "YYYY-mm-dd" | null

=== NOTE

Expand All @@ -28,5 +30,6 @@ include::{snippets}/api/v1/user/data/read/http-response.adoc[]

=== CHANGELOG

- 2024.02.10 응답 케이스 추가
- 2024.01.30 릴리즈
- 2024.01.09 명세 작성
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,10 @@ public class EventReward {

@Column
private String image;

@Column
private String rewardTitle;

@Column
private String rewardImage;
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,10 @@ public List<EventResponse> getEvents(Long userId) throws JsonProcessingException
}

// 해당 변수로 클라가 이벤트를 띄울지 판단하게 됨.
// 이벤트 시간대가 있고, 보상 카운트가 0인 참여이력이 없을
// 이벤트 시간대가 있고, 보상 카운트가 0인 참여이력의 숫자가 RewardCount 보다 적을
// k번 이벤트 참여는 보상 카운트로 구현한다.
boolean isEventAvailable = !eventTimeList.isEmpty() && eventInstanceList.isEmpty();
boolean isEventAvailable =
!eventTimeList.isEmpty() && (eventTimeList.get(0).getRewardCount() > eventInstanceList.size());

final EventTime eventTime = isEventAvailable ? eventTimeList.get(0) : null;
final List<EventRewardMapping> eventRewardMappingList =
Expand Down Expand Up @@ -157,7 +158,7 @@ public void joinEvent(Long userId, UUID uuidIdempotencyKey, EventJoinRequest req
.eventHistory(newEventHistory)
.eventTime(eventTime)
.instanceDate(now)
.remainEventCount(eventTime.getRewardCount())
.remainEventCount(1L)
.build());
}

Expand Down Expand Up @@ -202,16 +203,17 @@ public EventRewardResponse rewardEvent(Long userId, UUID uuidIdempotencyKey)
final EventRewardMapping randomRewardMapping = selectRandomly(eventRewardMappingList);
final long randomValue = selectRandomValue(randomRewardMapping);

final EventInstanceReward eventInstanceReward =
eventRepository.save(EventInstanceReward.builder()
.eventInstance(eventInstance.get())
.rewardTag(randomRewardMapping.getEventReward().getTag())
.rewardValue(randomValue)
.rewardTitle(String.format("%d %s를 얻었어요!", randomValue,
randomRewardMapping.getEventReward().getTag()))
.rewardImage(randomRewardMapping.getEventReward().getImage())
.build());
final EventInstanceReward eventInstanceReward = eventRepository.save(EventInstanceReward.builder()
.eventInstance(eventInstance.get())
.rewardTag(randomRewardMapping.getEventReward().getTag())
.rewardValue(randomValue)
.rewardTitle(String.format(randomRewardMapping.getEventReward().getRewardTitle(), randomValue))
.rewardImage(randomRewardMapping.getEventReward().getRewardImage())
.build());

/**
* TODO 그냥 문자열로 저장하고 있는데, 어떻게 해야 enum의 문제를 극복하면서 switch와 함꼐 사용할 수 있을지 고민해야함.
*/
if (randomRewardMapping.getEventReward().getTag().equals("TICKET")) {
user.addTicketCount((int) randomValue);
} else if (randomRewardMapping.getEventReward().getTag().equals("POINT")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,6 @@ public void updateUserProfile(Long userId, UserUpdateRequest request) {
UserDataType.ACCOUNT_UPDATED_AT);

// logic
user.update(request, gender, userGroup);

if (!request.groupInfoEquals(user)) {
if (userData.isPresent()) {
userData.get().setValue(
Expand All @@ -159,6 +157,7 @@ public void updateUserProfile(Long userId, UserUpdateRequest request) {
));
}
}
user.update(request, gender, userGroup);
}

public UserDataResponse readUserData(Long userId, UserDataType tag) {
Expand Down
3 changes: 0 additions & 3 deletions src/main/resources/static/docs/find-event.html
Original file line number Diff line number Diff line change
Expand Up @@ -696,9 +696,6 @@ <h3 id="_note">NOTE</h3>
<li>
<p><strong>!</strong> LUNCH_EVENT에 해당하는 Response가 없거나, LUNCH_EVENT Response의 eventReward가 null이면, 메인화면 접속시, 이벤트 화면을 띄워주지마세요.</p>
</li>
<li>
<p>이벤트 참여 요청, 이벤트 보상 반환 API 문서 작성중..</p>
</li>
</ul>
</div>
</div>
Expand Down
10 changes: 5 additions & 5 deletions src/main/resources/static/docs/reward-event.html
Original file line number Diff line number Diff line change
Expand Up @@ -470,8 +470,8 @@ <h3 id="_응답">응답</h3>
"data" : {
"rewardTag" : "TICKET",
"rewardValue" : 1,
"rewardTitle" : "1 열람권를 얻었어요!",
"rewardImage" : "https://storage.googleapis.com/yelloworld/image/coin-stack.svg"
"rewardTitle" : "열람권 1개를 얻었어요!",
"rewardImage" : "https://storage.googleapis.com/yelloworld/image/ticket-reward.svg"
}
}</code></pre>
</div>
Expand All @@ -489,9 +489,9 @@ <h3 id="_응답">응답</h3>
"message" : "이벤트 보상에 성공하였습니다.",
"data" : {
"rewardTag" : "POINT",
"rewardValue" : 100,
"rewardTitle" : "200 포인트를 얻었어요!",
"rewardImage" : "https://storage.googleapis.com/yelloworld/image/coin-stack.svg"
"rewardValue" : 79,
"rewardTitle" : "79 포인트를 얻었어요!",
"rewardImage" : "https://storage.googleapis.com/yelloworld/image/coin-reward.svg"
}
}</code></pre>
</div>
Expand Down
24 changes: 24 additions & 0 deletions src/main/resources/static/docs/user-data-get.html
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,24 @@ <h3 id="_응답">응답</h3>
}</code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight nowrap"><code class="language-http" data-lang="http">HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json

{
"status" : 200,
"message" : "유저 데이터 조회에 성공하였습니다.",
"data" : {
"tag" : "account-updated-at",
"value" : "true|null|2024-01-31"
}
}</code></pre>
</div>
</div>
<div class="paragraph">
<p><strong>필드 타입</strong></p>
</div>
Expand All @@ -505,6 +523,9 @@ <h3 id="_응답">응답</h3>
<li>
<p>예시) <strong>"false|2024-01-31|2024-01-31"</strong></p>
</li>
<li>
<p>"updated_at": "YYYY-mm-dd" | null</p>
</li>
</ul>
</div>
</li>
Expand Down Expand Up @@ -532,6 +553,9 @@ <h3 id="_changelog">CHANGELOG</h3>
<div class="ulist">
<ul>
<li>
<p>2024.02.10 응답 케이스 추가</p>
</li>
<li>
<p>2024.01.30 릴리즈</p>
</li>
<li>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -463,8 +463,8 @@ class EventControllerTest {
EventRewardResponse response = EventRewardResponse.builder()
.rewardTag("TICKET")
.rewardValue(1L)
.rewardImage("https://storage.googleapis.com/yelloworld/image/coin-stack.svg")
.rewardTitle("1 열람권를 얻었어요!")
.rewardTitle(String.format("열람권 %s개를 얻었어요!", 1L))
.rewardImage("https://storage.googleapis.com/yelloworld/image/ticket-reward.svg")
.build();

given(eventService.rewardEvent(any(Long.class), any(UUID.class)))
Expand Down Expand Up @@ -495,9 +495,9 @@ class EventControllerTest {
*/
EventRewardResponse response = EventRewardResponse.builder()
.rewardTag("POINT")
.rewardValue(100L)
.rewardImage("https://storage.googleapis.com/yelloworld/image/coin-stack.svg")
.rewardTitle("200 포인트를 얻었어요!")
.rewardValue(79L)
.rewardTitle(String.format("%s 포인트를 얻었어요!", 79L))
.rewardImage("https://storage.googleapis.com/yelloworld/image/coin-reward.svg")
.build();

given(eventService.rewardEvent(any(Long.class), any(UUID.class)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ void init() {
}

@Test
void 유저_데이터_조회에_성공합니다() throws Exception {
void 유저_데이터_조회에_성공합니다1() throws Exception {
// given
final UserDataResponse response =
UserDataResponse.builder()
Expand All @@ -336,7 +336,34 @@ void init() {
.contentType(MediaType.APPLICATION_JSON)
)
.andDo(print())
.andDo(document("api/v1/user/data/read",
.andDo(document("api/v1/user/data/read/1",
Preprocessors.preprocessRequest(excludeRequestHeaders),
Preprocessors.preprocessResponse(excludeResponseHeaders)
))
.andExpect(MockMvcResultMatchers.status().isOk());
}

@Test
void 유저_데이터_조회에_성공합니다2() throws Exception {
// given
final UserDataResponse response =
UserDataResponse.builder()
.tag(UserDataType.ACCOUNT_UPDATED_AT.getInitial())
.value("true|null|2024-01-31")
.build();

given(userService.readUserData(any(Long.class), any(UserDataType.class)))
.willReturn(response);
// when

// then
mockMvc.perform(RestDocumentationRequestBuilders.get("/api/v1/user/data/{tag}",
UserDataType.ACCOUNT_UPDATED_AT.getInitial())
.header(HttpHeaders.AUTHORIZATION, "Bearer your-access-token")
.contentType(MediaType.APPLICATION_JSON)
)
.andDo(print())
.andDo(document("api/v1/user/data/read/2",
Preprocessors.preprocessRequest(excludeRequestHeaders),
Preprocessors.preprocessResponse(excludeResponseHeaders)
))
Expand Down

0 comments on commit e80b65b

Please sign in to comment.