using Newtonsoft.Json; using ServerBase; namespace ServerCommon; public class UgcNpcRankAttrib : AttribBase { /// /// rank 정보 /// key: {ownerGuid}_{ugcnpcMetaGuid} /// value: score /// /// UgcNpcRankHelper.makeRankKey() [JsonProperty("data")] public Dictionary ranks { get; set; } = new(); public UgcNpcRankAttrib() : base(nameof(UgcNpcRankAttrib), false) { } } //============================================================================================= // Primary Key // PK(Partition Key) : ugcnpcrank#{state} // SK(Sort Key) : "" // DocType : UgcNpcRankDoc // Attrib : UgcNpcRankAttrib // ... //============================================================================================= public class UgcNpcRankDoc : DynamoDbDocBase { public static string getPrefixOfPK() => "ugcnpcrank#"; public UgcNpcRankDoc() : base(nameof(UgcNpcRankDoc)) { appendAttribWrapperAll(); } public UgcNpcRankDoc(UgcNpcRankState state, UgcNpcRankType type, string? rankDate) : base(nameof(UgcNpcRankDoc)) { setCombinationKeyForPK(state.ToString()); var sk = null == rankDate ? type.ToString() : $"{type}#{rankDate}"; setCombinationKeyForSK(sk); fillUpPrimaryKey(onMakePK(), onMakeSK()); appendAttribWrapperAll(); } public UgcNpcRankDoc(UgcNpcRankState state, UgcNpcRankType type, string? rankDate, Int64 ttlSeconds) : base(nameof(UgcNpcRankDoc), ttlSeconds) { setCombinationKeyForPK(state.ToString()); var sk = null == rankDate ? type.ToString() : $"{type}#{rankDate}"; setCombinationKeyForSK(sk); fillUpPrimaryKey(onMakePK(), onMakeSK()); appendAttribWrapperAll(); } private void appendAttribWrapperAll() { appendAttribWrapper(new AttribWrapper()); } protected override string onGetPrefixOfPK() => getPrefixOfPK(); protected override string onMakeSK() { return $"{onGetPrefixOfSK()}{getCombinationKeyForSK()}"; } protected override ServerErrorCode onCheckAndSetSK(string sortKey) { getPrimaryKey().fillUpSK(sortKey); setCombinationKeyForSK(sortKey); return ServerErrorCode.Success; } }