Files
caliverse_server/GameServer/Entity/CaliumStorage/DbQuery/DBQContentCaliumCreate.cs
2025-05-01 07:20:41 +09:00

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);
}
}