using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.CompilerServices; using Newtonsoft.Json; using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.Model; using Amazon.DynamoDBv2.DocumentModel; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using SESSION_ID = System.Int32; using WORLD_ID = System.UInt32; using META_ID = System.UInt32; using ENTITY_GUID = System.String; using ACCOUNT_ID = System.String; using OWNER_GUID = System.String; using USER_GUID = System.String; using CHARACTER_GUID = System.String; using ITEM_GUID = System.String; namespace ServerCommon { public class UserBaseAttrib : AttribBase { [JsonProperty("user_guid")] public USER_GUID UserGuid { get; set; } = string.Empty; [JsonProperty("account_id")] public ACCOUNT_ID AccountId { get; set; } = string.Empty; [JsonProperty("eoa")] public string EOA { get; set; } = string.Empty; [JsonProperty("selected_character_guid")] public CHARACTER_GUID SelectedCharacterGuid { get; set; } = string.Empty; [JsonProperty("is_intro_completed")] public bool IsIntroCompleted { get; set; } = false; [JsonProperty("game_login_datetime")] public DateTime GameLoginDateTime = DateTime.MinValue; [JsonProperty("game_logout_datetime")] public DateTime GameLogoutDateTime = DateTime.MinValue; public UserBaseAttrib() : base(typeof(UserBaseAttrib).Name) { } } //============================================================================================= // Primary Key // PK(Partition Key) : "user_base#user_guid" // SK(Sort Key) : "" // UserBaseAttrib : {} // ... //============================================================================================= public class UserBaseDoc : DynamoDbDocBase, ICopyDocFromEntityAttribute { private static string getPrefixOfPK() { return "user_base#"; } private static string getPrefixOfSK() { return ""; } public UserBaseDoc() : base(typeof(UserBaseDoc).Name) { appendAttribWrapperAll(); } public UserBaseDoc(USER_GUID userGuid) : base(typeof(UserBaseDoc).Name) { setCombinationKeyForPK(userGuid); appendAttribWrapperAll(); fillUpPrimaryKey(onMakePK(), onMakeSK()); } private void appendAttribWrapperAll() { appendAttribWrapper(new AttribWrapper()); } protected override string onGetPrefixOfPK() { return getPrefixOfPK(); } // override ICopyDocFromEntityAttribute public bool copyDocFromEntityAttribute(EntityAttributeBase entityAttributeBase) { var user_attribute = entityAttributeBase as UserAttribute; if (null == user_attribute) { return false; } var user_base_attrib = getAttrib(); NullReferenceCheckHelper.throwIfNull(user_base_attrib, () => $"user_base_attrib is null !!! - {toBasicString()}"); user_base_attrib.UserGuid = user_attribute.UserGuid; user_base_attrib.AccountId = user_attribute.AccountId; user_base_attrib.EOA = user_attribute.EOA; user_base_attrib.SelectedCharacterGuid = user_attribute.SelectedCharacterGuid; user_base_attrib.IsIntroCompleted = user_attribute.IsIntroCompleted; return true; } } }