88 lines
3.8 KiB
C#
88 lines
3.8 KiB
C#
using Amazon.DynamoDBv2.DocumentModel;
|
|
using Amazon.DynamoDBv2.Model;
|
|
|
|
|
|
using ServerCore;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
|
|
|
|
namespace GameServer;
|
|
|
|
public class DBQContentCaliumCreate : QueryExecutorBase
|
|
{
|
|
private readonly string m_contentId;
|
|
private readonly double m_calium;
|
|
|
|
public DBQContentCaliumCreate(string contentId, double calium) : base(nameof(DBQContentCaliumCreate))
|
|
{
|
|
m_contentId = contentId;
|
|
m_calium = calium;
|
|
}
|
|
|
|
//=====================================================================================
|
|
// DB 쿼리 직전에 준비해야 할 로직들을 작성한다.
|
|
//=====================================================================================
|
|
public override async Task<Result> onPrepareQuery() => await Task.FromResult(new Result());
|
|
|
|
//=====================================================================================
|
|
// onPrepareQuery()를 성공할 경우 호출된다.
|
|
//=====================================================================================
|
|
public override async Task<Result> onQuery()
|
|
{
|
|
var owner = getOwner();
|
|
|
|
var query_batch = getQueryBatch() as QueryBatch<QueryRunnerWithItemRequest>;
|
|
NullReferenceCheckHelper.throwIfNull(query_batch, () => $"query_batch is null !!! - {owner.toBasicString()}");
|
|
|
|
var query_runner_with_item_request = query_batch.getQueryRunner();
|
|
NullReferenceCheckHelper.throwIfNull(query_runner_with_item_request, () => $"query_runner_with_item_request is null !!! - {owner.toBasicString()}");
|
|
|
|
var db_connector = query_batch.getDynamoDbConnector();
|
|
var create = await makeCreateItemRequestCaliumContentStorage(db_connector);
|
|
if (create.result.isFail()) return create.result;
|
|
NullReferenceCheckHelper.throwIfNull(create.putItemRequest, () => $"create_request is null !!! - {owner.toBasicString()}");
|
|
|
|
var query_context = create.putItemRequest.createItemRequestQueryContext(QueryType.Insert);
|
|
var result = await query_runner_with_item_request.tryRegisterQueryContext(query_context);
|
|
|
|
return result;
|
|
}
|
|
|
|
//=====================================================================================
|
|
// DB 쿼리를 성공하고, doFnCommit()가 QueryResultType.NotCalledQueryFunc를 반환할 경우 호출된다.
|
|
//=====================================================================================
|
|
public override async Task onQueryResponseCommit()
|
|
{
|
|
await Task.CompletedTask;
|
|
return;
|
|
}
|
|
|
|
//=====================================================================================
|
|
// DB 쿼리를 실패하고, doFnRollback()가 QueryResultType.NotCalledQueryFunc를 반환할 경우 호출된다.
|
|
//=====================================================================================
|
|
public override async Task onQueryResponseRollback(Result errorResult)
|
|
{
|
|
await Task.CompletedTask;
|
|
return;
|
|
}
|
|
|
|
private async Task<(Result result, PutItemRequest? putItemRequest)> makeCreateItemRequestCaliumContentStorage(DynamoDbClient dbClient)
|
|
{
|
|
var target_doc = new CaliumContentDoc(m_contentId);
|
|
var attrib = target_doc.getAttrib<CaliumContentAttrib>();
|
|
NullReferenceCheckHelper.throwIfNull(attrib, () => $"calium_content_attrib is null !!! - {getOwner().toBasicString()}");
|
|
|
|
attrib.ContentId = m_contentId;
|
|
attrib.TotalCalium = m_calium;
|
|
|
|
var (result, document) = await target_doc.onCopyToDocument();
|
|
if (result.isFail()) return (result, null);
|
|
|
|
var put_item_request = new PutItemRequest();
|
|
put_item_request.TableName = dbClient.getTableFullName(ServerBase.DynamoDbDefine.TableNames.Main);
|
|
put_item_request.Item = document.ToAttributeMap();
|
|
|
|
return (result, put_item_request);
|
|
}
|
|
} |