Skip to content

Commit

Permalink
YEL-220 [feat] 광고 보고 포인트 얻기 여부 로직 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
hyeonjeongs committed Feb 16, 2024
1 parent 978bd46 commit 4b2bc7d
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static com.yello.server.global.common.SuccessCode.EVENT_JOIN_SUCCESS;
import static com.yello.server.global.common.SuccessCode.EVENT_NOTICE_SUCCESS;
import static com.yello.server.global.common.SuccessCode.EVENT_REWARD_SUCCESS;
import static com.yello.server.global.common.SuccessCode.GET_IS_POSSIBLE_ADMOB_SUCCESS;
import static com.yello.server.global.common.SuccessCode.REWARD_ADMOB_SUCCESS;
import static com.yello.server.global.common.SuccessCode.VERIFY_ADMOB_SSV_SUCCESS;
import static com.yello.server.global.common.util.ConstantUtil.IdempotencyKeyHeader;
Expand All @@ -14,6 +15,7 @@
import com.yello.server.domain.event.dto.request.EventJoinRequest;
import com.yello.server.domain.event.dto.response.EventResponse;
import com.yello.server.domain.event.dto.response.EventRewardResponse;
import com.yello.server.domain.event.dto.response.GetIsPossibleAdmob;
import com.yello.server.domain.event.exception.EventBadRequestException;
import com.yello.server.domain.event.service.EventService;
import com.yello.server.domain.user.entity.User;
Expand All @@ -30,6 +32,7 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand Down Expand Up @@ -89,4 +92,11 @@ public BaseResponse<EventRewardResponse> rewardAdmob(@AccessTokenUser User user,
val data = eventService.rewardAdmob(user.getId(), request);
return BaseResponse.success(REWARD_ADMOB_SUCCESS, data);
}

@GetMapping("/v1/admob/possible/{tag}")
public BaseResponse<GetIsPossibleAdmob> getIsPossibleAdmob(@AccessTokenUser User user, @PathVariable("tag") String tag) {
System.out.println(" asfsaasdfasdf");
val data = eventService.getIsPossibleAdmob(user.getId(), tag);
return BaseResponse.success(GET_IS_POSSIBLE_ADMOB_SUCCESS, data);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.yello.server.domain.event.dto.response;

import com.yello.server.domain.user.entity.UserData;
import com.yello.server.global.common.factory.TimeFactory;
import lombok.Builder;

@Builder
public record GetIsPossibleAdmob(
String createdAt,
Boolean isPossible
) {
public static GetIsPossibleAdmob of(UserData userAdmob) {
return GetIsPossibleAdmob.builder()
.createdAt(userAdmob.getValue())
.isPossible(userAdmob.isPossible())
.build();
}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package com.yello.server.domain.event.service;

import static com.yello.server.domain.user.entity.UserDataType.fromCode;
import static com.yello.server.global.common.ErrorCode.DUPLICATE_ADMOB_REWARD_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.EVENT_COUNT_BAD_REQUEST_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.EVENT_DATE_BAD_REQUEST_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.EVENT_TIME_BAD_REQUEST_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.IDEMPOTENCY_KEY_CONFLICT_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.IDEMPOTENCY_KEY_NOT_FOUND_EXCEPTION;
import static com.yello.server.global.common.factory.TimeFactory.minusTime;
import static com.yello.server.global.common.factory.TimeFactory.toDateFormattedString;
import static com.yello.server.global.common.util.ConstantUtil.ADMOB_SHOP_TIME;
import static com.yello.server.global.common.util.ConstantUtil.GlobalZoneId;

import com.fasterxml.jackson.core.JsonProcessingException;
Expand All @@ -17,6 +21,7 @@
import com.yello.server.domain.event.dto.request.EventJoinRequest;
import com.yello.server.domain.event.dto.response.EventResponse;
import com.yello.server.domain.event.dto.response.EventRewardResponse;
import com.yello.server.domain.event.dto.response.GetIsPossibleAdmob;
import com.yello.server.domain.event.entity.Event;
import com.yello.server.domain.event.entity.EventHistory;
import com.yello.server.domain.event.entity.EventInstance;
Expand All @@ -33,13 +38,16 @@
import com.yello.server.domain.event.exception.EventNotFoundException;
import com.yello.server.domain.event.repository.EventRepository;
import com.yello.server.domain.user.entity.User;
import com.yello.server.domain.user.entity.UserData;
import com.yello.server.domain.user.repository.UserDataRepository;
import com.yello.server.domain.user.repository.UserRepository;
import com.yello.server.global.common.factory.UuidFactory;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.net.URI;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.OffsetTime;
import java.time.ZonedDateTime;
import java.util.ArrayList;
Expand All @@ -61,6 +69,7 @@ public class EventService {
private final EventRepository eventRepository;
private final ObjectMapper objectMapper;
private final UserRepository userRepository;
private final UserDataRepository userDataRepository;

public List<EventResponse> getEvents(Long userId) throws JsonProcessingException {
// exception
Expand Down Expand Up @@ -290,9 +299,25 @@ public EventRewardResponse rewardAdmob(Long userId, AdmobRewardRequest request)
EventInstanceReward rewardInstance =
eventRepository.save(EventInstanceReward.of(eventInstance, eventReward));

// user-data cooldown 추가
UserData userAdmob =
userDataRepository.findByUserIdAndTag(userId, fromCode(request.rewardType()))
.orElseGet(() -> userDataRepository.save(UserData.of(fromCode(request.rewardType()),
toDateFormattedString(LocalDateTime.now()), user)));

userAdmob.setValue(toDateFormattedString(LocalDateTime.now()));

return EventRewardResponse.of(rewardInstance);
}

public GetIsPossibleAdmob getIsPossibleAdmob(Long userId, String tag) {
final User user = userRepository.getById(userId);
UserData userAdmob = userDataRepository.findByUserIdAndTag(userId, fromCode(tag))
.orElse(UserData.of(fromCode(tag),
toDateFormattedString(minusTime(LocalDateTime.now(), ADMOB_SHOP_TIME)), user));
return GetIsPossibleAdmob.of(userAdmob);
}

private EventReward handleRewardByType(AdmobRewardRequest request, User user) {
switch (RewardType.fromCode(request.rewardType())) {
case ADMOB_POINT -> {
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/yello/server/domain/user/entity/UserData.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.yello.server.domain.user.entity;

import static com.yello.server.global.common.factory.TimeFactory.getSecondsBetween;
import static com.yello.server.global.common.util.ConstantUtil.ADMOB_TIMER_TIME;

import com.yello.server.global.common.factory.TimeFactory;
import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
Expand All @@ -10,6 +14,8 @@
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down Expand Up @@ -53,4 +59,9 @@ public static UserData of(UserDataType tag, String value, User user) {
public void setValue(String value) {
this.value = value;
}

public Boolean isPossible(){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return TimeFactory.getSecondsBetween(LocalDateTime.now(), LocalDateTime.parse(this.value, formatter)) >= ADMOB_TIMER_TIME;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static com.yello.server.global.common.ErrorCode.ENUM_BAD_REQUEST_EXCEPTION;

import com.yello.server.global.exception.EnumIllegalArgumentException;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Arrays;
import lombok.Getter;
Expand All @@ -16,7 +17,8 @@ public enum UserDataType {
*/
WITHDRAW_REASON(String.class, "withdraw-reason"),
ACCOUNT_UPDATED_AT(ZonedDateTime.class, "account-updated-at"),
RECOMMENDED(ZonedDateTime.class, "recommended");
RECOMMENDED(ZonedDateTime.class, "recommended"),
ADMOB_POINT(LocalDateTime.class, "ADMOB_POINT");

private final Class<?> classType;
private final String initial;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public enum SuccessCode {
EVENT_JOIN_SUCCESS(OK, "이벤트 참여에 성공하였습니다."),
EVENT_REWARD_SUCCESS(OK, "이벤트 보상에 성공하였습니다."),
VERIFY_ADMOB_SSV_SUCCESS(OK, "Admob ssv 검증에 성공하였습니다."),
GET_IS_POSSIBLE_ADMOB_SUCCESS(OK, "광고 보고 포인트 얻기 가능 여부 조회에 성공했습니다."),

/**
* 201 CREATED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ public class ConstantUtil {
public static final int NO_FRIEND_COUNT = 0;
public static final int SUBSCRIBE_DAYS = 7;
public static final int PLUS_BASIC_TIME = 0;
public static final String USER_VOTE_TYPE = "send";
public static final String ALL_VOTE_TYPE = "all";
public static final int ADMOB_SHOP_TIME = 60;
public static final long ADMOB_TIMER_TIME = 3600L;

private ConstantUtil() {
throw new IllegalStateException();
Expand Down

0 comments on commit 4b2bc7d

Please sign in to comment.