랭커 조회 및 랭킹 정보 수정
This commit is contained in:
@@ -17,6 +17,17 @@ import java.util.Map;
|
||||
public class RankController {
|
||||
private final RankService rankService;
|
||||
|
||||
@GetMapping("/schedule/simple-list")
|
||||
public ResponseEntity<RankResponse> getRankingScheduleSimpleList(){
|
||||
return ResponseEntity.ok().body( rankService.getList());
|
||||
}
|
||||
|
||||
@GetMapping("/snapshot/list")
|
||||
public ResponseEntity<RankResponse> getRankingSnapshotList(
|
||||
@RequestParam String guid){
|
||||
return ResponseEntity.ok().body( rankService.getRankingSnapshotList(guid));
|
||||
}
|
||||
|
||||
@GetMapping("/schedule/list")
|
||||
public ResponseEntity<RankResponse> getRankingScheduleList(
|
||||
@RequestParam Map<String, String> requestParam){
|
||||
@@ -28,6 +39,18 @@ public class RankController {
|
||||
@PathVariable("id") Long id){
|
||||
return ResponseEntity.ok().body( rankService.getDetail(id));
|
||||
}
|
||||
|
||||
@GetMapping("/ranker/list")
|
||||
public ResponseEntity<RankResponse> getRankList(
|
||||
@RequestParam String guid, @RequestParam Integer snapshot){
|
||||
return ResponseEntity.ok().body( rankService.getRankerList(guid, snapshot));
|
||||
}
|
||||
|
||||
@GetMapping("/info")
|
||||
public ResponseEntity<RankResponse> getRankingInfo(
|
||||
@RequestParam("guid") String guid){
|
||||
return ResponseEntity.ok().body( rankService.getRankingInfo(guid));
|
||||
}
|
||||
|
||||
@PostMapping("/schedule")
|
||||
public ResponseEntity<RankResponse> postRankingSchedule(
|
||||
@@ -42,6 +65,34 @@ public class RankController {
|
||||
|
||||
return ResponseEntity.ok().body(rankService.updateRankingSchedule(id, rankRequest));
|
||||
}
|
||||
|
||||
@PutMapping("/ranking/{guid}")
|
||||
public ResponseEntity<RankResponse> updateRanking(
|
||||
@PathVariable("guid")String guid){
|
||||
|
||||
return ResponseEntity.ok().body(rankService.updateRanking(guid));
|
||||
}
|
||||
|
||||
@PutMapping("/ranking/init/{guid}")
|
||||
public ResponseEntity<RankResponse> updateRankingInit(
|
||||
@PathVariable("guid")String guid){
|
||||
|
||||
return ResponseEntity.ok().body(rankService.updateRankingInit(guid));
|
||||
}
|
||||
|
||||
@PutMapping("/ranking/snapshot/{guid}")
|
||||
public ResponseEntity<RankResponse> updateRankingSnapshot(
|
||||
@PathVariable("guid")String guid){
|
||||
|
||||
return ResponseEntity.ok().body(rankService.updateSnapshot(guid));
|
||||
}
|
||||
|
||||
@PutMapping("/info")
|
||||
public ResponseEntity<RankResponse> updateRankerInfo(
|
||||
@RequestBody RankRequest rankRequest){
|
||||
|
||||
return ResponseEntity.ok().body(rankService.updateRankerInfo(rankRequest));
|
||||
}
|
||||
|
||||
@DeleteMapping("/schedule/delete")
|
||||
public ResponseEntity<RankResponse> deleteRankingSchedule(
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.caliverse.admin.domain.request;
|
||||
|
||||
import com.caliverse.admin.domain.entity.ERankingType;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -34,6 +36,17 @@ public class RankRequest {
|
||||
@JsonProperty("snapshot_interval")
|
||||
private Integer snapshotInterval;
|
||||
|
||||
@JsonProperty("user_guid")
|
||||
private String userGuid;
|
||||
private Integer score;
|
||||
@JsonProperty("snapshot_index")
|
||||
private Integer snapshotIndex;
|
||||
|
||||
@JsonProperty("score_type")
|
||||
private EScoreType scoreType;
|
||||
@JsonProperty("ranking_type")
|
||||
private ERankingType rankingType;
|
||||
|
||||
@JsonProperty("create_by")
|
||||
private Long createBy;
|
||||
@JsonProperty("create_dt")
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.caliverse.admin.domain.response;
|
||||
|
||||
import com.caliverse.admin.domain.entity.ERankingType;
|
||||
import com.caliverse.admin.domain.entity.RankingSchedule;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -32,6 +34,15 @@ public class RankResponse {
|
||||
@JsonProperty("list")
|
||||
private List<RankingSchedule> rankingScheduleList;
|
||||
|
||||
@JsonProperty("user_ranking_info")
|
||||
private UserRankingInfo userRankingInfo;
|
||||
|
||||
@JsonProperty("ranker_List")
|
||||
private List<UserRankerInfo> rankerList;
|
||||
|
||||
@JsonProperty("ranking_snapshot_list")
|
||||
private List<RankingSnapshotInfo> rankingSnapshotList;
|
||||
|
||||
private String message;
|
||||
|
||||
private int total;
|
||||
@@ -40,6 +51,52 @@ public class RankResponse {
|
||||
@JsonProperty("page_no")
|
||||
private int pageNo;
|
||||
|
||||
|
||||
}
|
||||
@Data
|
||||
public static class UserRankingInfo{
|
||||
@JsonProperty("user_guid")
|
||||
private String userGuid;
|
||||
private String nickname;
|
||||
private List<RankerItem> rankingItems;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
public static class RankerItem {
|
||||
private ERankingType rankingType;
|
||||
private EScoreType scoreType;
|
||||
private String guid;
|
||||
private Integer score;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Builder
|
||||
public static class RankingSnapshotInfo {
|
||||
@JsonProperty("ranking_guid")
|
||||
private String rankingGuid;
|
||||
@JsonProperty("snapshot_index")
|
||||
private Integer snapshotIndex;
|
||||
@JsonProperty("snapshot_time")
|
||||
private String snapshotTime;
|
||||
}
|
||||
|
||||
@Builder
|
||||
public static class UserRankerInfo {
|
||||
@JsonProperty("ranking_guid")
|
||||
private String rankingGuid;
|
||||
@JsonProperty("user_guid")
|
||||
private String userGuid;
|
||||
@JsonProperty("account_id")
|
||||
private String accountId;
|
||||
@JsonProperty("nickname")
|
||||
private String nickname;
|
||||
@JsonProperty("score_type")
|
||||
private EScoreType scoreType;
|
||||
@JsonProperty("score")
|
||||
private Integer score;
|
||||
@JsonProperty("rank")
|
||||
private Integer rank;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.caliverse.admin.dynamodb.domain.atrrib;
|
||||
|
||||
import com.caliverse.admin.dynamodb.entity.EEntityType;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||
public class RankAttrib {
|
||||
@JsonProperty("ranking_guid")
|
||||
private String rankingGuid;
|
||||
@JsonProperty("ranker_guid")
|
||||
private String rankerGuid;
|
||||
@JsonProperty("ranker_entity_type")
|
||||
private EEntityType rankerEntityType;
|
||||
@JsonProperty("prev_rank_num")
|
||||
private Integer prevRankNum;
|
||||
@JsonProperty("rank_num")
|
||||
private Integer rankNum;
|
||||
private Integer score;
|
||||
@JsonProperty("score_type")
|
||||
private EScoreType scoreType;
|
||||
|
||||
@DynamoDbAttribute("ranking_guid")
|
||||
public String getRankingGuid() {
|
||||
return rankingGuid;
|
||||
}
|
||||
@DynamoDbAttribute("ranker_guid")
|
||||
public String getRankerGuid() {
|
||||
return rankerGuid;
|
||||
}
|
||||
@DynamoDbAttribute("ranker_entity_type")
|
||||
public EEntityType getRankerEntityType() {
|
||||
return rankerEntityType;
|
||||
}
|
||||
@DynamoDbAttribute("prev_rank_num")
|
||||
public Integer getPrevRankNum() {
|
||||
return prevRankNum;
|
||||
}
|
||||
@DynamoDbAttribute("rank_num")
|
||||
public Integer getRankNum() {
|
||||
return rankNum;
|
||||
}
|
||||
@DynamoDbAttribute("score")
|
||||
public Integer getScore() {
|
||||
return score;
|
||||
}
|
||||
@DynamoDbAttribute("score_type")
|
||||
public EScoreType getScoreType() {
|
||||
return scoreType;
|
||||
}
|
||||
}
|
||||
@@ -1,32 +1,55 @@
|
||||
package com.caliverse.admin.dynamodb.domain.atrrib;
|
||||
|
||||
import com.caliverse.admin.dynamodb.entity.EIntervalType;
|
||||
import com.caliverse.admin.dynamodb.entity.EEntityType;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
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.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString(callSuper = true)
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||
public class RankerAttrib extends DynamoDBAttribBase{
|
||||
public class RankerAttrib{
|
||||
@JsonProperty("ranking_guid")
|
||||
private String rankingGuid;
|
||||
@JsonProperty("ranker_guid")
|
||||
private String rankerGuid;
|
||||
@JsonProperty("ranker_entity_type")
|
||||
private String rankerEntityType;
|
||||
private EEntityType rankerEntityType;
|
||||
private Integer score;
|
||||
@JsonProperty("score_type")
|
||||
private String scoreType;
|
||||
private EScoreType scoreType;
|
||||
@JsonProperty("update_time")
|
||||
private String updateTime;
|
||||
|
||||
@DynamoDbAttribute("ranking_guid")
|
||||
public String getRankingGuid() {
|
||||
return rankingGuid;
|
||||
}
|
||||
@DynamoDbAttribute("ranker_guid")
|
||||
public String getRankerGuid() {
|
||||
return rankerGuid;
|
||||
}
|
||||
@DynamoDbAttribute("ranker_entity_type")
|
||||
public EEntityType getRankerEntityType() {
|
||||
return rankerEntityType;
|
||||
}
|
||||
@DynamoDbAttribute("score")
|
||||
public Integer getScore() {
|
||||
return score;
|
||||
}
|
||||
@DynamoDbAttribute("score_type")
|
||||
public EScoreType getScoreType() {
|
||||
return scoreType;
|
||||
}
|
||||
@DynamoDbAttribute("update_time")
|
||||
public String getUpdateTime() {
|
||||
return updateTime;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.caliverse.admin.dynamodb.domain.atrrib;
|
||||
|
||||
import com.caliverse.admin.dynamodb.entity.EEntityType;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
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.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||
public class RankerSnapshotAttrib{
|
||||
@JsonProperty("ranking_guid")
|
||||
private String rankingGuid;
|
||||
@JsonProperty("snapshot_index")
|
||||
private Integer snapshotIndex;
|
||||
@JsonProperty("snapshot_time")
|
||||
private String snapshotTime;
|
||||
@JsonProperty("ranker_guid")
|
||||
private String rankerGuid;
|
||||
@JsonProperty("ranker_entity_type")
|
||||
private EEntityType rankerEntityType;
|
||||
private Integer score;
|
||||
@JsonProperty("score_type")
|
||||
private EScoreType scoreType;
|
||||
@JsonProperty("update_time")
|
||||
private String updateTime;
|
||||
@JsonProperty("rank_num")
|
||||
private Integer rankNum;
|
||||
|
||||
@DynamoDbAttribute("ranking_guid")
|
||||
public String getRankingGuid() {
|
||||
return rankingGuid;
|
||||
}
|
||||
@DynamoDbAttribute("snapshot_index")
|
||||
public Integer getSnapshotIndex() {
|
||||
return snapshotIndex;
|
||||
}
|
||||
@DynamoDbAttribute("snapshot_time")
|
||||
public String getSnapshotTime() {
|
||||
return snapshotTime;
|
||||
}
|
||||
@DynamoDbAttribute("ranker_guid")
|
||||
public String getRankerGuid() {
|
||||
return rankerGuid;
|
||||
}
|
||||
@DynamoDbAttribute("ranker_entity_type")
|
||||
public EEntityType getRankerEntityType() {
|
||||
return rankerEntityType;
|
||||
}
|
||||
@DynamoDbAttribute("score")
|
||||
public Integer getScore() {
|
||||
return score;
|
||||
}
|
||||
@DynamoDbAttribute("score_type")
|
||||
public EScoreType getScoreType() {
|
||||
return scoreType;
|
||||
}
|
||||
@DynamoDbAttribute("update_time")
|
||||
public String getUpdateTime() {
|
||||
return updateTime;
|
||||
}
|
||||
@DynamoDbAttribute("rank_num")
|
||||
public Integer getRankNum() {
|
||||
return rankNum;
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.caliverse.admin.dynamodb.domain.atrrib;
|
||||
|
||||
import com.caliverse.admin.dynamodb.entity.EIntervalType;
|
||||
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.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -12,11 +12,10 @@ import java.util.Map;
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString(callSuper = true)
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||
public class RankingScheduleAttrib extends DynamoDBAttribBase{
|
||||
public class RankingScheduleAttrib{
|
||||
@JsonProperty("ranking_guid")
|
||||
private String rankingGuid;
|
||||
@JsonProperty("ranking_meta_id")
|
||||
@@ -29,6 +28,35 @@ public class RankingScheduleAttrib extends DynamoDBAttribBase{
|
||||
private String endTime;
|
||||
@JsonProperty("interval_base_time")
|
||||
private String intervalBaseTime;
|
||||
@JsonProperty("interval_times")
|
||||
private Map<Integer, Integer> intervalTimes;
|
||||
|
||||
private Map<EIntervalType, Integer> interval;
|
||||
@DynamoDbAttribute("ranking_guid")
|
||||
public String getRankingGuid() {
|
||||
return rankingGuid;
|
||||
}
|
||||
@DynamoDbAttribute("ranking_meta_id")
|
||||
public Integer getRankingMetaId() {
|
||||
return rankingMetaId;
|
||||
}
|
||||
@DynamoDbAttribute("event_action_score_group_id")
|
||||
public Integer getEventActionScoreGroupId() {
|
||||
return eventActionScoreGroupId;
|
||||
}
|
||||
@DynamoDbAttribute("start_time")
|
||||
public String getStartTime() {
|
||||
return startTime;
|
||||
}
|
||||
@DynamoDbAttribute("end_time")
|
||||
public String getEndTime() {
|
||||
return endTime;
|
||||
}
|
||||
@DynamoDbAttribute("interval_base_time")
|
||||
public String getIntervalBaseTime() {
|
||||
return intervalBaseTime;
|
||||
}
|
||||
@DynamoDbAttribute("interval_times")
|
||||
public Map<Integer, Integer> getIntervalTimes() {
|
||||
return intervalTimes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.caliverse.admin.dynamodb.domain.atrrib;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||
public class RankingSnapshotAttrib {
|
||||
@JsonProperty("ranking_guid")
|
||||
private String rankingGuid;
|
||||
@JsonProperty("snapshot_index")
|
||||
private Integer snapshotIndex;
|
||||
@JsonProperty("snapshot_time")
|
||||
private String snapshotTime;
|
||||
|
||||
@DynamoDbAttribute("ranking_guid")
|
||||
public String getRankingGuid() {
|
||||
return rankingGuid;
|
||||
}
|
||||
@DynamoDbAttribute("snapshot_index")
|
||||
public Integer getSnapshotIndex() {
|
||||
return snapshotIndex;
|
||||
}
|
||||
@DynamoDbAttribute("snapshot_time")
|
||||
public String getSnapshotTime() {
|
||||
return snapshotTime;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.caliverse.admin.dynamodb.domain.doc;
|
||||
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankAttrib;
|
||||
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
public class RankDoc extends DynamoDBDocBase {
|
||||
private RankAttrib attrib;
|
||||
|
||||
public String getAttribFieldName() {
|
||||
return DynamoDBConstants.ATTRIB_RANK;
|
||||
}
|
||||
|
||||
@DynamoDbAttribute(DynamoDBConstants.ATTRIB_RANK)
|
||||
@JsonProperty(DynamoDBConstants.ATTRIB_RANK)
|
||||
public RankAttrib getAttribValue() {
|
||||
return attrib;
|
||||
}
|
||||
|
||||
public void setAttribValue(RankAttrib value) {
|
||||
this.attrib = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.caliverse.admin.dynamodb.domain.doc;
|
||||
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerAttrib;
|
||||
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -12,7 +13,7 @@ import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
public class RankerDoc extends DynamoDBDocBase {
|
||||
private String attrib;
|
||||
private RankerAttrib attrib;
|
||||
@Setter
|
||||
private long ttl;
|
||||
|
||||
@@ -22,11 +23,11 @@ public class RankerDoc extends DynamoDBDocBase {
|
||||
|
||||
@DynamoDbAttribute(DynamoDBConstants.ATTRIB_RANKER)
|
||||
@JsonProperty(DynamoDBConstants.ATTRIB_RANKER)
|
||||
public String getAttribValue() {
|
||||
public RankerAttrib getAttribValue() {
|
||||
return attrib;
|
||||
}
|
||||
|
||||
public void setAttribValue(String value) {
|
||||
public void setAttribValue(RankerAttrib value) {
|
||||
this.attrib = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.caliverse.admin.dynamodb.domain.doc;
|
||||
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerSnapshotAttrib;
|
||||
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
public class RankerSnapshotDoc extends DynamoDBDocBase {
|
||||
private RankerSnapshotAttrib attrib;
|
||||
@Setter
|
||||
private long ttl;
|
||||
|
||||
public String getAttribFieldName() {
|
||||
return DynamoDBConstants.ATTRIB_RANKER_SNAPSHOT;
|
||||
}
|
||||
|
||||
@DynamoDbAttribute(DynamoDBConstants.ATTRIB_RANKER_SNAPSHOT)
|
||||
@JsonProperty(DynamoDBConstants.ATTRIB_RANKER_SNAPSHOT)
|
||||
public RankerSnapshotAttrib getAttribValue() {
|
||||
return attrib;
|
||||
}
|
||||
|
||||
public void setAttribValue(RankerSnapshotAttrib value) {
|
||||
this.attrib = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.caliverse.admin.dynamodb.domain.doc;
|
||||
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankingScheduleAttrib;
|
||||
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -12,7 +13,7 @@ import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
public class RankingScheduleDoc extends DynamoDBDocBase {
|
||||
private String attrib;
|
||||
private RankingScheduleAttrib attrib;
|
||||
@Setter
|
||||
private long ttl;
|
||||
|
||||
@@ -22,11 +23,11 @@ public class RankingScheduleDoc extends DynamoDBDocBase {
|
||||
|
||||
@DynamoDbAttribute(DynamoDBConstants.ATTRIB_RANKING_SCHEDULER)
|
||||
@JsonProperty(DynamoDBConstants.ATTRIB_RANKING_SCHEDULER)
|
||||
public String getAttribValue() {
|
||||
public RankingScheduleAttrib getAttribValue() {
|
||||
return attrib;
|
||||
}
|
||||
|
||||
public void setAttribValue(String value) {
|
||||
public void setAttribValue(RankingScheduleAttrib value) {
|
||||
this.attrib = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.caliverse.admin.dynamodb.domain.doc;
|
||||
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankingSnapshotAttrib;
|
||||
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@DynamoDbBean
|
||||
public class RankingSnapshotDoc extends DynamoDBDocBase {
|
||||
private RankingSnapshotAttrib attrib;
|
||||
@Setter
|
||||
private long ttl;
|
||||
|
||||
public String getAttribFieldName() {
|
||||
return DynamoDBConstants.ATTRIB_RANKING_SNAPSHOT;
|
||||
}
|
||||
|
||||
@DynamoDbAttribute(DynamoDBConstants.ATTRIB_RANKING_SNAPSHOT)
|
||||
@JsonProperty(DynamoDBConstants.ATTRIB_RANKING_SNAPSHOT)
|
||||
public RankingSnapshotAttrib getAttribValue() {
|
||||
return attrib;
|
||||
}
|
||||
|
||||
public void setAttribValue(RankingSnapshotAttrib value) {
|
||||
this.attrib = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,185 @@
|
||||
package com.caliverse.admin.dynamodb.entity;
|
||||
|
||||
import com.caliverse.admin.domain.entity.common.ValueEnum;
|
||||
|
||||
public enum EEntityType implements ValueEnum {
|
||||
None(0),
|
||||
/// User 계열 : HFSM, Control by Manual
|
||||
Player(1),
|
||||
/// 일단 여기에 두자
|
||||
BattlePlayer(101),
|
||||
/// Character 계열
|
||||
Character(2),
|
||||
/// Npc 계열 : HFSM, Control by AI
|
||||
Npc(3),
|
||||
/// Monster 계열 : 전투가 가능한 객체
|
||||
Monster(301),
|
||||
/// 일반 Npc
|
||||
GeneralNpc(302),
|
||||
/// 장애물
|
||||
Barrier(303),
|
||||
/// Volume 계열
|
||||
Volume(305),
|
||||
/// 이벤트
|
||||
EventVolume(30501),
|
||||
/// 효과
|
||||
EffectVolume(30502),
|
||||
/// 퀘스트 볼륨
|
||||
QuestVolume(30503),
|
||||
/// UGC Npc
|
||||
UgcNpc(306),
|
||||
Beacon(30601),
|
||||
UgcNpcRank(30602),
|
||||
/// 이펙트 : 효과
|
||||
Effect(307),
|
||||
/// 파밍
|
||||
Farming(30701),
|
||||
/// 인벤토리 계열
|
||||
Inventory(4),
|
||||
/// 보관 인벤토리 : 특정 위치에 장착 불필요
|
||||
BagInven(401),
|
||||
/// 의상 장착 인벤토리 : 특정 위치에 장착 필요
|
||||
ClothEquipInven(402),
|
||||
/// 도구 장착 인벤토리 : 특정 위치에 장착 필요
|
||||
ToolEquipInven(403),
|
||||
/// 타투 장착 인벤토리 : 특정 위치에 장착 필요
|
||||
TattooEquipInven(404),
|
||||
/// 비컨 상점 인벤토리 : 개별 구현
|
||||
BeaconShopInven(405),
|
||||
/// 아이템 계열
|
||||
Item(5),
|
||||
/// Ground 계열 : HFSM, Control by AI
|
||||
GroundEntity(6),
|
||||
/// 보상등을 담고 있는 드랍 오브젝트
|
||||
DropObject(601),
|
||||
Land(602),
|
||||
OwnedLand(60201),
|
||||
Building(603),
|
||||
OwnedBuilding(60301),
|
||||
BuildingFloor(60302),
|
||||
BuildingProfit(60303),
|
||||
BuildingProfitHistory(60304),
|
||||
BuildingRentalHistory(60305),
|
||||
MyHome(604),
|
||||
/// 재화 계열
|
||||
Money(7),
|
||||
/// 상점 계열
|
||||
Shop(8),
|
||||
/// 상점 Product Meter
|
||||
MyShopProductMeter(801),
|
||||
/// 판매된 Product List
|
||||
ShopSoldProduct(802),
|
||||
/// 인스턴스 룸
|
||||
Room(9),
|
||||
/// 일단 여기에 두자
|
||||
BattleInstance(901),
|
||||
/// 일단 여기에 두자
|
||||
BattleEvent(902),
|
||||
/// 일단 여기에 두자
|
||||
SystemBattleEvent(903),
|
||||
/// 글로벌 파티
|
||||
Party(10),
|
||||
/// 전역적 관리 파티 엔티티
|
||||
GlobalParty(1001),
|
||||
/// 파티
|
||||
GlobalPartyDetail(100101),
|
||||
/// Player 귀속 관리 파티 엔티티
|
||||
PersonalParty(1002),
|
||||
/// 파티
|
||||
PersonalPartyDetail(100201),
|
||||
/// 소셜 액션
|
||||
SocialAction(11),
|
||||
/// 친구
|
||||
Friend(12),
|
||||
/// 미니맵 마커
|
||||
MinimapMarker(13),
|
||||
/// Ticker
|
||||
Ticker(14),
|
||||
UserLoginCacheRefreshTicker(1401),
|
||||
EntityUpdateTicker(1402),
|
||||
EventUpdateTicker(1403),
|
||||
TimeEventTicker(1404),
|
||||
ChannelUpdateTicker(1405),
|
||||
NoticeChatTicker(1406),
|
||||
PartyCacheRefreshTicker(1408),
|
||||
ReservationCheckTicker(1409),
|
||||
NormalQuestCheckTicker(1411),
|
||||
ShopProductCheckTicker(1412),
|
||||
UgcNpcRankTicker(1413),
|
||||
SystemMailCheckTicker(1414),
|
||||
LargePacketCheckTicker(1415),
|
||||
BuildingUpdateTicker(1416),
|
||||
CaliumEventTicker(1417),
|
||||
BattleEventCheckTicker(1418),
|
||||
BattleInstanceStateCheckTicker(1419),
|
||||
LandAuctionReservationConfigureTicker(1420),
|
||||
LandAuctionCheckTicker(1421),
|
||||
/// 차단 유저
|
||||
BlockUser(15),
|
||||
/// 퀘스트
|
||||
Quest(16),
|
||||
EndQuest(1601),
|
||||
/// 메일 계열
|
||||
Mail(20),
|
||||
QuestMail(2001),
|
||||
/// Global
|
||||
Global(21),
|
||||
/// 시스템 메일의 owner
|
||||
SystemMailManager(2101),
|
||||
/// 시스템 메일 (유저들이 로그인시 받을 시스템 메일 정보)
|
||||
SystemMail(210101),
|
||||
/// 공지 채팅의 owner
|
||||
NoticeChatManager(2102),
|
||||
/// 공지 채팅 (유저들이 받을 공지 채팅 정보)
|
||||
NoticeChat(210201),
|
||||
/// 시즌 패스의 owner
|
||||
SeasonPassManager(2103),
|
||||
/// 카트
|
||||
Cart(22),
|
||||
/// 클레임
|
||||
Claim(23),
|
||||
/// 제작
|
||||
Craft(24),
|
||||
/// 레시피
|
||||
Recipe(2401),
|
||||
/// 도구 액션
|
||||
ToolAction(25),
|
||||
/// Task 예약 액션
|
||||
TaskReservationAction(26),
|
||||
/// 제품 패키지 액션
|
||||
PackageAction(27),
|
||||
/// Calium
|
||||
Calium(28),
|
||||
CaliumConverter(2801),
|
||||
Rental(29),
|
||||
/// 경매
|
||||
Auction(30),
|
||||
/// 랜드 경매
|
||||
LandAuction(3001),
|
||||
/// 랜드 경매 환급 입찰금
|
||||
LandAuctionRefundBidPrice(3002),
|
||||
/// 비컨 상점 거래
|
||||
BeaconShopSold(31),
|
||||
/// 비컨 상점 거래 내역 영수증
|
||||
BeaconShopSoldRecord(3101),
|
||||
/// 비컨 상점 거래 정산 금액
|
||||
BeaconShopSoldPrice(3102),
|
||||
PlanetUser(41),
|
||||
/// 사용자 정의 UI
|
||||
CustomDefinedUi(99),
|
||||
/// 검색용 : 모든 종류의 엔티티를 검색 !!!
|
||||
All(1000000000),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
||||
EEntityType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.caliverse.admin.domain.entity.common.ValueEnum;
|
||||
public enum EIntervalType implements ValueEnum {
|
||||
None(0),
|
||||
Refresh(1),
|
||||
Initialization (2),
|
||||
Snapshot (3),
|
||||
Snapshot (2),
|
||||
Initialization (3),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.caliverse.admin.dynamodb.entity;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum EScoreType{
|
||||
None(0),
|
||||
Score(1),
|
||||
Time(2),
|
||||
;
|
||||
|
||||
private final int value;
|
||||
|
||||
EScoreType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.caliverse.admin.dynamodb.repository.Impl;
|
||||
|
||||
import com.caliverse.admin.domain.entity.EFilterOperator;
|
||||
import com.caliverse.admin.domain.request.RankRequest;
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerSnapshotAttrib;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankDoc;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankerSnapshotDoc;
|
||||
import com.caliverse.admin.dynamodb.dto.PageResult;
|
||||
import com.caliverse.admin.dynamodb.entity.EEntityType;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
|
||||
import com.caliverse.admin.dynamodb.repository.RankRepository;
|
||||
import com.caliverse.admin.dynamodb.repository.RankerSnapshotRepository;
|
||||
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.global.common.utils.DateUtils;
|
||||
import com.caliverse.admin.mongodb.service.DynamodbHistoryLogService;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.Key;
|
||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.caliverse.admin.global.common.utils.CommonUtils.convertUTCDate;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RankRepositoryImpl extends BaseDynamoDBRepository<RankDoc> implements RankRepository {
|
||||
public RankRepositoryImpl(DynamoDBOperations operations, DynamodbHistoryLogService dynamodbHistoryLogService, ObjectMapper objectMapper) {
|
||||
super(operations, RankDoc.class, dynamodbHistoryLogService, objectMapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<RankDoc> getRankListWithPaging(String rankingGuid, String sortKeyPrefix, String filterAttributeName, EFilterOperator filterOperator, String filterAttributeValue, Map<String, AttributeValue> exclusiveStartKey, boolean sortIndex) {
|
||||
String pk = DynamoDBConstants.PK_KEY_RANK + rankingGuid;
|
||||
|
||||
return findByPaging(
|
||||
pk,
|
||||
sortKeyPrefix,
|
||||
filterAttributeName,
|
||||
filterOperator,
|
||||
filterAttributeValue,
|
||||
exclusiveStartKey,
|
||||
sortIndex
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package com.caliverse.admin.dynamodb.repository.Impl;
|
||||
|
||||
import com.caliverse.admin.domain.request.RankRequest;
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerAttrib;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankerDoc;
|
||||
import com.caliverse.admin.dynamodb.entity.EEntityType;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
|
||||
import com.caliverse.admin.dynamodb.repository.RankerRepository;
|
||||
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.global.common.utils.DateUtils;
|
||||
import com.caliverse.admin.mongodb.service.DynamodbHistoryLogService;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.Key;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.caliverse.admin.global.common.utils.CommonUtils.convertUTCDate;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RankerRepositoryImpl extends BaseDynamoDBRepository<RankerDoc> implements RankerRepository {
|
||||
public RankerRepositoryImpl(DynamoDBOperations operations, DynamodbHistoryLogService dynamodbHistoryLogService, ObjectMapper objectMapper) {
|
||||
super(operations, RankerDoc.class, dynamodbHistoryLogService, objectMapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RankerAttrib findRanker(String rankingGuid, String rankerGuid) {
|
||||
Key key = Key.builder()
|
||||
.partitionValue(DynamoDBConstants.PK_KEY_RANKER + rankingGuid)
|
||||
.sortValue(DynamoDBConstants.SK_RANKER + rankerGuid)
|
||||
.build();
|
||||
|
||||
RankerDoc doc = findById(key);
|
||||
|
||||
if(doc != null){
|
||||
try {
|
||||
return doc.getAttribValue();
|
||||
}catch (Exception e){
|
||||
log.error("findRanker Error: {}", e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insert(RankRequest rankRequest) {
|
||||
LocalDateTime nowDate = LocalDateTime.now();
|
||||
|
||||
try {
|
||||
RankerAttrib attrib = new RankerAttrib();
|
||||
attrib.setRankingGuid(rankRequest.getGuid());
|
||||
attrib.setScore(rankRequest.getScore());
|
||||
attrib.setRankerGuid(rankRequest.getUserGuid());
|
||||
attrib.setUpdateTime(DateUtils.stringToISODateTimeMillisNano(nowDate));
|
||||
attrib.setRankerEntityType(EEntityType.Player);
|
||||
attrib.setScoreType(EScoreType.Score);
|
||||
|
||||
RankerDoc doc = new RankerDoc();
|
||||
doc.setPK(DynamoDBConstants.PK_KEY_RANKER + rankRequest.getGuid());
|
||||
doc.setSK(DynamoDBConstants.SK_RANKER + rankRequest.getUserGuid());
|
||||
doc.setDocType(DynamoDBConstants.DOC_RANKER);
|
||||
doc.setAttribValue(attrib);
|
||||
doc.setCreatedDateTime(convertUTCDate(nowDate));
|
||||
doc.setUpdatedDateTime(convertUTCDate(nowDate));
|
||||
doc.setDeletedDateTime(DynamoDBConstants.MIN_DATE);
|
||||
doc.setRestoredDateTime(DynamoDBConstants.MIN_DATE);
|
||||
|
||||
save(doc);
|
||||
|
||||
log.info("RankerDoc Insert Success: {}", objectMapper.writeValueAsString(doc));
|
||||
|
||||
}catch (Exception e){
|
||||
log.error("insert Error: {}", e.getMessage());
|
||||
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(RankRequest rankRequest) {
|
||||
LocalDateTime nowDate = LocalDateTime.now();
|
||||
|
||||
try {
|
||||
Key key = Key.builder()
|
||||
.partitionValue(DynamoDBConstants.PK_KEY_RANKER + rankRequest.getGuid())
|
||||
.sortValue(DynamoDBConstants.SK_RANKER + rankRequest.getUserGuid())
|
||||
.build();
|
||||
|
||||
RankerDoc beforeDoc = findById(key);
|
||||
|
||||
if (beforeDoc != null) {
|
||||
RankerDoc afterDoc = deepCopy(beforeDoc, RankerDoc.class);
|
||||
|
||||
RankerAttrib attrib = afterDoc.getAttribValue();
|
||||
attrib.setScore(rankRequest.getScore());
|
||||
attrib.setUpdateTime(DateUtils.stringToISODateTimeMillisNano(nowDate));
|
||||
|
||||
afterDoc.setAttribValue(attrib);
|
||||
afterDoc.setUpdatedDateTime(CommonUtils.convertUTCDate(nowDate));
|
||||
|
||||
update(afterDoc);
|
||||
|
||||
log.info("RankerDoc Update Success: {}", objectMapper.writeValueAsString(afterDoc));
|
||||
|
||||
}
|
||||
}catch (Exception e){
|
||||
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package com.caliverse.admin.dynamodb.repository.Impl;
|
||||
|
||||
import com.caliverse.admin.domain.entity.EFilterOperator;
|
||||
import com.caliverse.admin.domain.request.RankRequest;
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerSnapshotAttrib;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankerSnapshotDoc;
|
||||
import com.caliverse.admin.dynamodb.dto.PageResult;
|
||||
import com.caliverse.admin.dynamodb.entity.EEntityType;
|
||||
import com.caliverse.admin.dynamodb.entity.EScoreType;
|
||||
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
|
||||
import com.caliverse.admin.dynamodb.repository.RankerSnapshotRepository;
|
||||
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.global.common.utils.DateUtils;
|
||||
import com.caliverse.admin.mongodb.service.DynamodbHistoryLogService;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.Key;
|
||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.caliverse.admin.global.common.utils.CommonUtils.convertUTCDate;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RankerSnapshotRepositoryImpl extends BaseDynamoDBRepository<RankerSnapshotDoc> implements RankerSnapshotRepository {
|
||||
public RankerSnapshotRepositoryImpl(DynamoDBOperations operations, DynamodbHistoryLogService dynamodbHistoryLogService, ObjectMapper objectMapper) {
|
||||
super(operations, RankerSnapshotDoc.class, dynamodbHistoryLogService, objectMapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<RankerSnapshotDoc> getRankerSnapshotListWithPaging(String rankingGuid, String sortKeyPrefix, String filterAttributeName, EFilterOperator filterOperator, String filterAttributeValue, Map<String, AttributeValue> exclusiveStartKey, boolean sortIndex) {
|
||||
String pk = DynamoDBConstants.PK_KEY_RANKER_SNAPSHOT + rankingGuid;
|
||||
|
||||
return findByPaging(
|
||||
pk,
|
||||
sortKeyPrefix,
|
||||
filterAttributeName,
|
||||
filterOperator,
|
||||
filterAttributeValue,
|
||||
exclusiveStartKey,
|
||||
sortIndex
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RankerSnapshotAttrib findRankerSnapshot(String rankingGuid, String rankerGuid, Integer index) {
|
||||
Key key = Key.builder()
|
||||
.partitionValue(DynamoDBConstants.PK_KEY_RANKER_SNAPSHOT + rankingGuid)
|
||||
.sortValue(String.format("%s%d#%s", DynamoDBConstants.SK_RANKER_SNAPSHOT, index, rankerGuid))
|
||||
.build();
|
||||
|
||||
RankerSnapshotDoc doc = findById(key);
|
||||
|
||||
if(doc != null){
|
||||
try {
|
||||
return doc.getAttribValue();
|
||||
}catch (Exception e){
|
||||
log.error("findRankerSnapshot Error: {}", e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insert(RankRequest rankRequest) {
|
||||
LocalDateTime nowDate = LocalDateTime.now();
|
||||
|
||||
try {
|
||||
RankerSnapshotAttrib attrib = new RankerSnapshotAttrib();
|
||||
attrib.setRankingGuid(rankRequest.getGuid());
|
||||
attrib.setSnapshotIndex(rankRequest.getSnapshotIndex());
|
||||
attrib.setScore(rankRequest.getScore());
|
||||
attrib.setRankerGuid(rankRequest.getUserGuid());
|
||||
attrib.setUpdateTime(DateUtils.stringToISODateTimeMillisNano(nowDate));
|
||||
attrib.setSnapshotTime(DateUtils.stringToISODateTimeMillisNano(nowDate));
|
||||
attrib.setRankerEntityType(EEntityType.Player);
|
||||
attrib.setScoreType(EScoreType.Score);
|
||||
|
||||
RankerSnapshotDoc doc = new RankerSnapshotDoc();
|
||||
doc.setPK(DynamoDBConstants.PK_KEY_RANKER_SNAPSHOT + rankRequest.getGuid());
|
||||
doc.setSK(String.format("%s%d#%s", DynamoDBConstants.SK_RANKER_SNAPSHOT, rankRequest.getSnapshotIndex(), rankRequest.getUserGuid()));
|
||||
doc.setDocType(DynamoDBConstants.DOC_RANKER_SNAPSHOT);
|
||||
doc.setAttribValue(attrib);
|
||||
doc.setCreatedDateTime(convertUTCDate(nowDate));
|
||||
doc.setUpdatedDateTime(convertUTCDate(nowDate));
|
||||
doc.setDeletedDateTime(DynamoDBConstants.MIN_DATE);
|
||||
doc.setRestoredDateTime(DynamoDBConstants.MIN_DATE);
|
||||
|
||||
save(doc);
|
||||
|
||||
log.info("RankerSnapshotDoc Insert Success: {}", objectMapper.writeValueAsString(doc));
|
||||
|
||||
}catch (Exception e){
|
||||
log.error("insert Error: {}", e.getMessage());
|
||||
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(RankRequest rankRequest) {
|
||||
LocalDateTime nowDate = LocalDateTime.now();
|
||||
|
||||
try {
|
||||
Key key = Key.builder()
|
||||
.partitionValue(DynamoDBConstants.PK_KEY_RANKER_SNAPSHOT + rankRequest.getGuid())
|
||||
.sortValue(String.format("%s%d#%s", DynamoDBConstants.SK_RANKER_SNAPSHOT, rankRequest.getSnapshotIndex(), rankRequest.getUserGuid()))
|
||||
.build();
|
||||
|
||||
RankerSnapshotDoc beforeDoc = findById(key);
|
||||
|
||||
if (beforeDoc != null) {
|
||||
RankerSnapshotDoc afterDoc = deepCopy(beforeDoc, RankerSnapshotDoc.class);
|
||||
|
||||
RankerSnapshotAttrib attrib = afterDoc.getAttribValue();
|
||||
attrib.setScore(rankRequest.getScore());
|
||||
attrib.setUpdateTime(DateUtils.stringToISODateTimeMillisNano(nowDate));
|
||||
|
||||
afterDoc.setAttribValue(attrib);
|
||||
afterDoc.setUpdatedDateTime(CommonUtils.convertUTCDate(nowDate));
|
||||
|
||||
update(afterDoc);
|
||||
|
||||
log.info("RankerSnapshotDoc Update Success: {}", objectMapper.writeValueAsString(afterDoc));
|
||||
|
||||
}
|
||||
}catch (Exception e){
|
||||
throw new RestApiException(CommonCode.ERROR.getHttpStatus(), ErrorCode.DYNAMODB_CONNECTION_ERROR.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ 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.global.common.utils.DateUtils;
|
||||
import com.caliverse.admin.mongodb.service.DynamodbHistoryLogService;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -54,7 +55,6 @@ public class RankingScheduleRepositoryImpl extends BaseDynamoDBRepository<Rankin
|
||||
|
||||
try {
|
||||
RankingScheduleAttrib attrib = new RankingScheduleAttrib();
|
||||
attrib.setAttribType(DynamoDBConstants.ATTRIB_RANKING_SCHEDULER);
|
||||
attrib.setStartTime(convertUTCDate(rankRequest.getStartDt()));
|
||||
attrib.setEndTime(convertUTCDate(rankRequest.getEndDt()));
|
||||
attrib.setIntervalBaseTime(convertUTCDate(rankRequest.getBaseDt()));
|
||||
@@ -62,17 +62,17 @@ public class RankingScheduleRepositoryImpl extends BaseDynamoDBRepository<Rankin
|
||||
attrib.setRankingMetaId(rankRequest.getMetaId());
|
||||
attrib.setEventActionScoreGroupId(rankRequest.getEventActionId());
|
||||
|
||||
Map<EIntervalType, Integer> intervalList = new HashMap<>();
|
||||
intervalList.put(EIntervalType.Refresh, rankRequest.getRefreshInterval());
|
||||
intervalList.put(EIntervalType.Initialization, rankRequest.getInitializationInterval());
|
||||
intervalList.put(EIntervalType.Snapshot, rankRequest.getSnapshotInterval());
|
||||
attrib.setInterval(intervalList);
|
||||
Map<Integer, Integer> intervalList = new HashMap<>();
|
||||
intervalList.put(EIntervalType.Refresh.getValue(), DateUtils.minutesToSeconds(rankRequest.getRefreshInterval()));
|
||||
intervalList.put(EIntervalType.Snapshot.getValue(), DateUtils.minutesToSeconds(rankRequest.getSnapshotInterval()));
|
||||
intervalList.put(EIntervalType.Initialization.getValue(), DateUtils.minutesToSeconds(rankRequest.getInitializationInterval()));
|
||||
attrib.setIntervalTimes(intervalList);
|
||||
|
||||
RankingScheduleDoc doc = new RankingScheduleDoc();
|
||||
doc.setPK(DynamoDBConstants.PK_KEY_RANKING_SCHEDULER);
|
||||
doc.setSK(rankRequest.getGuid());
|
||||
doc.setDocType(DynamoDBConstants.DOC_RANKING_SCHEDULER);
|
||||
doc.setAttribValue(objectMapper.writeValueAsString(attrib));
|
||||
doc.setAttribValue(attrib);
|
||||
doc.setCreatedDateTime(convertUTCDate(nowDate));
|
||||
doc.setUpdatedDateTime(convertUTCDate(nowDate));
|
||||
doc.setDeletedDateTime(DynamoDBConstants.MIN_DATE);
|
||||
@@ -101,7 +101,7 @@ public class RankingScheduleRepositoryImpl extends BaseDynamoDBRepository<Rankin
|
||||
if (beforeDoc != null) {
|
||||
RankingScheduleDoc afterDoc = deepCopy(beforeDoc, RankingScheduleDoc.class);
|
||||
|
||||
RankingScheduleAttrib attrib = objectMapper.readValue(afterDoc.getAttribValue(), RankingScheduleAttrib.class);
|
||||
RankingScheduleAttrib attrib = afterDoc.getAttribValue();
|
||||
attrib.setStartTime(convertUTCDate(rankRequest.getStartDt()));
|
||||
attrib.setEndTime(convertUTCDate(rankRequest.getEndDt()));
|
||||
attrib.setIntervalBaseTime(convertUTCDate(rankRequest.getBaseDt()));
|
||||
@@ -109,13 +109,13 @@ public class RankingScheduleRepositoryImpl extends BaseDynamoDBRepository<Rankin
|
||||
attrib.setRankingMetaId(rankRequest.getMetaId());
|
||||
attrib.setEventActionScoreGroupId(rankRequest.getEventActionId());
|
||||
|
||||
Map<EIntervalType, Integer> intervalList = new HashMap<>();
|
||||
intervalList.put(EIntervalType.Refresh, rankRequest.getRefreshInterval());
|
||||
intervalList.put(EIntervalType.Initialization, rankRequest.getInitializationInterval());
|
||||
intervalList.put(EIntervalType.Snapshot, rankRequest.getSnapshotInterval());
|
||||
attrib.setInterval(intervalList);
|
||||
Map<Integer, Integer> intervalList = new HashMap<>();
|
||||
intervalList.put(EIntervalType.Refresh.getValue(), DateUtils.minutesToSeconds(rankRequest.getRefreshInterval()));
|
||||
intervalList.put(EIntervalType.Snapshot.getValue(), DateUtils.minutesToSeconds(rankRequest.getSnapshotInterval()));
|
||||
intervalList.put(EIntervalType.Initialization.getValue(), DateUtils.minutesToSeconds(rankRequest.getInitializationInterval()));
|
||||
attrib.setIntervalTimes(intervalList);
|
||||
|
||||
afterDoc.setAttribValue(objectMapper.writeValueAsString(attrib));
|
||||
afterDoc.setAttribValue(attrib);
|
||||
afterDoc.setUpdatedDateTime(CommonUtils.convertUTCDate(nowDate));
|
||||
|
||||
update(afterDoc);
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.caliverse.admin.dynamodb.repository.Impl;
|
||||
|
||||
import com.caliverse.admin.domain.entity.EFilterOperator;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankingSnapshotDoc;
|
||||
import com.caliverse.admin.dynamodb.dto.PageResult;
|
||||
import com.caliverse.admin.dynamodb.repository.BaseDynamoDBRepository;
|
||||
import com.caliverse.admin.dynamodb.repository.RankingSnapshotRepository;
|
||||
import com.caliverse.admin.dynamodb.service.DynamoDBOperations;
|
||||
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
|
||||
import com.caliverse.admin.mongodb.service.DynamodbHistoryLogService;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RankingSnapshotRepositoryImpl extends BaseDynamoDBRepository<RankingSnapshotDoc> implements RankingSnapshotRepository {
|
||||
public RankingSnapshotRepositoryImpl(DynamoDBOperations operations, DynamodbHistoryLogService dynamodbHistoryLogService, ObjectMapper objectMapper) {
|
||||
super(operations, RankingSnapshotDoc.class, dynamodbHistoryLogService, objectMapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<RankingSnapshotDoc> getRankingSnapshotListWithPaging(String rankingGuid, String sortKeyPrefix, String filterAttributeName, EFilterOperator filterOperator, String filterAttributeValue, Map<String, AttributeValue> exclusiveStartKey, boolean sortIndex) {
|
||||
String pk = DynamoDBConstants.PK_KEY_RANKING_SNAPSHOT + rankingGuid;
|
||||
|
||||
return findByPaging(
|
||||
pk,
|
||||
sortKeyPrefix,
|
||||
filterAttributeName,
|
||||
filterOperator,
|
||||
filterAttributeValue,
|
||||
exclusiveStartKey,
|
||||
sortIndex
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.caliverse.admin.dynamodb.repository;
|
||||
|
||||
import com.caliverse.admin.domain.entity.EFilterOperator;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankDoc;
|
||||
import com.caliverse.admin.dynamodb.dto.PageResult;
|
||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface RankRepository extends DynamoDBRepository<RankDoc> {
|
||||
PageResult<RankDoc> getRankListWithPaging(
|
||||
String rankingGuid,
|
||||
String sortKeyPrefix,
|
||||
String filterAttributeName,
|
||||
EFilterOperator filterOperator,
|
||||
String filterAttributeValue,
|
||||
Map<String, AttributeValue> exclusiveStartKey,
|
||||
boolean sortIndex
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.caliverse.admin.dynamodb.repository;
|
||||
|
||||
import com.caliverse.admin.domain.request.RankRequest;
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerAttrib;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankerDoc;
|
||||
|
||||
public interface RankerRepository extends DynamoDBRepository<RankerDoc> {
|
||||
RankerAttrib findRanker(String rankingGuid, String rankerGuid);
|
||||
void insert(RankRequest rankRequest);
|
||||
void update(RankRequest rankRequest);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.caliverse.admin.dynamodb.repository;
|
||||
|
||||
import com.caliverse.admin.domain.entity.EFilterOperator;
|
||||
import com.caliverse.admin.domain.request.RankRequest;
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerAttrib;
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerSnapshotAttrib;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.FriendDoc;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankerSnapshotDoc;
|
||||
import com.caliverse.admin.dynamodb.dto.PageResult;
|
||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface RankerSnapshotRepository extends DynamoDBRepository<RankerSnapshotDoc> {
|
||||
PageResult<RankerSnapshotDoc> getRankerSnapshotListWithPaging(
|
||||
String rankingGuid,
|
||||
String sortKeyPrefix,
|
||||
String filterAttributeName,
|
||||
EFilterOperator filterOperator,
|
||||
String filterAttributeValue,
|
||||
Map<String, AttributeValue> exclusiveStartKey,
|
||||
boolean sortIndex
|
||||
);
|
||||
RankerSnapshotAttrib findRankerSnapshot(String rankingGuid, String rankerGuid, Integer index);
|
||||
void insert(RankRequest rankRequest);
|
||||
void update(RankRequest rankRequest);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.caliverse.admin.dynamodb.repository;
|
||||
|
||||
import com.caliverse.admin.domain.entity.EFilterOperator;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankingSnapshotDoc;
|
||||
import com.caliverse.admin.dynamodb.dto.PageResult;
|
||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface RankingSnapshotRepository extends DynamoDBRepository<RankingSnapshotDoc> {
|
||||
PageResult<RankingSnapshotDoc> getRankingSnapshotListWithPaging(
|
||||
String rankingGuid,
|
||||
String sortKeyPrefix,
|
||||
String filterAttributeName,
|
||||
EFilterOperator filterOperator,
|
||||
String filterAttributeValue,
|
||||
Map<String, AttributeValue> exclusiveStartKey,
|
||||
boolean sortIndex
|
||||
);
|
||||
}
|
||||
@@ -2,19 +2,34 @@ package com.caliverse.admin.dynamodb.service;
|
||||
|
||||
import com.caliverse.admin.domain.entity.RankingSchedule;
|
||||
import com.caliverse.admin.domain.request.RankRequest;
|
||||
import com.caliverse.admin.dynamodb.repository.RankingSchedulerRepository;
|
||||
import com.caliverse.admin.dynamodb.domain.atrrib.RankerAttrib;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankDoc;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankerSnapshotDoc;
|
||||
import com.caliverse.admin.dynamodb.domain.doc.RankingSnapshotDoc;
|
||||
import com.caliverse.admin.dynamodb.dto.PageResult;
|
||||
import com.caliverse.admin.dynamodb.repository.*;
|
||||
import com.caliverse.admin.global.common.annotation.DynamoDBTransaction;
|
||||
import com.caliverse.admin.global.common.constants.DynamoDBConstants;
|
||||
import com.caliverse.admin.global.common.utils.DateUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import software.amazon.awssdk.enhanced.dynamodb.Key;
|
||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class DynamodbRankService {
|
||||
private final RankingSchedulerRepository rankingScheduleRepository;
|
||||
private final RankerSnapshotRepository rankerSnapshotRepository;
|
||||
private final RankerRepository rankerRepository;
|
||||
private final RankRepository rankRepository;
|
||||
private final RankingSnapshotRepository rankingSnapshotRepository;
|
||||
|
||||
@DynamoDBTransaction
|
||||
public void insertRankingSchedule(RankRequest rankRequest) {
|
||||
@@ -31,4 +46,61 @@ public class DynamodbRankService {
|
||||
rankingScheduleRepository.delete(rankingSchedule.getGuid());
|
||||
}
|
||||
|
||||
public RankerAttrib getRanker(String rankingGuid, String rankerGuid){
|
||||
|
||||
return rankerRepository.findRanker(rankingGuid, rankerGuid);
|
||||
}
|
||||
|
||||
@DynamoDBTransaction
|
||||
public void updateRanker(RankRequest rankRequest) {
|
||||
rankerRepository.update(rankRequest);
|
||||
}
|
||||
|
||||
public List<RankingSnapshotDoc> getRankingSnapshotList(String guid){
|
||||
List<RankingSnapshotDoc> resList = new ArrayList<>();
|
||||
|
||||
Map<String, AttributeValue> pageKey = null;
|
||||
do {
|
||||
PageResult<RankingSnapshotDoc> RankingSnapshotDocList = rankingSnapshotRepository.getRankingSnapshotListWithPaging(guid, "ranking_snapshot#", DynamoDBConstants.ATTRIB_RANKING_SNAPSHOT, null,"", pageKey, false);
|
||||
|
||||
resList.addAll(RankingSnapshotDocList.getItems());
|
||||
|
||||
pageKey = RankingSnapshotDocList.getLastEvaluatedKey();
|
||||
} while (pageKey != null);
|
||||
|
||||
return resList;
|
||||
}
|
||||
|
||||
public List<RankerSnapshotDoc> getRankerSnapshotList(String guid, Integer snapshotIndex){
|
||||
List<RankerSnapshotDoc> resList = new ArrayList<>();
|
||||
|
||||
String sortKey = "ranker_snapshot#" + snapshotIndex;
|
||||
|
||||
Map<String, AttributeValue> pageKey = null;
|
||||
do {
|
||||
PageResult<RankerSnapshotDoc> RankingSnapshotDocList = rankerSnapshotRepository.getRankerSnapshotListWithPaging(guid, sortKey, DynamoDBConstants.ATTRIB_RANKER_SNAPSHOT, null,"", pageKey, false);
|
||||
|
||||
resList.addAll(RankingSnapshotDocList.getItems());
|
||||
|
||||
pageKey = RankingSnapshotDocList.getLastEvaluatedKey();
|
||||
} while (pageKey != null);
|
||||
|
||||
return resList;
|
||||
}
|
||||
|
||||
public List<RankDoc> getRankList(String guid){
|
||||
List<RankDoc> resList = new ArrayList<>();
|
||||
|
||||
Map<String, AttributeValue> pageKey = null;
|
||||
do {
|
||||
PageResult<RankDoc> RankingSnapshotDocList = rankRepository.getRankListWithPaging(guid, "rank#", DynamoDBConstants.ATTRIB_RANK, null,"", pageKey, false);
|
||||
|
||||
resList.addAll(RankingSnapshotDocList.getItems());
|
||||
|
||||
pageKey = RankingSnapshotDocList.getLastEvaluatedKey();
|
||||
} while (pageKey != null);
|
||||
|
||||
return resList;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user