using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.DocumentModel; using Amazon.DynamoDBv2.Model; namespace ServerBase; //============================================================================================== // DB 쿼리 종류별 재정의 클래스들 이다. //============================================================================================== public partial class DBRequestGetBatch : QueryDbRequesterWithItemRequestBase { public override async Task doDbRequestAsync() { var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithItemRequest; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var db_client = query_batch.getDynamoDbConnector().getDbClient(); ArgumentNullException.ThrowIfNull(db_client, $"db_client is null !!!"); //===================================================================================== // Batch 기반 DB Get Request 처리 : Non-Transaction //===================================================================================== var response = await db_client.BatchGetItemAsync(getDbRequestGenericType()); ArgumentNullException.ThrowIfNull(response, $"response is null !!!"); await response.logDetail(); query_runner.addDbResponse(response); return result; } } public partial class DBRequestWriteBatch : QueryDbRequesterWithItemRequestBase { public override async Task doDbRequestAsync() { var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithItemRequest; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var db_client = query_batch.getDynamoDbConnector().getDbClient(); ArgumentNullException.ThrowIfNull(db_client, $"db_client is null !!!"); //===================================================================================== // Batch 기반 DB Write Request 처리 : Non-Transaction //===================================================================================== var response = await db_client.BatchWriteItemAsync(getDbRequestGenericType()); ArgumentNullException.ThrowIfNull(response, $"response is null !!!"); await response.logDetail(); query_runner.addDbResponse(response); return result; } } public partial class DBRequestUpdate : QueryDbRequesterWithItemRequestBase { public override async Task doDbRequestAsync() { var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithItemRequest; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var db_client = query_batch.getDynamoDbConnector().getDbClient(); ArgumentNullException.ThrowIfNull(db_client, $"db_client is null !!!"); //===================================================================================== // Update 기반 DB Update Request 처리 : Non-Transaction //===================================================================================== var response = await db_client.UpdateItemAsync(getDbRequestGenericType()); ArgumentNullException.ThrowIfNull(response, $"response is null !!!"); await response.logDetail(); query_runner.addDbResponse(response); return result; } } public partial class DBRequestGetWithTransact : QueryDbRequesterWithItemRequestBase { public override async Task doDbRequestAsync() { var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithItemRequest; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var db_client = query_batch.getDynamoDbConnector().getDbClient(); ArgumentNullException.ThrowIfNull(db_client, $"db_client is null !!!"); //===================================================================================== // Transaction 기반 DB Get Request 처리 //===================================================================================== var response = await db_client.TransactGetItemsAsync(getDbRequestGenericType()); ArgumentNullException.ThrowIfNull(response, $"response is null !!!"); await response.logDetail(getDbRequestGenericType()); query_runner.addDbResponse(response); return result; } } public partial class DBRequestWriteWithTransact : QueryDbRequesterWithItemRequestBase { public override async Task doDbRequestAsync() { var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithItemRequest; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var db_client = query_batch.getDynamoDbConnector().getDbClient(); ArgumentNullException.ThrowIfNull(db_client, $"db_client is null !!!"); //===================================================================================== // Transaction 기반 DB Write Request 처리 //===================================================================================== var response = await db_client.TransactWriteItemsAsync(getDbRequestGenericType()); ArgumentNullException.ThrowIfNull(response, $"response is null !!!"); await response.logDetail(); query_runner.addDbResponse(response); return result; } } //============================================================================================== // DB 쿼리 Document 전용 재정의 클래스들 이다. //============================================================================================== public partial class DBRequestGetWithDocumentBatchGet : QueryDbRequesterWithDocumentBatchGetBase { public override async Task doDbRequestAsync() { await Task.CompletedTask; var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithDocument; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var doc_batch_get = query_runner.getOrNewMultiTableDocumentBatchGet(); ArgumentNullException.ThrowIfNull(doc_batch_get, $"doc_batch_get is null !!!"); doc_batch_get.AddBatch(getDbRequestGenericType()); return result; } } public partial class DBRequestWriteWithDocumentBatchWrite : QueryDbRequesterWithDocumentBatchWriteBase { public override async Task doDbRequestAsync() { await Task.CompletedTask; var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithDocument; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var doc_batch_write = query_runner.getOrNewMultiTableDocumentBatchWrite(); ArgumentNullException.ThrowIfNull(doc_batch_write, $"doc_batch_write is null !!!"); doc_batch_write.AddBatch(getDbRequestGenericType()); return result; } } public partial class DBRequestGetWithDocumentTransactGet : QueryDbRequesterWithDocumentTransactGetBase { public override async Task doDbRequestAsync() { await Task.CompletedTask; var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithDocument; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var doc_transact_get = query_runner.getOrNewMultiTableDocumentTransactGet(); ArgumentNullException.ThrowIfNull(doc_transact_get, $"doc_transact_get is null !!!"); doc_transact_get.AddTransactionPart(getDbRequestGenericType()); return result; } } public partial class DBRequestWriteWithDocumentTransactWrite : QueryDbRequesterWithDocumentTransactWriteBase { public override async Task doDbRequestAsync() { await Task.CompletedTask; var result = new Result(); var query_batch = getQueryBatch(); ArgumentNullException.ThrowIfNull(query_batch, $"query_batch is null !!!"); var query_runner = query_batch.getQueryRunner() as QueryRunnerWithDocument; ArgumentNullException.ThrowIfNull(query_runner, $"query_runner is null !!!"); var doc_transact_write = query_runner.getOrNewMultiTableDocumentTransactWrite(); ArgumentNullException.ThrowIfNull(doc_transact_write, $"doc_transact_write is null !!!"); doc_transact_write.AddTransactionPart(getDbRequestGenericType()); return result; } }