초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

View File

@@ -0,0 +1,158 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.DynamoDBv2.Model;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DocumentModel;
using ServerCore; using ServerBase;
namespace ServerBase;
//==============================================================================================
// QueryBatch 클래스의 주요 절차들을 처리해 주는 클래스 이다.
//==============================================================================================
public static class QueryHelper
{
//==============================================================================================
// 1. DB 쿼리를 요청한다.
// 2. 배치쿼리를 요청한다.
//==============================================================================================
public static async Task<Result> sendQueryAndBusinessLog(QueryBatchBase batch)
{
var result = new Result();
var err_msg = string.Empty;
if (batch == null)
{
err_msg = $"Failed to DBQuery !!!, QueryBatchBase is null";
result.setFail(ServerErrorCode.FunctionInvalidParam, err_msg);
return result;
}
Stopwatch? stopwatch = null;
var event_tid = string.Empty;
var server_logic = ServerLogicApp.getServerLogicApp();
ArgumentNullException.ThrowIfNull(server_logic);
var server_config = server_logic.getServerConfig();
ArgumentNullException.ThrowIfNull(server_config);
if (true == server_config.PerformanceCheckEnable)
{
event_tid = string.IsNullOrEmpty(batch.getTransId()) ? System.Guid.NewGuid().ToString("N") : batch.getTransId();
stopwatch = Stopwatch.StartNew();
}
result = await sendQuery(batch);
if(result.isSuccess())
{
batch.sendBusinessLog();
}
if (null != stopwatch)
{
var elapsed_msec = stopwatch.ElapsedMilliseconds;
stopwatch.Stop();
if (elapsed_msec > Constant.STOPWATCH_LOG_LIMIT_MSEC)
{
Log.getLogger().debug($"QueryBatch - Total Stopwatch Stop : ETID:{event_tid}, ElapsedMSec:{elapsed_msec}, LogAction:{batch.getLogAction().getLogActionType()}");
}
}
return result;
}
//==============================================================================================
// 1. DB 쿼리를 요청한다.
// 2. 배치쿼리를 요청한다.
//==============================================================================================
private static async Task<Result> sendQuery(QueryBatchBase batch)
{
var result = new Result();
var err_msg = string.Empty;
if (batch == null)
{
err_msg = $"Failed to sendQuery !!!, QueryBatchBase is null";
result.setFail(ServerErrorCode.FunctionInvalidParam, err_msg);
return result;
}
if (false == batch.hasQuery())
{
err_msg = $"Not has DBQuery !!!";
result.setFail(ServerErrorCode.DynamoDbQueryNoRequested, err_msg);
return result;
}
result = await batch.prepareQueryWithStopwatch();
if (result.isFail())
{
return result;
}
result = await batch.doQueryWithStopwatch();
if (result.isFail())
{
return result;
}
return result;
}
}
//==============================================================================================
// 쿼리 관련 확장 함수들을 정의하는 클래스 이다.
//==============================================================================================
public static class QueryExtension
{
public static bool isSuccess(this CancellationReason reason)
{
return true == reason.Code.Equals(DynamoDbQueryExceptionNotifier.Success, StringComparison.OrdinalIgnoreCase);
}
public static string toExceptionString(this TransactionCanceledException e)
{
return $"[TransactionCanceledException] - exception:{e}";
}
public static string toExceptionString(this AmazonDynamoDBException e)
{
var err_msg = $"[AmazonDynamoDBException] - occurred:{e.Message}, ";
err_msg += (e.InnerException != null) ? $" Inner Exception:{e.InnerException.Message}," : "";
err_msg += $" exception:{e}";
return err_msg;
}
public static string toExceptionString(this AmazonServiceException e)
{
return $"[AmazonServiceException] - exception:{e}";
}
public static bool isEqualQuery<TDbRequestWithDocument>(this IQueryDbRequester dbRequester)
where TDbRequestWithDocument : IQueryDbRequester
{
if(dbRequester.GetType() == typeof(TDbRequestWithDocument))
{
return true;
}
return false;
}
}