Skip to content

Commit

Permalink
YEL-213 [feat] 해당 유저에게 reward 제공
Browse files Browse the repository at this point in the history
  • Loading branch information
hyeonjeongs committed Feb 10, 2024
1 parent e80b65b commit 90d010b
Show file tree
Hide file tree
Showing 22 changed files with 291 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ public void recommendUser(String recommendYelloId, String userYelloId) {
UserDataType.RECOMMENDED);

recommendedUser.addRecommendCount(1L);
recommendedUser.addPoint(RECOMMEND_POINT);
user.addPoint(RECOMMEND_POINT);
recommendedUser.addPointBySubscribe(RECOMMEND_POINT);
user.addPointBySubscribe(RECOMMEND_POINT);
if (recommended.isEmpty()) {
recommendedUser.addTicketCount(1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
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.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;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ser.Serializers.Base;
import com.yello.server.domain.event.dto.request.AdmobRewardRequest;
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;
Expand Down Expand Up @@ -63,7 +66,7 @@ public BaseResponse<EventRewardResponse> rewardEvent(@AccessTokenUser User user,
}

@GetMapping("/v1/admob/verify")
public BaseResponse verifyAdmobReward(HttpServletRequest request) {
public BaseResponse verifyAdmob(HttpServletRequest request) {
URI uri;
try {
uri =
Expand All @@ -72,9 +75,13 @@ public BaseResponse verifyAdmobReward(HttpServletRequest request) {
} catch (URISyntaxException e) {
throw new EventBadRequestException(ADMOB_URI_BAD_REQUEST_EXCEPTION);
}

eventService.verifyAdmobReward(uri, request);

return BaseResponse.success(VERIFY_ADMOB_SSV_SUCCESS);
}

@PostMapping("/v1/admob/reward")
public BaseResponse<EventRewardResponse> rewardAdmob(@AccessTokenUser User user, @RequestBody AdmobRewardRequest request) {
val data = eventService.rewardAdmob(user.getId(), request);
return BaseResponse.success(REWARD_ADMOB_SUCCESS, data);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.yello.server.domain.event.dto.request;

import lombok.Builder;

@Builder
public record AdmobRewardRequest(
String rewardType,
String randomType,
String uuid,
Integer rewardNumber
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,8 @@ public static EventHistory of(User user, UUID uuidIdempotencyKey) {
.idempotencyKey(uuidIdempotencyKey)
.build();
}

public void update(User user) {
this.user = user;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.yello.server.domain.event.entity;

import static com.yello.server.global.common.util.ConstantUtil.GlobalZoneId;

import com.yello.server.global.common.entity.ZonedDateTimeConverter;
import jakarta.persistence.Column;
import jakarta.persistence.Convert;
Expand All @@ -10,6 +12,7 @@
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import java.time.OffsetTime;
import java.time.ZonedDateTime;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
Expand Down Expand Up @@ -48,6 +51,15 @@ public class EventInstance {
@Builder.Default
private Long remainEventCount = 0L;

public static EventInstance of(EventTime eventTime, EventHistory eventHistory) {
ZonedDateTime now = ZonedDateTime.now(GlobalZoneId);
return EventInstance.builder()
.eventHistory(eventHistory)
.eventTime(eventTime)
.instanceDate(now)
.build();
}

public void subRemainEventCount(Long amount) {
this.remainEventCount -= amount;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,14 @@ public class EventInstanceReward extends AuditingTimeEntity {

@Column
private String rewardImage;
public static EventInstanceReward of(EventInstance eventInstance, EventReward eventReward) {
return EventInstanceReward.builder()
.eventInstance(eventInstance)
.rewardTag(eventReward.getTag())
.rewardValue(eventReward.getMinRewardValue())
.rewardTitle(eventReward.getRewardTitle())
.rewardImage(eventReward.getRewardImage())
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,8 @@ public class EventReward {

@Column
private String rewardImage;

public void updateMinRewardValue(Long rewardValue) {
this.minRewardValue = rewardValue;
}
}
32 changes: 32 additions & 0 deletions src/main/java/com/yello/server/domain/event/entity/RandomType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.yello.server.domain.event.entity;

import static com.yello.server.global.common.ErrorCode.ENUM_BAD_REQUEST_EXCEPTION;

import com.yello.server.global.exception.EnumIllegalArgumentException;
import java.util.Arrays;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum RandomType {
FIXED("FIXED"),
RANDOM("RANDOM"),
ADMOB_RANDOM("ADMOB_RANDOM");

private final String initial;

public static RandomType fromCode(String dbData) {
return Arrays.stream(RandomType.values())
.filter(v -> v.getInitial().equals(dbData))
.findAny()
.orElseThrow(() -> new EnumIllegalArgumentException(ENUM_BAD_REQUEST_EXCEPTION));
}

public static RandomType fromName(String name) {
return Arrays.stream(RandomType.values())
.filter(v -> v.name().equals(name))
.findAny()
.orElseThrow(() -> new EnumIllegalArgumentException(ENUM_BAD_REQUEST_EXCEPTION));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.yello.server.domain.event.entity;

import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;
import lombok.extern.log4j.Log4j2;

@Converter
@Log4j2
public class RandomTypeConverter implements AttributeConverter<RandomType, String> {

@Override
public String convertToDatabaseColumn(RandomType type) {
if (type == null) {
return null;
}
return type.name();
}

@Override
public RandomType convertToEntityAttribute(String dbData) {
if (dbData == null) {
return null;
}

return RandomType.fromName(dbData);
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/yello/server/domain/event/entity/RewardType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.yello.server.domain.event.entity;

import static com.yello.server.global.common.ErrorCode.ENUM_BAD_REQUEST_EXCEPTION;

import com.yello.server.global.exception.EnumIllegalArgumentException;
import java.util.Arrays;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum RewardType {
POINT("POINT"),
TICKET("TICKET"),
ADMOB_POINT("ADMOB_POINT"),
ADMOB_MULTIPLE_POINT("ADMOB_MULTIPLE_POINT");

private final String initial;

public static RewardType fromCode(String dbData) {
return Arrays.stream(RewardType.values())
.filter(v -> v.getInitial().equals(dbData))
.findAny()
.orElseThrow(() -> new EnumIllegalArgumentException(ENUM_BAD_REQUEST_EXCEPTION));
}

public static RewardType fromName(String name) {
return Arrays.stream(RewardType.values())
.filter(v -> v.name().equals(name))
.findAny()
.orElseThrow(() -> new EnumIllegalArgumentException(ENUM_BAD_REQUEST_EXCEPTION));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.yello.server.domain.event.entity;

import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;
import lombok.extern.log4j.Log4j2;

@Converter
@Log4j2
public class RewardTypeConverter implements AttributeConverter<RewardType, String> {

@Override
public String convertToDatabaseColumn(RewardType type) {
if (type == null) {
return null;
}
return type.name();
}

@Override
public RewardType convertToEntityAttribute(String dbData) {
if (dbData == null) {
return null;
}

return RewardType.fromName(dbData);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.yello.server.domain.event.exception;

import com.yello.server.global.common.ErrorCode;
import com.yello.server.global.exception.CustomException;

public class EventForbiddenException extends CustomException {

public EventForbiddenException(ErrorCode error) {
super(error, "[EventForbiddenException] " + error.getMessage());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,7 @@ public interface EventRepository {
Optional<EventHistory> findHistoryByIdempotencyKey(UUID idempotencyKey);

Optional<EventInstance> findInstanceByEventHistory(EventHistory eventHistory);

EventReward findRewardByTag(String rewardTag);
EventRewardMapping findRewardMappingByEventRewardId(Long eventRewardId);
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.yello.server.domain.event.repository;

import static com.yello.server.domain.event.entity.QEventReward.eventReward;
import static com.yello.server.domain.event.entity.QEventRewardMapping.eventRewardMapping;
import static com.yello.server.global.common.ErrorCode.EVENT_NOT_FOUND_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.EVENT_RANDOM_NOT_FOUND_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.NOT_FOUND_EVENT_REWARD_EXCEPTION;

import com.querydsl.jpa.impl.JPAQueryFactory;
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 Down Expand Up @@ -32,6 +36,7 @@ public class EventRepositoryImpl implements EventRepository {
private final EventRewardJpaRepository eventRewardJpaRepository;
private final EventRewardMappingJpaRepository eventRewardMappingJpaRepository;
private final EventTimeJpaRepository eventTimeJpaRepository;
private final JPAQueryFactory jpaQueryFactory;

@Override
public EventHistory save(EventHistory newEventHistory) {
Expand Down Expand Up @@ -100,4 +105,18 @@ public Optional<EventHistory> findHistoryByIdempotencyKey(UUID idempotencyKey) {
public Optional<EventInstance> findInstanceByEventHistory(EventHistory eventHistory) {
return eventInstanceJpaRepository.findTopByEventHistory(eventHistory);
}

@Override
public EventReward findRewardByTag(String rewardTag) {
return Optional.ofNullable(jpaQueryFactory.selectFrom(eventReward)
.where(eventReward.tag.eq(rewardTag))
.fetchOne()).orElseThrow(() -> new EventNotFoundException(NOT_FOUND_EVENT_REWARD_EXCEPTION));
}

@Override
public EventRewardMapping findRewardMappingByEventRewardId(Long eventRewardId) {
return Optional.ofNullable(jpaQueryFactory.selectFrom(eventRewardMapping)
.where(eventRewardMapping.eventReward.id.eq(eventRewardId))
.fetchOne()).orElseThrow(() -> new EventNotFoundException(NOT_FOUND_EVENT_REWARD_EXCEPTION));
}
}
Loading

0 comments on commit 90d010b

Please sign in to comment.