랭커 조회 및 랭킹 정보 수정

This commit is contained in:
2025-11-24 15:32:17 +09:00
parent 5fbaaafe43
commit dae7b80c9b
26 changed files with 1188 additions and 35 deletions

View File

@@ -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(

View File

@@ -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")

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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
);
}
}

View File

@@ -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());
}
}
}

View File

@@ -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());
}
}
}

View File

@@ -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);

View File

@@ -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
);
}
}

View File

@@ -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
);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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
);
}

View File

@@ -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;
}
}