battleEvent dynamoDB 저장 처리

This commit is contained in:
2025-02-13 12:28:23 +09:00
parent 071a84f376
commit f5060e81b9
9 changed files with 261 additions and 7 deletions

View File

@@ -9,6 +9,7 @@ import com.caliverse.admin.domain.entity.metadata.MetaBattleConfigData;
import com.caliverse.admin.domain.entity.metadata.MetaBattleRewardData;
import com.caliverse.admin.domain.request.BattleEventRequest;
import com.caliverse.admin.domain.response.BattleEventResponse;
import com.caliverse.admin.dynamodb.service.DynamodbBattleEventService;
import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.code.SuccessCode;
@@ -37,6 +38,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j
public class BattleEventService {
private final DynamodbBattleEventService dynamodbBattleEventService;
private final BattleMapper battleMapper;
private final MetaDataHandler metaDataHandler;
private final HistoryService historyService;
@@ -149,7 +152,7 @@ public class BattleEventService {
CommonUtils.getClientIp()
);
// dynamodbLandAuctionService.insertLandAuctionRegistryWithActivity(landRequest);
dynamodbBattleEventService.insertBattleEvent(battleEventRequest);
return BattleEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())

View File

@@ -0,0 +1,61 @@
package com.caliverse.admin.dynamodb.domain.atrrib;
import com.caliverse.admin.dynamodb.entity.EDayOfWeekType;
import com.caliverse.admin.dynamodb.entity.EOncePeriodRangeType;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.*;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
import java.util.HashSet;
@Getter
@Setter
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@DynamoDbBean
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class BattleEventAttrib extends DynamoDBAttribBase {
@JsonProperty("event_id")
private long eventId;
@JsonProperty("is_active")
private boolean isActive;
@JsonProperty("start_day")
private String startDay;
@JsonProperty("start_hour")
private Integer startHour;
@JsonProperty("start_min")
private Integer startMin;
@JsonProperty("end_date")
private String endDate;
@JsonProperty("instance_id")
private Integer instanceId;
@JsonProperty("once_period_type")
private EOncePeriodRangeType oncePeriodType;
@JsonProperty("day_of_week_type")
private HashSet<EDayOfWeekType> dayOfWeekType;
@JsonProperty("ffa_config_data_id")
private Integer configDataId;
@JsonProperty("ffa_reward_group_id")
private Integer rewardGroupId;
@JsonProperty("ffa_hot_time")
private Integer hotTime;
@JsonProperty("round_count")
private Integer roundCount;
}

View File

@@ -10,20 +10,20 @@ import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
@NoArgsConstructor
@DynamoDbBean
public class BattleEventDoc extends DynamoDBDocBase {
private String systemMetaMailAttrib;
private String battleEventAttrib;
public String getAttribFieldName() {
return "SystemMetaMailAttrib";
return "BattleEventAttrib";
}
@DynamoDbAttribute("SystemMetaMailAttrib")
@JsonProperty("SystemMetaMailAttrib")
@DynamoDbAttribute("BattleEventAttrib")
@JsonProperty("BattleEventAttrib")
public String getAttribValue() {
return systemMetaMailAttrib;
return battleEventAttrib;
}
public void setAttribValue(String value) {
this.systemMetaMailAttrib = value;
this.battleEventAttrib = value;
}
}

View File

@@ -0,0 +1,25 @@
package com.caliverse.admin.dynamodb.entity;
import java.util.Arrays;
public enum EDayOfWeekType {
Sunday(0), // 일요일
Monday(1), // 월요일
Tuesday(2), // 화요일
Wednesday(3), // 수요일
Thursday(4), // 목요일
Friday(5), // 금요일
Saturday(6), // 토요일
None(99);
private final int value;
EDayOfWeekType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}

View File

@@ -0,0 +1,23 @@
package com.caliverse.admin.dynamodb.entity;
import java.util.Arrays;
public enum EOncePeriodRangeType {
NONE(0),
Nolimit(1),
Daily(2),
Weekly(3),
Monthly(4);
private final int value;
EOncePeriodRangeType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}

View File

@@ -0,0 +1,8 @@
package com.caliverse.admin.dynamodb.repository;
import com.caliverse.admin.domain.request.BattleEventRequest;
import com.caliverse.admin.dynamodb.domain.doc.BattleEventDoc;
public interface BattleEventRepository extends DynamoDBRepository<BattleEventDoc> {
void insert(BattleEventRequest battleEventRequest);
}

View File

@@ -0,0 +1,109 @@
package com.caliverse.admin.dynamodb.repository.Impl;
import com.caliverse.admin.domain.entity.BattleEvent;
import com.caliverse.admin.domain.entity.HISTORYTYPE;
import com.caliverse.admin.domain.request.BattleEventRequest;
import com.caliverse.admin.dynamodb.domain.atrrib.BattleEventAttrib;
import com.caliverse.admin.dynamodb.domain.doc.BattleEventDoc;
import com.caliverse.admin.dynamodb.entity.EDayOfWeekType;
import com.caliverse.admin.dynamodb.entity.EOncePeriodRangeType;
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
import com.caliverse.admin.dynamodb.repository.BattleEventRepository;
import com.caliverse.admin.dynamodb.service.DynamoDBOperations;
import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
import com.caliverse.admin.global.common.exception.RestApiException;
import com.caliverse.admin.global.common.utils.CommonUtils;
import com.caliverse.admin.history.service.DynamodbHistoryLogService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.HashSet;
import static com.caliverse.admin.global.common.utils.CommonUtils.convertUTCDate;
import static com.caliverse.admin.global.common.utils.DateUtils.stringToISODateTime;
@Component
@Slf4j
public class BattleEventRepositoryImpl extends BaseDynamoDBRepository<BattleEventDoc> implements BattleEventRepository {
public BattleEventRepositoryImpl(DynamoDBOperations operations, DynamodbHistoryLogService dynamodbHistoryLogService, ObjectMapper objectMapper) {
super(operations, BattleEventDoc.class, dynamodbHistoryLogService, objectMapper);
}
@Override
public void insert(BattleEventRequest battleEventRequest) {
LocalDateTime nowDate = LocalDateTime.now();
LocalDateTime start_dt = battleEventRequest.getEventStartDt();
BattleEvent.BATTLE_REPEAT_TYPE repeatType = battleEventRequest.getRepeatType();
EOncePeriodRangeType oncePeriodRangeType = getOncePeriodRangeType(repeatType);
EDayOfWeekType dayOfWeekType = getDayOfWeekType(repeatType);
HashSet<EDayOfWeekType> hDayOfWeekType = new HashSet<>();
hDayOfWeekType.add(dayOfWeekType);
try {
BattleEventAttrib attrib = new BattleEventAttrib();
attrib.setAttribType(DynamoDBConstants.ATTRIB_BATTLE_EVENT);
attrib.setEventId(battleEventRequest.getId());
attrib.setStartDay(stringToISODateTime(start_dt.toLocalDate().atStartOfDay()));
attrib.setStartHour(start_dt.getHour());
attrib.setStartMin(start_dt.getMinute());
attrib.setEndDate(stringToISODateTime(battleEventRequest.getEventEndDt()));
attrib.setInstanceId(battleEventRequest.getInstanceId());
attrib.setOncePeriodType(oncePeriodRangeType);
attrib.setDayOfWeekType(hDayOfWeekType);
attrib.setConfigDataId(battleEventRequest.getConfigId());
attrib.setRewardGroupId(battleEventRequest.getRewardGroupId());
attrib.setHotTime(battleEventRequest.getHotTime());
attrib.setRoundCount(battleEventRequest.getRoundCount());
BattleEventDoc doc = new BattleEventDoc();
doc.setPK(DynamoDBConstants.PK_KEY_BATTLE_EVENT);
doc.setSK(String.valueOf(battleEventRequest.getId()));
doc.setDocType(DynamoDBConstants.DOC_BATTLE_EVENT);
doc.setAttribValue(objectMapper.writeValueAsString(attrib));
doc.setCreatedDateTime(convertUTCDate(nowDate));
doc.setUpdatedDateTime(convertUTCDate(nowDate));
doc.setDeletedDateTime(DynamoDBConstants.MIN_DATE);
doc.setRestoredDateTime(DynamoDBConstants.MIN_DATE);
save(doc);
dynamodbHistoryLogService.insertHistoryLog(
HISTORYTYPE.BATTLE_EVENT_ADD,
HISTORYTYPE.BATTLE_EVENT_ADD.name(),
doc,
CommonUtils.getAdmin().getEmail(),
CommonUtils.getClientIp()
);
}catch (Exception e){
log.error("insert Error: {}", e.getMessage());
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
}
}
private EOncePeriodRangeType getOncePeriodRangeType(BattleEvent.BATTLE_REPEAT_TYPE repeatType) {
return switch (repeatType) {
case DAY -> EOncePeriodRangeType.Daily;
case SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY -> EOncePeriodRangeType.Weekly;
default -> EOncePeriodRangeType.NONE;
};
}
private EDayOfWeekType getDayOfWeekType(BattleEvent.BATTLE_REPEAT_TYPE repeatType) {
return switch (repeatType) {
case SUNDAY -> EDayOfWeekType.Sunday;
case MONDAY -> EDayOfWeekType.Monday;
case TUESDAY -> EDayOfWeekType.Tuesday;
case WEDNESDAY -> EDayOfWeekType.Wednesday;
case THURSDAY -> EDayOfWeekType.Thursday;
case FRIDAY -> EDayOfWeekType.Friday;
case SATURDAY -> EDayOfWeekType.Saturday;
default -> EDayOfWeekType.None;
};
}
}

View File

@@ -0,0 +1,21 @@
package com.caliverse.admin.dynamodb.service;
import com.caliverse.admin.domain.request.BattleEventRequest;
import com.caliverse.admin.dynamodb.repository.BattleEventRepository;
import com.caliverse.admin.global.common.annotation.DynamoDBTransaction;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
@Slf4j
public class DynamodbBattleEventService {
private final BattleEventRepository battleEventRepository;
@DynamoDBTransaction
public void insertBattleEvent(BattleEventRequest battleEventRequest) {
battleEventRepository.insert(battleEventRequest);
}
}

View File

@@ -17,6 +17,8 @@ public class DynamoDBConstants {
public static final String PK_KEY_OWNED_LAND = "owned_land#";
public static final String PK_KEY_BUILDING = "building#";
public static final String PK_KEY_OWNED_BUILDING = "owned_building#";
public static final String PK_KEY_BATTLE_EVENT = "management_battle_event#global";
//SK
//Attribute
@@ -26,6 +28,7 @@ public class DynamoDBConstants {
public static final String ATTRIB_LANDAUCTION_ACTIVE = "LandAuctionActivityAttrib";
public static final String ATTRIB_LANDAUCTION_HIGHEST_USER = "LandAuctionHighestBidUserAttrib";
public static final String ATTRIB_USER_NICKNAME_REGISTRY = "UserNicknameRegistryAttrib";
public static final String ATTRIB_BATTLE_EVENT = "BattleEventAttrib";
//DOC
public static final String DOC_SYSTEMMAIL = "SystemMetaMailDoc";
@@ -33,6 +36,7 @@ public class DynamoDBConstants {
public static final String DOC_LANDAUCTION_ACTIVE = "LandAuctionActivityDoc";
public static final String DOC_LANDAUCTION_HIGHEST_USER = "LandAuctionHighestBidUserDoc";
public static final String DOC_USER_NICKNAME_REGISTRY = "UserNicknameRegistryDoc";
public static final String DOC_BATTLE_EVENT = "BattleEventDoc";
//SCHEMA
public static final String SCHEMA_UPDATE_TIME = "UpdatedDateTime";