Files
caliverse_server/BrokerApiTest/DocQuery/UserTestEntityAttribute.cs
2025-05-01 07:20:41 +09:00

119 lines
4.5 KiB
C#

using ServerCommon;
using ServerCore; using ServerBase;
using ThirdParty.Json.LitJson;
// EntityAttributeBase를 상속 받은 개체는 메모리에 사용될 내용임
// 스토리지에 저장은 UsrTestDoc:DynamoDbDocBase에서 처리함
public class UserTestEntityAttribute : EntityAttributeBase
{
[JsonProperty] public string UserId { get; set; } = string.Empty;
[JsonProperty] public string Name { get; set; } = string.Empty;
public UserTestEntityAttribute(EntityBase owner) : base(owner)
{
}
public override UserTestDoc onCreateDocBase()
{
return new UserTestDoc(UserId, Name);
}
public override void onClear()
{
UserId = string.Empty;
Name = string.Empty;
getAttributeState().reset();
}
public override async Task<(Result, DynamoDbDocBase?)> toDocBase(bool isForQuery = true)
{
var result = new Result();
//=====================================================================================
// try_pending_doc은 없으면 새로 생성하고 초기화 한다.
//=====================================================================================
if (getTryPendingDocBase() is not UserTestDoc try_pending_doc)
{
var new_pending_doc = new UserTestDoc();
var origin_doc = getOriginDocBase<UserTestEntityAttribute>();
if (origin_doc is not null)
{
new_pending_doc.copyTimestampsFromOriginDocBase(origin_doc);
}
setTryPendingDocBase(new_pending_doc);
try_pending_doc = (getTryPendingDocBase() as UserTestDoc)!;
NullReferenceCheckHelper.throwIfNull(try_pending_doc, () => $"try_pending_doc is null !!!");
}
var to_copy_user_test_attrib = try_pending_doc.getAttrib<UserTestAttrib>();
NullReferenceCheckHelper.throwIfNull(to_copy_user_test_attrib, () => $"to_copy_user_test_attrib is null !!!");
to_copy_user_test_attrib.UserId = UserId;
to_copy_user_test_attrib.Name = Name;
// 읽기 용도가 아닌 경우
if (false == isForQuery)
{
return (result, try_pending_doc);
}
//=====================================================================================
// Doc QueryType 반영
//=====================================================================================
(result, var to_query_doc) = await applyDoc4Query(try_pending_doc);
return result.isFail() ? (result, null) : (result, to_query_doc);
}
public override IEntityAttributeTransactor onNewEntityAttributeTransactor()
{
return new UserTestEntityAttributeTransactor(getOwner());
}
public override EntityAttributeBase onCloned()
{
var owner = getOwner() as UserTestEntity;
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
return new UserTestEntityAttribute(owner) { UserId = UserId, Name = Name };
}
private class UserTestEntityAttributeTransactor : EntityAttributeTransactorBase<UserTestEntityAttribute>,
ICopyEntityAttributeTransactorFromEntityAttribute
{
public UserTestEntityAttributeTransactor(EntityBase owner) : base(owner)
{
}
public bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase? entityAttribute)
{
var err_msg = string.Empty;
var to_cast_string = nameof(UserTestEntityAttribute);
if (entityAttribute is not UserTestEntityAttribute copy_from_user_test_attribute)
{
err_msg =
$"Failed to copyEntityAttributeTransactorBaseFromEntityAttribute() !!!, copy_from_user_test_attribute is null :{to_cast_string}";
Log.getLogger().error(err_msg);
return false;
}
// 롤백을 위해 객체를 복사한다.
if (getClonedEntityAttribute() is not UserTestEntityAttribute copy_to_user_test_attribute)
{
err_msg =
$"Failed to copyEntityAttributeTransactorBaseFromEntityAttribute() !!!, copy_to_user_test_attribute is null :{to_cast_string}";
Log.getLogger().error(err_msg);
return false;
}
copy_to_user_test_attribute.UserId = copy_from_user_test_attribute.UserId;
copy_to_user_test_attribute.Name = copy_from_user_test_attribute.Name;
return true;
}
}
}