using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Amazon.DynamoDBv2.Model; using Amazon.DynamoDBv2; using ServerCore; using ServerBase; using ServerCommon; using static ServerCommon.MetaHelper; using META_ID = System.UInt32; using USER_GUID = System.String; using LAND_AUCTION_NUMBER = System.Int32; namespace GameServer { public static class LandAuctionDbHelper { public static async Task<(Result, bool)> isExistHighestBidderFromDb(this LandAuction landAuction, USER_GUID toCheckHighestBidUserGuid, double toCheckHighestBidPrice) { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var registry_attribute = landAuction.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(registry_attribute, () => $"registry_attribute is null !!! - {landAuction.toBasicString()}"); var highest_bid_user_doc = new LandAuctionHighestBidUserDoc(registry_attribute.LandMetaId, registry_attribute.AuctionNumber); var get_request = new TransactGetItem { Get = new Get { TableName = db_connector.getTableFullName(highest_bid_user_doc.TableName), Key = highest_bid_user_doc.getPrimaryKey().toKeyWithAttributeValue() } }; (var result, var found_highest_bid_user_item_doc) = await db_connector.simpleQueryTransactReadDocWithItemRequest(get_request, isFailOnEmptyData: false); if (result.isFail()) { var err_msg = $"Failed to simpleQueryTransactReadDocWithItemRequest() !!! : {get_request.Get.toBasicString()} - {landAuction.toBasicString()}"; Log.getLogger().error(err_msg); return (result, false); } if( null == found_highest_bid_user_item_doc) { var err_msg = $"Not found LandAuctionHighestBidUserDoc at simpleQueryTransactReadDocWithItemRequest() !!! : {get_request.Get.toBasicString()} - {landAuction.toBasicString()}"; Log.getLogger().error(err_msg); return (result, false); } var heighest_bid_user_attrib = found_highest_bid_user_item_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(heighest_bid_user_attrib, () => $"heighest_bid_user_attrib is null !!! - {landAuction.toBasicString()}"); if ( heighest_bid_user_attrib.HighestBidUserGuid == toCheckHighestBidUserGuid && heighest_bid_user_attrib.HighestBidPrice == toCheckHighestBidPrice ) { return (result, true); } return (result, false); } public static async Task<(Result, LandAuctionHighestBidUserDoc?)> tryGetLandAuctionHighestBidUserDoc(this LandAuction landAuction, META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber) { var server_logic = GameServerApp.getServerLogic(); var db_client = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var found_highest_bid_user_doc) = await readLandAuctionHighestBidUserDocFromDb(landMetaId, auctionNumber); if (result.isFail()) { err_msg = $"Failed to readLandAuctionHighestBidUserDocFromDb() !!! : {result.toBasicString()} - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"; Log.getLogger().error(err_msg); return (result, null); } return (result, found_highest_bid_user_doc); } public static async Task tryLoadLandAuctionActivityDoc(this LandAuction landAuction, META_ID landMetaId) { var server_logic = GameServerApp.getServerLogic(); var db_client = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; var activity_attribute = landAuction.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(activity_attribute, () => $"activity_attribute is null !!! - landMetaId:{landMetaId}"); (result, var found_activity_doc) = await readLandAuctionActivityDocFromDb(landMetaId); if (result.isFail()) { err_msg = $"Failed to readLandAuctionActivityDocFromDb() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return result; } NullReferenceCheckHelper.throwIfNull(found_activity_doc, () => $"found_activity_doc is null !!! - landMetaId:{landMetaId}"); result = await landAuction.copyDocToEntityAttributeForLandAuction(activity_attribute, found_activity_doc, false); if(result.isFail()) { err_msg = $"Failed to copyDocToEntityAttributeForLandAuction() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return result; } return result; } public static async Task tryLoadLandAuctionRegistryDoc(this LandAuction landAuction, META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber) { var server_logic = GameServerApp.getServerLogic(); var db_client = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; var registry_attribute = landAuction.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(registry_attribute, () => $"registry_attribute is null !!! - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"); var auction_aution = landAuction.getEntityAction(); NullReferenceCheckHelper.throwIfNull(auction_aution, () => $"auction_aution is null !!! - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"); (result, var found_registry_doc) = await readLandAuctionRegistryDocFromDb(landMetaId, auctionNumber); if (result.isFail()) { err_msg = $"Failed to parse readLandAuctionRegistryDocFromDb() !!! : {result.toBasicString()} - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"; Log.getLogger().error(err_msg); return result; } NullReferenceCheckHelper.throwIfNull(found_registry_doc, () => $"found_registry_doc is null !!!"); result = await landAuction.copyDocToEntityAttributeForLandAuction(registry_attribute, found_registry_doc, false); if (result.isFail()) { err_msg = $"Failed to copyDocToEntityAttributeForLandAuction() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return result; } return result; } public static async Task<(Result, bool)> tryLoadLandAuctionHighestBidUserDoc(this LandAuction landAuction, META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber) { var server_logic = GameServerApp.getServerLogic(); var db_client = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; var highest_bid_user_attribute = landAuction.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(highest_bid_user_attribute, () => $"highest_bid_user_attribute is null !!! - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"); (result, var found_highest_bid_user_doc) = await readLandAuctionHighestBidUserDocFromDb(landMetaId, auctionNumber); if (result.isFail()) { err_msg = $"Failed to parse readLandAuctionHighestBidUserDocFromDb() !!! : {result.toBasicString()} - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"; Log.getLogger().error(err_msg); return (result, false); } if (null != found_highest_bid_user_doc) { result = await landAuction.copyDocToEntityAttributeForLandAuction(highest_bid_user_attribute, found_highest_bid_user_doc, false); if (result.isFail()) { err_msg = $"Failed to copyDocToEntityAttributeForLandAuction() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return (result, false); } } return (result, false); } public static async Task tryFillupLandAuctionActivityFromDb(this LandAuction landAuction, META_ID landMetaId) { var server_logic = GameServerApp.getServerLogic(); var db_client = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; var activity_attribute = landAuction.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(activity_attribute, () => $"activity_attribute is null !!! - landMetaId:{landMetaId}"); (result, var found_activity_doc) = await readLandAuctionActivityDocFromDb(landMetaId); if (result.isFail()) { err_msg = $"Failed to readLandAuctionActivityDocFromDb() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return result; } NullReferenceCheckHelper.throwIfNull(found_activity_doc, () => $"found_activity_doc is null !!!"); result = await landAuction.copyDocToEntityAttributeForLandAuction(activity_attribute, found_activity_doc, true); if (result.isFail()) { err_msg = $"Failed to copyDocToEntityAttributeForLandAuction() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return result; } return result; } public static async Task tryFillupLandAuctionRegistryFromDb(this LandAuction landAuction, META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber) { var server_logic = GameServerApp.getServerLogic(); var db_client = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; var registry_attribute = landAuction.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(registry_attribute, () => $"land_auction_registry_attribute is null !!! - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"); (result, var found_registry_doc) = await readLandAuctionRegistryDocFromDb(landMetaId, auctionNumber); if (result.isFail()) { err_msg = $"Failed to parse readLandAuctionRegistryDocFromDb() !!! : {result.toBasicString()} - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"; Log.getLogger().error(err_msg); return result; } NullReferenceCheckHelper.throwIfNull(found_registry_doc, () => $"found_registry_doc is null !!!"); result = await landAuction.copyDocToEntityAttributeForLandAuction(registry_attribute, found_registry_doc, true); if(result.isFail()) { return result; } return result; } public static async Task<(Result, List?)> readLandAuctionActivityDocsFromDb() { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(DynamoDbClient.PK_GLOBAL); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!"); var query_config = db_connector.makeQueryConfigForReadByPKOnly(make_primary_key.PK); (result, var found_land_auction_activity_docs) = await db_connector.simpleQueryDocTypesWithQueryOperationConfig(query_config, false); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypesWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(found_land_auction_activity_docs, () => $"found_land_auction_activity_docs is null !!!"); return (result, found_land_auction_activity_docs); } public static async Task<(Result, LandAuctionActivityDoc?)> readLandAuctionActivityDocFromDb(META_ID landMetaId, bool isFailOnEmptyDoc = true) { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(DynamoDbClient.PK_GLOBAL, landMetaId.ToString()); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!"); var query_config = db_connector.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK); (result, var found_land_auction_activity_doc) = await db_connector.simpleQueryDocTypeWithQueryOperationConfig(query_config, isFailOnEmptyDoc); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return (result, null); } return (result, found_land_auction_activity_doc); } public static async Task<(Result, LandAuctionRegistryDoc?)> readLandAuctionRegistryDocFromDb(META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber, bool isFailOnEmptyDoc = true) { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey( DynamoDbClient.PK_GLOBAL , LandAuctionRegistryDoc.makeCombinationKeyForSK(landMetaId, auctionNumber)); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!"); var query_config = db_connector.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK); (result, var found_land_auction_registry_doc) = await db_connector.simpleQueryDocTypeWithQueryOperationConfig(query_config, isFailOnEmptyDoc); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()} - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"; Log.getLogger().error(err_msg); return (result, null); } return (result, found_land_auction_registry_doc); } public static async Task<(Result, LandAuctionHighestBidUserDoc?)> readLandAuctionHighestBidUserDocFromDb(META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber) { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey( DynamoDbClient.PK_GLOBAL , LandAuctionHighestBidUserDoc.makeCombinationKeyForSK(landMetaId, auctionNumber) ); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {result.toBasicString()} - landMetaId:{landMetaId}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!"); var query_config = db_connector.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK); (result, var found_land_auction_highest_bid_user_doc) = await db_connector.simpleQueryDocTypeWithQueryOperationConfig(query_config, false); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypeWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()} - landMetaId:{landMetaId}, auctionNumber:{auctionNumber}"; Log.getLogger().error(err_msg); return (result, null); } return (result, found_land_auction_highest_bid_user_doc); } public static async Task<(Result, LandAuctionRefundBidPriceDoc?)> readLandAuctionRefundBidPriceDocFromDb( Player player , META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber ) { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var found_refund_bid_price_doc) = await readLandAuctionRefundBidPriceDocFromDb( player.getUserGuid() , landMetaId, auctionNumber ); if (result.isFail()) { err_msg = $"Failed to readLandAuctionRefundBidPriceDocFromDb() !!! : {result.toBasicString()}, landMetaId:{landMetaId}, auctionNumber:{auctionNumber} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } return (result, found_refund_bid_price_doc); } public static async Task<(Result, LandAuctionRefundBidPriceDoc?)> readLandAuctionRefundBidPriceDocFromDb( USER_GUID userGuid , META_ID landMetaId, LAND_AUCTION_NUMBER auctionNumber ) { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(userGuid, LandAuctionRefundBidPriceDoc.makeCombinationKeyForSK(landMetaId, auctionNumber)); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {result.toBasicString()} - userGuid:{userGuid}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!"); var query_config = db_connector.makeQueryConfigForReadByPKSK(make_primary_key.PK, make_primary_key.SK); (result, var found_refund_bid_price_doc) = await db_connector.simpleQueryDocTypeWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypesWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()} - userGuid:{userGuid}"; Log.getLogger().error(err_msg); return (result, null); } return (result, found_refund_bid_price_doc); } public static async Task<(Result, List?)> readLandAuctionRefundBidPriceDocsFromDb(Player player) { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(player.getUserGuid()); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {result.toBasicString()} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!"); var query_config = db_connector.makeQueryConfigForReadByPKOnly(make_primary_key.PK); (result, var found_land_auction_bid_price_docs) = await db_connector.simpleQueryDocTypesWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypesWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()} - {player.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(found_land_auction_bid_price_docs, () => $"found_land_auction_bid_price_docs is null !!! - {player.toBasicString()}"); return (result, found_land_auction_bid_price_docs); } public static async Task<(Result, List?)> readLandAuctionRecordDocsFromDb() { var server_logic = GameServerApp.getServerLogic(); var db_connector = server_logic.getDynamoDbClient(); var result = new Result(); var err_msg = string.Empty; (result, var make_primary_key) = await DynamoDBDocBaseHelper.makePrimaryKey(DynamoDbClient.PK_GLOBAL); if (result.isFail()) { err_msg = $"Failed to makePrimaryKey() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(make_primary_key, () => $"make_primary_key is null !!!"); var query_config = db_connector.makeQueryConfigForReadByPKOnly(make_primary_key.PK); (result, var found_land_auction_record_docs) = await db_connector.simpleQueryDocTypesWithQueryOperationConfig(query_config); if (result.isFail()) { err_msg = $"Failed to simpleQueryDocTypesWithQueryOperationConfig() !!! : {result.toBasicString()}, {make_primary_key.toBasicString()}"; Log.getLogger().error(err_msg); return (result, null); } NullReferenceCheckHelper.throwIfNull(found_land_auction_record_docs, () => $"found_docs is null !!!"); return (result, found_land_auction_record_docs); } } }