using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ServerCore; using ServerBase; using SESSION_ID = System.Int32; 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; using NICKNAME = System.String; namespace ServerCommon; public class UserByAccountIdResult { public string UserGuid { get; set; } = null!; public string Nickname { get; set; } = null!; } public class UserInfoByUserNickname { public USER_GUID UserGuid { get; set; } = string.Empty; public NICKNAME UserNickname { get; set; } = string.Empty; } public class UgcNpcInfoByUgcNpcNickname { public UgcNpcAttrib UgcNpcAttrib { get; set; } = null!; } public static class EntitySearchHelper { public static async Task<(Result, UserByAccountIdResult?)> findUserByAccountId(DynamoDbClient dynamoDbClient, ACCOUNT_ID accountId, string tryUserEmailId) { var result = new Result(); var err_msg = string.Empty; if(true == accountId.isNullOrWhiteSpace()) { err_msg = $"Invalid AccountId !!! - tryUserEmailId:{tryUserEmailId}"; result.setFail(ServerErrorCode.AccountIdInvalid, err_msg); Log.getLogger(result.toBasicString()); return (result, null); } (result, var found_account_doc) = await AccountBaseDoc.findUserGuidFromAccountId(dynamoDbClient, accountId); if(result.isFail()) { return (result, null); } NullReferenceCheckHelper.throwIfNull(found_account_doc, () => $"found_account_doc is null !!! - AccountId:{accountId}, tryUserEmailId:{tryUserEmailId}"); var doc_account_base_attrib = found_account_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(doc_account_base_attrib, () => $"doc_account_base_attrib is null !!! - AccountId:{accountId}, tryUserEmailId:{tryUserEmailId}"); var user_guid = doc_account_base_attrib.UserGuid; if (true == user_guid.isNullOrWhiteSpace()) { err_msg = $"Account without UserGuid !!! - AccountId:{accountId}, tryUserEmailId:{tryUserEmailId}"; result.setFail(ServerErrorCode.AccountWithoutUserGuid, err_msg); Log.getLogger(result.toBasicString()); return (result, null); } string found_nickname = string.Empty; (result, var found_nickname_attrib) = await NicknameDoc.findNicknameFromGuid(dynamoDbClient, user_guid); if(result.isFail()) { return (result, null); } NullReferenceCheckHelper.throwIfNull(found_nickname_attrib, () => $"found_nickname_attrib is null !!!, userGuid:{user_guid} - AccountId:{accountId}, tryUserEmailId:{tryUserEmailId}"); found_nickname = found_nickname_attrib.Nickname; return (result, new UserByAccountIdResult { UserGuid = user_guid, Nickname = found_nickname, }); } public static async Task<(Result, List?)> findUgcNpcAttribAllByUserGuid(DynamoDbClient dynamoDbClient, USER_GUID userGuid, string tryUserEmailId) { var result = new Result(); var err_msg = string.Empty; if (true == userGuid.isNullOrWhiteSpace()) { err_msg = $"Invalid UserGuid !!! - tryUserEmailId:{tryUserEmailId}"; result.setFail(ServerErrorCode.UserGuidInvalid, err_msg); Log.getLogger(result.toBasicString()); return (result, null); } (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(userGuid); if (result.isFail()) { return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!! - UserGuid:{userGuid}, tryUserEmailId:{tryUserEmailId}"); var query_config = dynamoDbClient.makeQueryConfigForReadByPKOnly(make_primary_key.PK); (result, var found_ugc_npc_docs) = await dynamoDbClient.simpleQueryDocTypesWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } var found_ugc_npc_attribs = new List(); foreach(var doc in found_ugc_npc_docs) { var ugc_npc_attrib = doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(ugc_npc_attrib, () => $"ugc_npc_attrib is null !!! - UserGuid:{userGuid}, tryUserEmailId:{tryUserEmailId}"); found_ugc_npc_attribs.Add(ugc_npc_attrib); } return (result, found_ugc_npc_attribs); } public static async Task<(Result, UserInfoByUserNickname?)> findUserInfoByUserNickname(DynamoDbClient dynamoDbClient, NICKNAME userNickname) { var result = new Result(); var err_msg = string.Empty; if (true == userNickname.isNullOrWhiteSpace()) { err_msg = $"Empty UserNickname !!!"; result.setFail(ServerErrorCode.UserNicknameEmpty, err_msg); Log.getLogger(result.toBasicString()); return (result, null); } (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(DynamoDbClient.PK_GLOBAL, userNickname); if (result.isFail()) { return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!! - userNickname:{userNickname}"); var query_config = dynamoDbClient.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK); (result, var found_user_nickname_doc) = await dynamoDbClient.simpleQueryDocTypeWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(found_user_nickname_doc, () => $"found_user_nickname_doc is null !!! - userNickname:{userNickname}"); var user_nickname_registry_attrib = found_user_nickname_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(user_nickname_registry_attrib, () => $"user_nickname_registry_attrib is null !!! - userNickname:{userNickname}"); var searched_result = new UserInfoByUserNickname(); searched_result.UserNickname = user_nickname_registry_attrib.Nickname; searched_result.UserGuid = user_nickname_registry_attrib.UserGuid; return (result, searched_result); } public static async Task<(Result, UgcNpcInfoByUgcNpcNickname?)> findUgcNpcInfoByUgcNpcNickname( DynamoDbClient dynamoDbClient , OwnerEntityType ownerEntityType, OWNER_GUID ownerGuid , NICKNAME ugcNpcNickname ) { var result = new Result(); var err_msg = string.Empty; if (true == ugcNpcNickname.isNullOrWhiteSpace()) { err_msg = $"Empty UgcNpcNickname !!!"; result.setFail(ServerErrorCode.UgcNpcNicknameEmpty, err_msg); Log.getLogger(result.toBasicString()); return (result, null); } UgcNpcNicknameRegistryDoc? found_ugc_nickname_registry_doc = null; { (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(ownerGuid, ugcNpcNickname); if (result.isFail()) { return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!! - userGuid:{ownerGuid}, userNickname:{ugcNpcNickname}"); var query_config = dynamoDbClient.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK); (result, found_ugc_nickname_registry_doc) = await dynamoDbClient.simpleQueryDocTypeWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(found_ugc_nickname_registry_doc, () => $"found_ugc_nickname_registry_doc is null !!! - userGuid:{ownerGuid}, userNickname:{ugcNpcNickname}"); } var ugc_npc_nickname_registry_attrib = found_ugc_nickname_registry_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(ugc_npc_nickname_registry_attrib, () => $"ugc_npc_nickname_registry_attrib is null !!! - userGuid:{ownerGuid}, userNickname:{ugcNpcNickname}"); UgcNpcDoc? found_ugc_npc_doc = null; { (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(ownerGuid, ugc_npc_nickname_registry_attrib.UgcNpcMetaGuid); if (result.isFail()) { return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!! - userGuid:{ownerGuid}, userNickname:{ugcNpcNickname}"); var query_config = dynamoDbClient.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK); (result, found_ugc_npc_doc) = await dynamoDbClient.simpleQueryDocTypeWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(found_ugc_npc_doc, () => $"found_ugc_npc_doc is null !!! - userGuid:{ownerGuid}, userNickname:{ugcNpcNickname}"); } var ugc_npc_attrib = found_ugc_npc_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(ugc_npc_attrib, () => $"ugc_npc_attrib is null !!! - userGuid:{ownerGuid}, userNickname:{ugcNpcNickname}"); var searched_result = new UgcNpcInfoByUgcNpcNickname(); if(null != ugc_npc_attrib) { searched_result.UgcNpcAttrib = ugc_npc_attrib; } return (result, searched_result); } public static async Task<(Result, MoneyAttrib?)> findUserMoneyByUserGuid(DynamoDbClient dynamoDbClient, USER_GUID userGuid) { var result = new Result(); var err_msg = string.Empty; if (true == userGuid.isNullOrWhiteSpace()) { err_msg = $"Invalid UserGuid !!!"; result.setFail(ServerErrorCode.UserGuidInvalid, err_msg); Log.getLogger(result.toBasicString()); return (result, null); } (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(userGuid); if (result.isFail()) { return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!! - userGuid:{userGuid}"); var query_config = dynamoDbClient.makeQueryConfigForReadByPKOnly(make_primary_key.PK); (result, var found_money_doc) = await dynamoDbClient.simpleQueryDocTypeWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(found_money_doc, () => $"found_money_doc is null !!! - userGuid:{userGuid}"); var money_attrib = found_money_doc.getAttrib(); if(money_attrib == null) { err_msg = $"money_attrib is null !!! - UserGuid:{userGuid} !!! {result.toBasicString()}, {make_primary_key.toBasicString()}"; result.setFail(ServerErrorCode.UserMoneyDocEmpty, err_msg); Log.getLogger().error(err_msg); return (result, null); } return (result, money_attrib); } }