Files
caliverse_server/ServerCommon/z.Backup/MainDB.cs
2025-05-01 07:20:41 +09:00

2613 lines
91 KiB
C#

//using System.Collections.Concurrent;
//using System.Runtime.CompilerServices;
//using System.Text;
//using Newtonsoft.Json;
//using Google.Protobuf.WellKnownTypes;
//using Amazon.DynamoDBv2;
//using Amazon.DynamoDBv2.DocumentModel;
//using Amazon.DynamoDBv2.Model;
//using ServerCore; using ServerBase;
//using static Grpc.Core.Metadata;
//namespace ServerCommon
//{
// public enum EDBExecuteType
// {
// Insert,
// Update,
// Delete,
// ExistsDelete,
// }
// public enum EEntityType
// {
// Account,
// AccountId,
// Building,
// BuildingList,
// Character,
// CharList,
// Land,
// LandList,
// MyHome,
// MyHomeList,
// SocialActionCollection,
// SocialActionSlot,
// EmotionCollection,
// EmotionSlot,
// BlackList,
// WhiteList,
// NickName,
// GameOption,
// ReceivedMail,
// SendedMail,
// CharMetaData,
// Room,
// RoomList,
// Item,
// Inventory,
// ToolSlot,
// Cart,
// FriendList,
// FriendFolderList,
// FriendRequestList,
// QuestList,
// QuestMail,
// ClaimRewardNormal,
// ClaimRewardMembership,
// TattooSlot,
// BlockList,
// UserReport,
// SystemMail,
// NoticeChat,
// MinimapMarker,
// CharProfile,
// MyShop,
// InstanceLastRoom,
// EscapePosition,
// }
// public class DBDocumentInfo
// {
// public DBDocumentInfo(Document document, EDBExecuteType type)
// {
// this.document = document;
// executeType = type;
// }
// public Document? document;
// public EDBExecuteType executeType;
// public override string ToString() => $"document: {document?.ToJsonPretty()}, executeType: {executeType}";
// }
// public class MainDB
// {
// AmazonDynamoDBClient? Client = null;
// string TableName = string.Empty;
// public AmazonDynamoDBClient? getDbClient() => Client;
// Table? _mainTable;
// public MainDB() { }
// GetItemOperationConfig operationDefaultConfig = new GetItemOperationConfig{ ConsistentRead = true };
// TransactWriteItemOperationConfig? existsTranConfig;
// TransactWriteItemOperationConfig? notExistsTranConfig;
// public async Task<bool> DeleteBotClient()
// {
// try
// {
// if(_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return false;
// }
// ScanFilter filter = new();
// filter.AddCondition("PK", ScanOperator.BeginsWith, "accountid#BotClient");
// ScanOperationConfig operationConfig = new ScanOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search search = _mainTable.Scan(operationConfig);
// List<Document> list = new List<Document>(1000);
// while (search.IsDone == false)
// {
// List<Document> documents = await search.GetNextSetAsync();
// list.AddRange(documents.AsEnumerable());
// }
// list.ForEach(doc =>
// {
// _mainTable.DeleteItemAsync(doc);
// });
// }
// catch(Exception ex)
// {
// Log.getLogger().error(ex.ToString());
// }
// return true;
// }
// static string GetPrefix(EEntityType type, bool isPK)
// {
// string prefixPK = string.Empty;
// string prefixSK = string.Empty;
// switch (type)
// {
// case EEntityType.Account:
// prefixPK = "account#";
// prefixSK = "account#";
// break;
// case EEntityType.AccountId:
// prefixPK = "accountid#";
// prefixSK = "account#";
// break;
// case EEntityType.Building:
// prefixPK = "building#";
// prefixSK = "building#";
// break;
// case EEntityType.BuildingList:
// prefixPK = "char#";
// prefixSK = "buildinglist#";
/// break;
// case EEntityType.Character:
// prefixPK = "char#";
// prefixSK = "char#";
// break;
// case EEntityType.CharList:
// prefixPK = "charlist#";
// prefixSK = "char#";
// break;
// case EEntityType.Land:
// prefixPK = "land#";
// prefixSK = "land#";
// break;
// case EEntityType.LandList:
// prefixPK = "char#";
// prefixSK = "landlist#";
// break;
// case EEntityType.MyHome:
// prefixPK = "char#";
// prefixSK = "myhome#";
// break;
// case EEntityType.MyHomeList:
// prefixPK = "char#";
// prefixSK = "myhomelist#";
// break;
// case EEntityType.SocialActionCollection:
// prefixPK = "char#";
// prefixSK = "socialactioncollection#";
// break;
// case EEntityType.SocialActionSlot:
// prefixPK = "char#";
// prefixSK = "socialactionslot#";
// break;
// case EEntityType.EmotionCollection:
// prefixPK = "char#";
// prefixSK = "emotioncollection#";
// break;
// case EEntityType.EmotionSlot:
// prefixPK = "char#";
// prefixSK = "emotionslot#";
// break;
// case EEntityType.BlackList:
// prefixPK = "blacklist#";
// prefixSK = "blacklist#";
// break;
// case EEntityType.WhiteList:
// prefixPK = "whitelist#";
// prefixSK = "whitelist#";
// break;
// case EEntityType.NickName:
// prefixPK = "nickname#";
// prefixSK = "nickname#";
// break;
// case EEntityType.GameOption:
// prefixPK = "game_option#";
// prefixSK = "";
// break;
// case EEntityType.ReceivedMail:
// prefixPK = "char#";
// prefixSK = "receivedmailid#";
// break;
// case EEntityType.SendedMail:
// prefixPK = "char#";
// prefixSK = "sendedmailid#";
// break;
// case EEntityType.CharMetaData:
// prefixPK = "char#";
// prefixSK = "charmetadata#";
// break;
// case EEntityType.Room:
// prefixPK = "room#";
// prefixSK = "";
// break;
// case EEntityType.RoomList:
// prefixPK = "char#";
// prefixSK = "roomlist#";
// break;
// case EEntityType.Item:
// prefixPK = "item#";
// prefixSK = "item#";
// break;
// case EEntityType.Inventory:
// prefixPK = "char#";
// prefixSK = "inventory#";
// break;
// case EEntityType.ToolSlot:
// prefixPK = "char#";
// prefixSK = "toolslot#";
// break;
// case EEntityType.Cart:
// prefixPK = "account#";
// prefixSK = "cart#";
// break;
// case EEntityType.FriendList:
// prefixPK = "friendList#";
// prefixSK = "friend#";
// break;
// case EEntityType.FriendFolderList:
// prefixPK = "friendFolderList#";
// prefixSK = "friendFolder#";
// break;
// case EEntityType.FriendRequestList:
// prefixPK = "friendRequestList#";
// prefixSK = "friendRequest#";
// break;
// case EEntityType.QuestList:
// prefixPK = "char#";
// prefixSK = "questlist#";
// break;
// case EEntityType.QuestMail:
// prefixPK = "questmail#";
// prefixSK = "questmail#";
// break;
// case EEntityType.ClaimRewardNormal:
// prefixPK = "claimreward#";
// prefixSK = "normal#";
// break;
// case EEntityType.ClaimRewardMembership:
// prefixPK = "claimreward#";
// prefixSK = "membership#";
// break;
// case EEntityType.TattooSlot:
// prefixPK = "char#";
// prefixSK = "tattooslot#";
// break;
// case EEntityType.BlockList:
// prefixPK = "blockList#";
// prefixSK = "block#";
// break;
// case EEntityType.UserReport:
// prefixPK = "user_report#";
// prefixSK = "report#";
// break;
// case EEntityType.SystemMail:
// prefixPK = "system_mail#";
// prefixSK = "";
// break;
// case EEntityType.NoticeChat:
// prefixPK = "notice_chat#";
// prefixSK = "";
// break;
// case EEntityType.MinimapMarker:
// prefixPK = "mini_map_marker#";
// prefixSK = "";
// break;
// case EEntityType.CharProfile:
// prefixPK = "user_profile#";
// prefixSK = "";
// break;
// case EEntityType.MyShop:
// prefixPK = "char#";
// prefixSK = "myShop#";
// break;
// case EEntityType.InstanceLastRoom:
// prefixPK = "instance_last_room#";
// prefixSK = "";
// break;
// case EEntityType.EscapePosition:
// prefixPK = "escape_position#";
// prefixSK = "";
// break;
// default:
// Log.getLogger().error($"Wrong EEntityType : {type.ToString()}");
// break;
// }
// if (isPK)
// return prefixPK;
// else
// return prefixSK;
// }
// public static string GetPKPrefix(EEntityType type)
// {
// return GetPrefix(type, true);
// }
// public static string GetSKPrefix(EEntityType type)
// {
// return GetPrefix(type, false);
// }
// static string MakeKey(EEntityType type, string id, bool isPK)
// {
// string PK = string.Empty;
// string SK = string.Empty;
// switch (type)
// {
// case EEntityType.Account:
// case EEntityType.AccountId:
// case EEntityType.Building:
// case EEntityType.BuildingList:
// case EEntityType.Character:
// case EEntityType.CharList:
// case EEntityType.Land:
// case EEntityType.LandList:
// case EEntityType.MyHome:
// case EEntityType.MyHomeList:
// case EEntityType.SocialActionCollection:
// case EEntityType.SocialActionSlot:
// case EEntityType.EmotionCollection:
// case EEntityType.EmotionSlot:
// case EEntityType.BlackList:
// case EEntityType.WhiteList:
// case EEntityType.NickName:
// case EEntityType.GameOption:
// case EEntityType.ReceivedMail:
// case EEntityType.SendedMail:
// case EEntityType.CharMetaData:
// case EEntityType.Room:
// case EEntityType.RoomList:
// case EEntityType.Item:
// case EEntityType.Inventory:
// case EEntityType.ToolSlot:
// case EEntityType.Cart:
// case EEntityType.FriendList:
// case EEntityType.FriendFolderList:
// case EEntityType.FriendRequestList:
// case EEntityType.QuestList:
// case EEntityType.QuestMail:
// case EEntityType.ClaimRewardNormal:
// case EEntityType.ClaimRewardMembership:
// case EEntityType.BlockList:
// case EEntityType.TattooSlot:
// case EEntityType.UserReport:
// case EEntityType.SystemMail:
// case EEntityType.NoticeChat:
// case EEntityType.MinimapMarker:
// case EEntityType.CharProfile:
// case EEntityType.MyShop:
// case EEntityType.InstanceLastRoom:
// case EEntityType.EscapePosition:
// PK = GetPKPrefix(type) + id;
// SK = GetSKPrefix(type) + id;
// break;
// default:
// Log.getLogger().error($"Wrong EEntityType : {type.ToString()}");
// break;
// }
// if (isPK)
// return PK;
// else
// return SK;
// }
// public static string MakePK(EEntityType type, string pk_id)
// {
// return MakeKey(type, pk_id, true);
// }
// public static string MakeSK(EEntityType type, string sk_id)
// {
// return MakeKey(type, sk_id, false);
// }
// public static Document DocumentForInsert(EEntityType type, string pk_id, string sk_id, Object? attr = null)
// {
// Document document = new Document();
// try
// {
// document["PK"] = MakePK(type, pk_id);
// document["SK"] = MakeSK(type, sk_id);
// document["Type"] = type.ToString();
// if (attr == null)
// return document;
// if (type != EEntityType.Character)
// {
// document["Attr"] = JsonConvert.SerializeObject(attr);
// }
// else
// {
// CharEntity enity = (CharEntity)attr;
// document = enity.DocumentForUpdate();
// }
// }
// catch (Exception ex)
// {
// Log.getLogger().error($"{ex}");
// }
// return document;
// }
// public static Document DocumentForInsertWithTTL(EEntityType type, string pk_id, string sk_id, DateTime expireDate, Object? attr = null)
// {
// Document document = new Document();
// document["PK"] = MakePK(type, pk_id);
// document["SK"] = MakeSK(type, sk_id);
// document["TTL"] = expireDate.ToTimestamp().Seconds;
// document["Type"] = type.ToString();
// if (attr == null)
// return document;
// if (type != EEntityType.Character)
// {
// document["Attr"] = JsonConvert.SerializeObject(attr);
// }
// else
// {
// CharEntity enity = (CharEntity)attr;
// document = enity.DocumentForUpdate();
// }
// return document;
// }
// public static Document DocumentForGet(EEntityType type, string pk_id, string sk_id)
// {
// Document document = new Document();
// document["PK"] = MakePK(type, pk_id);
// document["SK"] = MakeSK(type, sk_id);
// return document;
// }
// public async Task<List<Document>> DocumentForGetFromPK(EEntityType type, string pk_id)
// {
// List<Document> documnetList = new();
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return documnetList;
// }
// string PK = MakePK(type, pk_id);
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, PK);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(type));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search search = _mainTable.Query(operationConfig);
// while (search.IsDone == false)
// {
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// documnetList.Add(document);
// }
// }
// return documnetList;
// }
// public static Document DocumentForDelete(EEntityType type, string pk_id, string sk_id)
// {
// Document document = new Document();
// document["PK"] = MakePK(type, pk_id);
// document["SK"] = MakeSK(type, sk_id);
// return document;
// }
// public async Task ClearMatchPK(EEntityType entityType, string pk)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// List<Document> deleteList = new();
// string PK = MakePK(entityType, pk);
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, PK);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(entityType));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search search = _mainTable.Query(operationConfig);
// while (search.IsDone == false)
// {
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// deleteList.Add(document);
// }
// }
// foreach (Document document in deleteList)
// {
// await _mainTable.DeleteItemAsync(document);
// }
// }
// public bool CreateClient(ServerConfig config)
// {
// var error_code = config.fillupDbTableNameWithServiceType(out TableName);
// if (error_code.isFail())
// {
// Log.getLogger().error($"Fail to fill up DB TableName !!! error_code:{error_code}");
// return false;
// }
//#if (SERVER_REFECTORING)
//#else//SERVER_REFECTORING
// Client = DynamoDBHelper.CreateClient(config);
//#endif//SERVER_REFECTORING
// return (Client != null);
// }
// public async Task<bool> CreateDBIfNotExists(bool resetTable)
// {
// await Task.CompletedTask;
// if (Client == null)
// {
// Log.getLogger().error($"Client is null");
// return false;
// }
// if (resetTable == true)
// {
//#if (SERVER_REFECTORING)
//#else//SERVER_REFECTORING
// await DynamoDBHelper.DeleteTable(Client, TableName);
//#endif//SERVER_REFECTORING
// }
// bool ret = true;
//#if (SERVER_REFECTORING)
//#else//SERVER_REFECTORING
// if (await DynamoDBHelper.CheckingTableExistence(Client, TableName) == false)
//#endif//SERVER_REFECTORING
// {
// List<AttributeDefinition> tableAttributes = new List<AttributeDefinition>();
// tableAttributes.Add(new AttributeDefinition("PK", ScalarAttributeType.S));
// tableAttributes.Add(new AttributeDefinition("SK", ScalarAttributeType.S));
// List<KeySchemaElement> tableKeySchema = new List<KeySchemaElement>();
// tableKeySchema.Add(new KeySchemaElement("PK", KeyType.HASH));
// tableKeySchema.Add(new KeySchemaElement("SK", KeyType.RANGE));
//#if (SERVER_REFECTORING)
//#else//SERVER_REFECTORING
// ret = await DynamoDBHelper.CreateTable( Client, TableName
// , tableAttributes, tableKeySchema );
//#endif//SERVER_REFECTORING
// }
// var pkExistsExpression = new Amazon.DynamoDBv2.DocumentModel.Expression();
// pkExistsExpression.ExpressionStatement = "attribute_exists(#PK)";
// pkExistsExpression.ExpressionAttributeNames["#PK"] = "PK";
// var pkNotExistsExpression = new Amazon.DynamoDBv2.DocumentModel.Expression();
// pkNotExistsExpression.ExpressionStatement = "attribute_not_exists(#PK)";
// pkNotExistsExpression.ExpressionAttributeNames["#PK"] = "PK";
// existsTranConfig = new TransactWriteItemOperationConfig() { ConditionalExpression = pkExistsExpression, ReturnValuesOnConditionCheckFailure = Amazon.DynamoDBv2.DocumentModel.ReturnValuesOnConditionCheckFailure.AllOldAttributes };
// notExistsTranConfig = new TransactWriteItemOperationConfig() { ConditionalExpression = pkNotExistsExpression, ReturnValuesOnConditionCheckFailure = Amazon.DynamoDBv2.DocumentModel.ReturnValuesOnConditionCheckFailure.AllOldAttributes };
// _mainTable = Table.LoadTable(Client, TableName);
// return ret;
// }
// public async Task<bool> UpdateDocument(Document document)
// {
// try
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return false;
// }
// await _mainTable.UpdateItemAsync(document);
// }
// catch (Exception e)
// {
// Log.getLogger().error($"{e}");
// return false;
// }
// return true;
// }
// public async Task<bool> UpdateDocuments(List<Document> documents)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return false;
// }
// if (documents.Count > 0 )
// {
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// foreach (var document in documents)
// {
// batch.AddDocumentToPut(document);
// }
// await batch.ExecuteAsync();
// }
// return true;
// }
// public async Task<bool> DeleteDocuments(List<Document> documents)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return false;
// }
// if (documents.Count > 0)
// {
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// foreach (var document in documents)
// {
// batch.AddItemToDelete(document);
// }
// await batch.ExecuteAsync();
// }
// return true;
// }
// public async Task<AccountEntity?> InsertAccount(string accountId, AccountAttr? attr)
// {
// if(attr== null || attr.Aid == null)
// {
// Log.getLogger().error("entity is null");
// return null;
// }
// try
// {
// if(_mainTable== null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// Log.getLogger().debug($"{accountId} {JsonConvert.SerializeObject(attr)}");
// Document document1 = DocumentForInsert(EEntityType.Account, attr.Aid, attr.Aid, attr);
// Document document2 = DocumentForInsert(EEntityType.AccountId, accountId, attr.Aid);
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// batch.AddDocumentToPut(document1);
// batch.AddDocumentToPut(document2);
// await batch.ExecuteAsync();
// AccountEntity entity = new AccountEntity(document1);
// return entity;
// }
// catch (Exception ex)
// {
// Log.getLogger().error(ex.ToString());
// return null;
// }
// }
// public async IAsyncEnumerable<string> DelAllDataExceptTableData()
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// yield break;
// }
// ScanFilter filter = new ScanFilter();
// filter.AddCondition("PK", ScanOperator.BeginsWith, GetPKPrefix(EEntityType.AccountId));
// ScanOperationConfig operationConfig = new ScanOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search search = _mainTable.Scan(operationConfig);
// while (!search.IsDone)
// {
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// AccountIDEntity entity = new AccountIDEntity(document);
// if(TableData.Instance.m_test_user_initial_meta_datas.TryGetValue(entity.PK_Name, out _) == true)
// {
// continue;
// }
// await DelAllDataByGuid(entity.PK_Name, entity.SK_Guid);
// yield return entity.PK_Name;
// }
// }
// }
// public async IAsyncEnumerable<string> DelAllDataFromId(string beginId)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// yield break;
// }
// ScanFilter filter = new ScanFilter();
// filter.AddCondition("PK", ScanOperator.BeginsWith, GetPKPrefix(EEntityType.AccountId)+beginId);
// ScanOperationConfig operationConfig = new ScanOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search search = _mainTable.Scan(operationConfig);
// while (!search.IsDone)
// {
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// AccountIDEntity entity = new AccountIDEntity(document);
// await DelAllDataByGuid(entity.PK_Name, entity.SK_Guid);
// yield return entity.PK_Name;
// }
// }
// }
// private async Task DelAllDataByGuid(string id, string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// //Land, pk = landid
// //BuildingList, unknown
// //Building, pk = buildingguid
// DelDataByGuid(accountGuid, EEntityType.EmotionSlot);
// DelDataByGuid(accountGuid, EEntityType.EmotionCollection);
// DelDataByGuid(accountGuid, EEntityType.SocialActionSlot);
// DelDataByGuid(accountGuid, EEntityType.SocialActionCollection);
// DelDataByGuid(accountGuid, EEntityType.MyHome);
// DelDataByGuid(accountGuid, EEntityType.LandList);
// DocumentBatchWrite batch;
// Document documentForDelete;
// batch = _mainTable.CreateBatchWrite();
// //CharList,
// documentForDelete = DocumentForDelete(EEntityType.CharList, accountGuid, accountGuid);
// batch.AddItemToDelete(documentForDelete);
// //charData
// documentForDelete = DocumentForDelete(EEntityType.Character, accountGuid, accountGuid);
// batch.AddItemToDelete(documentForDelete);
// //AccountId,
// documentForDelete = DocumentForDelete(EEntityType.AccountId, id, accountGuid);
// batch.AddItemToDelete(documentForDelete);
// //Account,
// documentForDelete = DocumentForDelete(EEntityType.Account, accountGuid, accountGuid);
// batch.AddItemToDelete(documentForDelete);
// await batch.ExecuteAsync();
// return;
// }
// private async void DelDataByGuid(string accountGuid, EEntityType entityType)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// DocumentBatchWrite batch;
// batch = _mainTable.CreateBatchWrite();
// await foreach (var document in GetAllDocument(accountGuid, entityType))
// {
// batch.AddItemToDelete(document);
// }
// await batch.ExecuteAsync();
// }
// public async IAsyncEnumerable<Document> GetAllDocument(string pkey, EEntityType entityType)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// yield break;
// }
// string pk = MakePK(entityType, pkey);
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, pk);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(entityType));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search? search = _mainTable.Query(operationConfig);
// while (search.IsDone == false)
// {
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// yield return document;
// }
// }
// }
// public async Task<string?> GetAccountGuid(string id)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// string pk = MakePK(EEntityType.AccountId, id);
// Log.getLogger().debug($"Table:{_mainTable.TableName} accountID:{pk}");
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, pk);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(EEntityType.AccountId));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search? search = _mainTable.Query(operationConfig);
// if (search == null)
// {
// Log.getLogger().info($"Not found Table:{_mainTable} accountID:{id} Search is null");
// return null;
// }
// List<Document> documents = await search.GetNextSetAsync();
// if (documents.Count != 1)
// {
// Log.getLogger().info($"Not found Table:{_mainTable} accountID:{id} count:{documents.Count}");
// return null;
// }
// AccountIDEntity entity = new AccountIDEntity(documents[0]);
// Log.getLogger().debug($"Table:{_mainTable.TableName} accountID:{pk} {JsonConvert.SerializeObject(entity)}");
// return entity.SK_Guid;
// }
// public async Task<AccountEntity?> GetAccountByID(string id)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// string pk = MakePK(EEntityType.AccountId, id);
// Log.getLogger().debug($"Table:{_mainTable.TableName} accountID:{pk}");
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, pk);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(EEntityType.AccountId));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search? search = _mainTable.Query(operationConfig);
// if (search == null)
// {
// Log.getLogger().info($"Not found Table:{_mainTable} accountID:{id} Search is null");
// return null;
// }
// List<Document> documents = await search.GetNextSetAsync();
// if (documents.Count != 1)
// {
// Log.getLogger().info($"Not found Table:{_mainTable} accountID:{id} count:{documents.Count}");
// return null;
// }
// AccountIDEntity entity = new AccountIDEntity(documents[0]);
// Log.getLogger().debug($"Table:{_mainTable.TableName} accountID:{pk} {JsonConvert.SerializeObject(entity)}");
// return await GetAccountByGuid(entity.SK_Guid);
// }
// public async Task<AccountEntity?> GetAccountByGuid(string guid)
// {
// Log.getLogger().debug($"GetAccountByGuid:{guid}");
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.Account, guid, guid);
// Document document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// Log.getLogger().error($"Not found Table:{_mainTable} accountGuid:{guid}");
// return null;
// }
// AccountEntity entity = new AccountEntity(document);
// return entity;
// }
// public async Task UpdateAccount(AccountEntity entity)
// {
// Log.getLogger().debug($"UpdateAccount {entity.Attr.Id}");
// try
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// var document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// }
// catch (Exception ex)
// {
// Log.getLogger().error(ex.ToString());
// }
// }
// public async Task<CharEntity?> InsertChar(string accountGuid, string id)
// {
// // 기본적인 정보 구성만 한다. GUID 생성 & 저장되는 처리는 하지 말자
// var result = new Result();
// var err_msg = string.Empty;
// Log.getLogger().debug($"InsertChar {accountGuid} {id}");
// //string guid = Guid.NewGuid().ToString("N");
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var user_attrib = new CharEntity();
// Log.getLogger().debug(JsonConvert.SerializeObject(user_attrib));
// user_attrib.PK_Guid = accountGuid;
// try
// {
// user_attrib.PK_Guid = accountGuid;
// user_attrib.Id = id;
// Document document1 = DocumentForInsert(EEntityType.Character, accountGuid, accountGuid, user_attrib);
// Document document2 = DocumentForInsert(EEntityType.CharList, accountGuid, accountGuid);
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// batch.AddDocumentToPut(document1);
// batch.AddDocumentToPut(document2);
// await batch.ExecuteAsync();
// }
// catch (Exception ex)
// {
// Log.getLogger().error(ex.ToString());
// }
// return user_attrib;
// }
// public async Task<List<CharEntity>?> ListChar(string accountGuid)
// {
// //await DeleteChar(accountGuid, accountGuid);
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// string pk = MakePK(EEntityType.CharList, accountGuid);
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, pk);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(EEntityType.CharList));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// List<CharListEntity> charListEntities = new List<CharListEntity>();
// Search search = _mainTable.Query(operationConfig);
// while (search.IsDone == false)
// {
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// CharListEntity entity = new CharListEntity(document);
// charListEntities.Add(entity);
// }
// }
// List<CharEntity> charList = new List<CharEntity>();
// if (charListEntities.Count > 0)
// {
// DocumentBatchGet batchGet = _mainTable.CreateBatchGet();
// batchGet.ConsistentRead = true;
// foreach (var charListEntity in charListEntities)
// {
// Document document = DocumentForGet(EEntityType.Character, charListEntity.SK_CharGuid, charListEntity.SK_CharGuid);
// batchGet.AddKey(document);
// }
// await batchGet.ExecuteAsync();
// foreach (Document document in batchGet.Results)
// {
// CharEntity entiry = new CharEntity(document);
// charList.Add(entiry);
// }
// }
// return charList;
// }
// public async Task DeleteChar(string guid, string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// Document documentForDelete1 = DocumentForDelete(EEntityType.Character, guid, guid);
// Document documentForDelete2 = DocumentForDelete(EEntityType.CharList, guid, accountGuid);
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// batch.AddItemToDelete(documentForDelete1);
// batch.AddItemToDelete(documentForDelete2);
// await batch.ExecuteAsync();
// }
// public async Task<CharEntity?> GetChar(string guid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.Character, guid, guid);
// Document document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// Log.getLogger().error($"Not found Table:{_mainTable} charGuid:{guid}");
// return null;
// }
// CharEntity entity = new CharEntity(document);
// return entity;
// }
// public async Task SaveChar(CharEntity entity)
// {
// try
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// var document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// }
// catch(Exception ex)
// {
// Log.getLogger().error($"{ex}, {entity.Id}");
// }
// }
// public async Task<InventoryEntity?> LoadInven(string charGuild, InventoryEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// _ = await entity.LoadAsync(_mainTable, charGuild);
// return entity;
// }
// public async Task<InventoryEntity?> DelInven(string charGuild, InventoryEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// _ = await entity.DelInven(_mainTable, charGuild);
// return entity;
// }
// public async Task SaveInven(string charGuild, InventoryEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// await entity.InsertAsync(charGuild, _mainTable);
// }
// public async Task<Document?> GetMyHomeList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.MyHomeList, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.MyHomeList, accountGuid, "", new MyHomeListAttr());
// }
// return document;
// }
// public async Task<Document?> GetMyHomeData(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.MyHome, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.MyHome, accountGuid, "", new MyHomeAttr());
// }
// return document;
// }
// public async Task UpdateMyHome(MyHomeEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// var document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// }
// public async Task DeleteMyHome(string accountGuid, int slotNum)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// var document = DocumentForDelete(EEntityType.MyHome, accountGuid, slotNum.ToString());
// await _mainTable.DeleteItemAsync(document);
// return;
// }
// public async Task<Document?> GetLandList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.LandList, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.LandList, accountGuid, "", new LandListEntity());
// }
// return document;
// }
// public async Task<List<LandEntity>?> GetLandEntityList(List<int> landIds)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// List<LandEntity> returnLIst = new();
// if (landIds.Count > 0)
// {
// var batchGet = _mainTable.CreateBatchGet();
// batchGet.ConsistentRead = true;
// foreach (var roomId in landIds)
// {
// Document document = DocumentForGet(EEntityType.Land, roomId.ToString(), roomId.ToString());
// batchGet.AddKey(document);
// }
// await batchGet.ExecuteAsync();
// foreach (var document in batchGet.Results)
// {
// var entity = new LandEntity(document);
// returnLIst.Add(entity);
// }
// }
// return returnLIst;
// }
// /// <summary>
// /// <see cref="LandEntity"/> 업데이트
// /// </summary>
// /// <param name="entity"></param>
// /// <returns></returns>
// public async Task UpdateLand(LandEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// }
// /// <summary>
// /// <see cref="LandEntity"/> 목록 업데이트
// /// </summary>
// /// <param name="entites"></param>
// /// <returns></returns>
// public async Task UpdateLands(List<LandEntity> entites)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// if (entites.Count > 0)
// {
// var batchWrite = _mainTable.CreateBatchWrite();
// foreach (var entity in entites)
// {
// Document document = entity.DocumentForUpdate();
// batchWrite.AddDocumentToPut(document);
// }
// await batchWrite.ExecuteAsync();
// }
// }
// public async Task<Document?> GetBuildingList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.BuildingList, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.BuildingList, accountGuid, "", new BuildingListEntity());
// }
// return document;
// }
// public async Task<List<BuildingEntity>?> GetBuildingEntityList(List<int> buildingIds)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// List<BuildingEntity> returnLIst = new List<BuildingEntity>();
// if (buildingIds.Count > 0)
// {
// var batchGet = _mainTable.CreateBatchGet();
// batchGet.ConsistentRead = true;
// foreach (var buildingId in buildingIds)
// {
// Document document = DocumentForGet(EEntityType.Building, buildingId.ToString(), buildingId.ToString());
// batchGet.AddKey(document);
// }
// await batchGet.ExecuteAsync();
// foreach (var document in batchGet.Results)
// {
// var entity = new BuildingEntity(document);
// returnLIst.Add(entity);
// }
// }
// return returnLIst;
// }
// public async Task<BuildingEntity?> GetBuildingData(string id)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.Building, id, id);
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// Log.getLogger().error($"Building GetItemAsync Error id : {id}");
// return null;
// }
// var entity = new BuildingEntity(document);
// return entity;
// }
// public async Task UpdateBuilding(BuildingEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// }
// public async Task UpdateBuildings(List<BuildingEntity> entites)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// if (entites.Count > 0)
// {
// var batchWrite = _mainTable.CreateBatchWrite();
// foreach (var entity in entites)
// {
// Document document = entity.DocumentForUpdate();
// batchWrite.AddDocumentToPut(document);
// }
// await batchWrite.ExecuteAsync();
// }
// }
// public async Task DeleteBuildings(List<string> builgingGuids)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// if (builgingGuids.Count > 0)
// {
// var batchWrite = _mainTable.CreateBatchWrite();
// foreach (var builgingGuid in builgingGuids)
// {
// Document document= DocumentForDelete(EEntityType.Building, builgingGuid, builgingGuid);
// batchWrite.AddItemToDelete(document);
// }
// await batchWrite.ExecuteAsync();
// }
// }
// public async Task<Document?> GetRoomLIst(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.RoomList, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.RoomList, accountGuid, "", new RoomListEntity());
// }
// return document;
// }
// public async Task<List<RoomEntity>?> GetRoomEntityList(List<int> roomIds)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// List<RoomEntity> returnLIst = new List<RoomEntity>();
// if (roomIds.Count > 0)
// {
// var batchGet = _mainTable.CreateBatchGet();
// batchGet.ConsistentRead = true;
// foreach (var roomId in roomIds)
// {
// Document document = DocumentForGet(EEntityType.Room, roomId.ToString(), roomId.ToString());
// batchGet.AddKey(document);
// }
// await batchGet.ExecuteAsync();
// foreach (var document in batchGet.Results)
// {
// var entity = new RoomEntity(document);
// returnLIst.Add(entity);
// }
// }
// return returnLIst;
// }
// public async Task<Document?> GetSocialActionCollection(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.SocialActionCollection, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.SocialActionCollection, accountGuid, "", new SocialActionCollectionAttr());
// }
// return document;
// }
// public async Task<Document?> GetSocialActionSlot(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.SocialActionSlot, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.SocialActionSlot, accountGuid, "", new SocialActionSlotAttr());
// }
// return document;
// }
// public async Task<Document?> GetEmotionCollection(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.EmotionCollection, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.EmotionCollection, accountGuid, "", new EmotionCollectionAttr());
// }
// return document;
// }
// public async Task<Document?> GetEmotionSlot(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.EmotionSlot, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.EmotionSlot, accountGuid, "", new EmotionSlotAttr());
// }
// return document;
// }
// public async Task<WhiteListEntity?> AddWhiteList()
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// //var document = MainDB.DocumentForInsert(EEntityType.WhiteList, "", "", new WhiteListAttr());
// Document document = new();
// await _mainTable.PutItemAsync(document);
// WhiteListEntity resultEntity = new WhiteListEntity(document);
// return resultEntity;
// }
// public async Task<WhiteListEntity?> UpdateWhiteList(WhiteListEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// WhiteListEntity resultEntity = new WhiteListEntity(document);
// return resultEntity;
// }
// public async Task<WhiteListEntity?> GetWhiteListData()
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// //var key = DocumentForGet(EEntityType.WhiteList, "", "");
// string key = "";
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// Log.getLogger().error($"WhiteList GetItemAsync Error");
// return null;
// }
// WhiteListEntity resultEntity = new WhiteListEntity(document);
// return resultEntity;
// }
// public async Task<BlackListEntity?> AddBlackList()
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// //var document = MainDB.DocumentForInsert(EEntityType.BlackList, "", "", new BlackListAttr());
// Document document = new();
// await _mainTable.PutItemAsync(document);
// BlackListEntity resultEntity = new BlackListEntity(document);
// return resultEntity;
// }
// public async Task<BlackListEntity?> UpdateBlackList(BlackListEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// BlackListEntity resultEntity = new BlackListEntity(document);
// return resultEntity;
// }
// public async Task<BlackListEntity?> GetBlackListData()
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// //var key = DocumentForGet(EEntityType.BlackList, "", "");
// var key = "";
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// Log.getLogger().error($"BlackList GetItemAsync Error");
// return null;
// }
// BlackListEntity resultEntity = new BlackListEntity(document);
// return resultEntity;
// }
// public async Task<NickNameEntity?> InsertNickName(string nickname, string accountGuid, string accountId)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// NickNameEntityAttr attr = new NickNameEntityAttr();
// attr.AccountGuid = accountGuid;
// attr.AccountId = accountId;
// var document = MainDB.DocumentForInsert(EEntityType.NickName, nickname, "", attr);
// await _mainTable.PutItemAsync(document);
// NickNameEntity resultEntity = new NickNameEntity(document);
// return resultEntity;
// }
// public async Task<bool> DeleteNickName(NickNameEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return false;
// }
// var document = MainDB.DocumentForDelete(EEntityType.NickName, entity.PK_NickName, entity.SK_Empty);
// await _mainTable.DeleteItemAsync(document);
// return true;
// }
// public async Task<NickNameEntity?> GetEntityFromNickName(string nickname)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// var key = DocumentForGet(EEntityType.NickName, nickname, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// // Log.getLogger().error($"GetNickName Error"); null 이 에러라고 단정할수 없다.
// return null;
// }
// var resultEntity = new NickNameEntity(document);
// return resultEntity;
// }
// public async Task<Document?> GetGameOption(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// var key = DocumentForGet(EEntityType.GameOption, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// Log.getLogger().debug($"GetGameOption Error");
// return null;
// }
// return document;
// }
// public async Task<Document?> InsertGameOption(string accountGuid, AccountGameOptionAttr attr)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// var document = MainDB.DocumentForInsert(EEntityType.GameOption, accountGuid, "", attr);
// await _mainTable.PutItemAsync(document);
// return document;
// }
// public async Task<List<MailEntity>?> GetMailList(string accountGuid, EMailType mailType)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// EEntityType type;
// switch (mailType)
// {
// case EMailType.RECEIVED_MAIL: type = EEntityType.ReceivedMail; break;
// case EMailType.SENDED_MAIL: type = EEntityType.SendedMail; break;
// default: return null;
// }
// List<MailEntity> returns = new();
// string pk = MakePK(type, accountGuid);
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, pk);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(type));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true,
// BackwardSearch = true
// };
// Search search = _mainTable.Query(operationConfig);
// while (search.IsDone == false)
// {
// int DocumentCount = 0;
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// if (DocumentCount >= Constant.MAX_READ_MAIL_DB_COUNT)
// {
// break;
// }
// MailEntity entity;
// switch (mailType)
// {
// case EMailType.RECEIVED_MAIL: entity = new ReceivedMailEntity(document); break;
// case EMailType.SENDED_MAIL: entity = new SendedMailEntity(document); break;
// default: continue;
// }
// if (Timestamp.FromDateTime(DateTime.UtcNow) > entity.Attr.expireTime)
// {
// continue;
// }
// ++DocumentCount;
// returns.Add(entity);
// }
// if (DocumentCount >= Constant.MAX_READ_MAIL_DB_COUNT)
// {
// break;
// }
// }
// return returns;
// }
// public async Task<bool> UpdateMail(List<MailEntity> entityList)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return false;
// }
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// foreach (var entity in entityList)
// {
// Document document = entity.DocumentForUpdate();
// batch.AddDocumentToPut(document);
// }
// await batch.ExecuteAsync();
// return true;
// }
// public async Task<bool> DeleteMail(MailEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return false;
// }
// var document = entity.DocumentForDelete();
// await _mainTable.DeleteItemAsync(document);
// return true;
// }
// public async Task<Document?> GetCharMetaData(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// var key = DocumentForGet(EEntityType.CharMetaData, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// Log.getLogger().debug($"CharMetaData Error");
// return null;
// }
// return document;
// }
// public async Task<Document?> InsertCharMetaData(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// CharMetaDataAttr attr = new CharMetaDataAttr();
// attr.MailSendCount = 0;
// attr.MailSendUpdateDay = 0;
// var document = MainDB.DocumentForInsert(EEntityType.CharMetaData, accountGuid, "", attr);
// await _mainTable.PutItemAsync(document);
// return document;
// }
// public async Task<bool?> UpdateCharMetaData(CharMetaDataEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// return true;
// }
// public async Task<Document?> GetInventory(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.Inventory, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.Inventory, accountGuid, "", new InventoryAttr());
// }
// return document;
// }
// public async Task<List<ItemEntity>?> GetItemEntityList(List<string> itemGuids)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// List<ItemEntity> returnLIst = new();
// if (itemGuids.Count > 0)
// {
// var batchGet = _mainTable.CreateBatchGet();
// batchGet.ConsistentRead = true;
// foreach (var itemGuid in itemGuids)
// {
// Document document = DocumentForGet(EEntityType.Item, itemGuid, itemGuid);
// batchGet.AddKey(document);
// }
// await batchGet.ExecuteAsync();
// foreach (var document in batchGet.Results)
// {
// var entity = new ItemEntity(document);
// returnLIst.Add(entity);
// }
// }
// return returnLIst;
// }
// public async Task UpdateMailItems(List<ItemEntity> entites)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return;
// }
// if (entites.Count > 0)
// {
// var batchWrite = _mainTable.CreateBatchWrite();
// foreach (var entity in entites)
// {
// Document document = entity.DocumentForUpdate();
// batchWrite.AddDocumentToPut(document);
// }
// await batchWrite.ExecuteAsync();
// }
// }
// public async Task<Document?> GetToolSlot(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.ToolSlot, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.ToolSlot, accountGuid, "", new ToolSlotAttr());
// }
// return document;
// }
// public async Task<Document?> GetTattooSlot(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.TattooSlot, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.TattooSlot, accountGuid, "", new TattooSlotAttr());
// }
// return document;
// }
// public async Task<bool> UpdateTattooSlot(TattooSlotEntity tattooSlotEntity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return false;
// }
// Document document = tattooSlotEntity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// return true;
// }
// public async Task<CartEntity?> GetCart(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// var key = DocumentForGet(EEntityType.Cart, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// document = DocumentForInsert(EEntityType.Cart, accountGuid, "", new CartEntityAttr());
// }
// return new CartEntity(document);
// }
// public async Task<FriendListEntity?> GetFriendList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// var documentList = await DocumentForGetFromPK(EEntityType.FriendList, accountGuid);
// return new FriendListEntity(documentList, accountGuid);
// }
// public async Task<QuestListEntity?> GetQuestList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// var key = DocumentForGet(EEntityType.QuestList, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// document = DocumentForInsert(EEntityType.QuestList, accountGuid, "", new QuestListEntity());
// }
// return new QuestListEntity(document);
// }
// public async Task<ConcurrentDictionary<int, QuestMailEntity>?> GetQuestMailList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// ConcurrentDictionary<int, QuestMailEntity> mails = new();
// string pk = MakePK(EEntityType.QuestMail, accountGuid);
// QueryFilter filter = new QueryFilter();
// filter.AddCondition("PK", QueryOperator.Equal, pk);
// filter.AddCondition("SK", QueryOperator.BeginsWith, GetSKPrefix(EEntityType.QuestMail));
// QueryOperationConfig operationConfig = new QueryOperationConfig
// {
// Filter = filter,
// ConsistentRead = true
// };
// Search search = _mainTable.Query(operationConfig);
// while (search.IsDone == false)
// {
// List<Document> documents = await search.GetNextSetAsync();
// foreach (Document document in documents)
// {
// QuestMailEntity entity = new QuestMailEntity(document);
// mails.TryAdd(entity.Attr.questId, entity);
// }
// }
// return mails;
// }
// public async Task<bool> UpdateQuestMail(List<QuestMailEntity> entityList)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return false;
// }
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// foreach (var entity in entityList)
// {
// Document document = entity.DocumentForUpdate();
// batch.AddDocumentToPut(document);
// }
// await batch.ExecuteAsync();
// return true;
// }
// public async Task<BlockListEntity?> GetBlockList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// var documentList = await DocumentForGetFromPK(EEntityType.BlockList, accountGuid);
// return new BlockListEntity(documentList, accountGuid);
// }
// public async Task<ClaimNormalEntity?> GetClaimRewardNormalList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// var key = DocumentForGet(EEntityType.ClaimRewardNormal, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// document = DocumentForInsert(EEntityType.ClaimRewardNormal, accountGuid, "", new ClaimAttr());
// await _mainTable.PutItemAsync(document);
// }
// return new ClaimNormalEntity(document);
// }
// public async Task<ClaimMembershipEntity?> GetClaimRewardMembershipList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// var key = DocumentForGet(EEntityType.ClaimRewardMembership, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// document = DocumentForInsert(EEntityType.ClaimRewardMembership, accountGuid, "", new ClaimAttr());
// await _mainTable.PutItemAsync(document);
// }
// return new ClaimMembershipEntity(document);
// }
// public async Task<FriendFolderListEntity?> GetFriendFolderList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// var key = DocumentForGet(EEntityType.FriendFolderList, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// document = DocumentForInsert(EEntityType.FriendFolderList, accountGuid, "", new FriendFolderListAttr());
// await _mainTable.PutItemAsync(document);
// }
// return new FriendFolderListEntity(document);
// }
// public async Task<FriendRequestListEntity?> GetFriendRequestList(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable == null");
// return null;
// }
// var documentList = await DocumentForGetFromPK(EEntityType.FriendRequestList, accountGuid);
// return new FriendRequestListEntity(documentList, accountGuid);
// }
// public async Task<bool> AddFriendRequest(List<Document> documents)
// {
// bool ret = await UpdateDocuments(documents);
// return ret;
// }
// public async Task<bool> AddFriend(List<Document> insertDocument, List<Document> deleteDocument)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return false;
// }
// if (insertDocument.Count == 2)
// {
// Log.getLogger().warn("Add Friend insertDocument count is not 2");
// DocumentBatchWrite batch = _mainTable.CreateBatchWrite();
// foreach (var document in insertDocument)
// {
// batch.AddDocumentToPut(document);
// }
// foreach (var document in deleteDocument)
// {
// batch.AddItemToDelete(document);
// }
// await batch.ExecuteAsync();
// return true;
// }
// return false;
// }
// public async Task<bool> InsertUserReport(string Pk, string Sk, UserReportAttr attr)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return false;
// }
// var key = DocumentForInsert(EEntityType.UserReport, Pk, Sk, attr);
// await _mainTable.PutItemAsync(key);
// return true;
// }
// public async Task<Document?> GetSystemMailList()
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.SystemMail, "", "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// document = DocumentForInsert(EEntityType.SystemMail, "", "", new SystemMailEntityAttr());
// await _mainTable.PutItemAsync(document);
// }
// return document;
// }
// public async Task<bool?> UpdateNoticeChat(NoticeChatEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// return true;
// }
// public async Task<bool?> UpdateSystemMail(SystemMailEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// return true;
// }
// public async Task<Document?> GetNoticeChatList()
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.NoticeChat, "", "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document == null)
// {
// document = DocumentForInsert(EEntityType.NoticeChat, "", "", new NoticeChatEntityAttr());
// await _mainTable.PutItemAsync(document);
// }
// return document;
// }
// public async Task<Document?> GetMinimapMarker(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.MinimapMarker, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.MinimapMarker, accountGuid, "", new MinimapMarkerAttr());
// }
// return document;
// }
// public async Task<Document?> GetDocument(EEntityType entityType, string PK, string SK, Object? attr = null)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(entityType, PK, SK);
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(entityType, PK, SK, attr);
// await _mainTable.PutItemAsync(document);
// }
// return document;
// }
// public async Task<CharProfileEntity?> GetCharProfile(string guid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// var key = DocumentForGet(EEntityType.CharProfile, guid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// Log.getLogger().debug($"CharProfile document is null guid : {guid}");
// return null;
// }
// return new CharProfileEntity(document);
// }
// public async Task<bool?> UpdateCharProfile(CharProfileEntity entity)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return null;
// }
// Document document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// return true;
// }
// private string ToString(List<DBDocumentInfo> documentList)
// {
// StringBuilder sb = new();
// foreach (var doc in documentList)
// {
// sb.AppendLine(doc.ToString());
// }
// return sb.ToString();
// }
// public async Task<Document?> GetInstanceLastRoom(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.InstanceLastRoom, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.InstanceLastRoom, accountGuid, "", new InstanceLastRoomAttr());
// }
// return document;
// }
// public async Task<Document?> getEscapePositionTimeInfo(string accountGuid)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return null;
// }
// var key = DocumentForGet(EEntityType.EscapePosition, accountGuid, "");
// var document = await _mainTable.GetItemAsync(key, operationDefaultConfig);
// if (document is null)
// {
// document = DocumentForInsert(EEntityType.EscapePosition, accountGuid, "", new EscapePositionAttr());
// }
// return document;
// }
// public async Task<bool> SaveEscapePositionTime(EscapePositionEntity entity)
// {
// try
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable is null");
// return false;
// }
// var document = entity.DocumentForUpdate();
// await _mainTable.UpdateItemAsync(document);
// }
// catch (Exception ex)
// {
// Log.getLogger().error($"{ex}, {entity.PK_Guid}, {entity.Attr.m_escape_available_time}");
// return false;
// }
// return true;
// }
// public async Task<bool> Transaction(List<DBDocumentInfo> documentList, int retryCount)
// {
// if (_mainTable == null)
// {
// Log.getLogger().error("_mainTable== null");
// return false;
// }
// var documentTransactWrite = _mainTable.CreateTransactWrite();
// foreach (var documentInfo in documentList)
// {
// if (documentInfo.document == null)
// {
// Log.getLogger().error($"Transaction document is null");
// continue;
// }
// if (documentInfo.document["PK"] == string.Empty || documentInfo.document["SK"] == string.Empty)
// {
// Log.getLogger().error($"Transaction document PK or SK is empty {documentInfo.document["PK"]} {documentInfo.document["SK"]}");
// continue;
// }
// //json = JsonConvert.SerializeObject(documentList);
// switch (documentInfo.executeType)
// {
// case EDBExecuteType.Insert:
// {
// documentTransactWrite.AddDocumentToPut(documentInfo.document, notExistsTranConfig);
// break;
// }
// case EDBExecuteType.Update:
// {
// documentTransactWrite.AddDocumentToUpdate(documentInfo.document);
// break;
// }
// case EDBExecuteType.Delete:
// {
// documentTransactWrite.AddItemToDelete(documentInfo.document);
// break;
// }
// case EDBExecuteType.ExistsDelete:
// {
// documentTransactWrite.AddItemToDelete(documentInfo.document, existsTranConfig);
// break;
// }
// default:
// return false;
// }
// }
// // 기본(1) + retryCount 만큼 처리 한다. - kangms
// for (int i = 0; i <= retryCount; ++i)
// {
// if (i >= 1)
// {
// await Task.Delay(2000);
// }
// try
// {
// await documentTransactWrite.ExecuteAsync();
// }
// catch (TransactionConflictException ex)
// {
// Log.getLogger().error($"TransactionConflictException message : {ex}, document : {ToString(documentList)}");
// continue;
// }
// catch (TransactionCanceledException ex)
// {
// Log.getLogger().error($"TransactionCanceledException message : {ex}, document : {ToString(documentList)}");
// continue;
// }
// catch (Exception ex)
// {
// Log.getLogger().error($"Exception message : {ex}, documentList : {ToString(documentList)}");
// continue;
// }
// return true;
// }
// return false;
// }
// public List<DBDocumentInfo> MakeDBDocumentInfo(List<Document> documents, EDBExecuteType type)
// {
// List<DBDocumentInfo> dBDocumentInfos = new();
// foreach (Document doc in documents)
// {
// dBDocumentInfos.Add(new DBDocumentInfo(doc, type));
// }
// return dBDocumentInfos;
// }
// public List<DBDocumentInfo> AppendDBDocumentInfo(List<DBDocumentInfo> dBDocumentInfos, List<Document> documents, EDBExecuteType type)
// {
// foreach (Document doc in documents)
// {
// dBDocumentInfos.Add(new DBDocumentInfo(doc, type));
// }
// return dBDocumentInfos;
// }
// }
//}