204 lines
7.3 KiB
C#
204 lines
7.3 KiB
C#
using Newtonsoft.Json;
|
|
|
|
|
|
using ServerCore;
|
|
using ServerBase;
|
|
|
|
|
|
namespace ServerCommon;
|
|
|
|
public class CaliumAttribute : EntityAttributeBase, ICopyEntityAttributeFromDoc, IMergeWithEntityAttribute
|
|
{
|
|
[JsonProperty]
|
|
public double DailyCalium
|
|
{
|
|
get { return m_daily_calium; }
|
|
set
|
|
{
|
|
var recorder = getEntityRecorder();
|
|
if (null != recorder)
|
|
{
|
|
recorder.applyDeltaCounter(EntityDeltaType.MoneyCalium, value - m_daily_calium, value);
|
|
}
|
|
|
|
m_daily_calium = value;
|
|
}
|
|
}
|
|
|
|
private double m_daily_calium = 0.0;
|
|
|
|
[JsonProperty]
|
|
public DateTime ProvidedDate { get; set; }
|
|
|
|
public CaliumAttribute(UserBase owner) : base(owner, false){}
|
|
|
|
public override void onClear()
|
|
{
|
|
DailyCalium = 0.0;
|
|
ProvidedDate = DateTimeHelper.MinTime;
|
|
|
|
getAttributeState().reset();
|
|
}
|
|
|
|
public override EntityAttributeBase onCloned()
|
|
{
|
|
var owner = getOwner() as UserBase;
|
|
NullReferenceCheckHelper.throwIfNull(owner, () => "owner is null !!!");
|
|
|
|
var cloned = new CaliumAttribute(owner);
|
|
cloned.DailyCalium = DailyCalium;
|
|
cloned.ProvidedDate = ProvidedDate;
|
|
|
|
return cloned;
|
|
}
|
|
|
|
public override IEntityAttributeTransactor onNewEntityAttributeTransactor()
|
|
{
|
|
return new CaliumAttributeTransactor(getOwner());
|
|
}
|
|
|
|
public override async Task<(Result, DynamoDbDocBase?)> toDocBase(bool isForQuery = true)
|
|
{
|
|
var result = new Result();
|
|
var owner = getOwner();
|
|
|
|
var user_attribute = owner.getEntityAttribute<UserAttribute>();
|
|
NullReferenceCheckHelper.throwIfNull(user_attribute, () => $"user_attribute is null !!! - {owner.toBasicString()}");
|
|
|
|
var user_guid = user_attribute.UserGuid;
|
|
|
|
var to_copy_doc = new CaliumDoc(user_guid);
|
|
if (false == getAttributeState().hasFlag(StateType.Created))
|
|
{
|
|
var origin_doc_base = getOriginDocBase<CaliumAttribute>();
|
|
NullReferenceCheckHelper.throwIfNull(origin_doc_base, () => $"origin_doc_base is null !!! - {owner.toBasicString()}");
|
|
|
|
to_copy_doc.copyTimestampsFromOriginDocBase(origin_doc_base);
|
|
}
|
|
|
|
var to_copy_calium_attrib = to_copy_doc.getAttrib<CaliumAttrib>();
|
|
NullReferenceCheckHelper.throwIfNull(to_copy_calium_attrib, () => $"to_copy_calium_attrib is null !!! - {owner.toBasicString()}");
|
|
|
|
to_copy_calium_attrib.DailyCalium = DailyCalium;
|
|
to_copy_calium_attrib.ProvidedDate = ProvidedDate;
|
|
|
|
if (false == isForQuery)
|
|
{
|
|
return (result, to_copy_doc);
|
|
}
|
|
|
|
(result, var to_query_doc) = await applyDoc4Query(to_copy_doc);
|
|
if (result.isFail())
|
|
{
|
|
return (result, null);
|
|
}
|
|
|
|
return (result, to_query_doc);
|
|
}
|
|
|
|
public Result onMerge(EntityAttributeBase otherEntityAttribute)
|
|
{
|
|
var owner = getOwner();
|
|
ArgumentNullReferenceCheckHelper.throwIfNull(otherEntityAttribute, () => $"otherEntityAttribute is null !!! - {owner.toBasicString()}");
|
|
|
|
var result = new Result();
|
|
string err_msg;
|
|
|
|
//=====================================================================================
|
|
// OtherAttribute => Attribute
|
|
//=====================================================================================
|
|
var calium_attribute = otherEntityAttribute as CaliumAttribute;
|
|
if (null == calium_attribute)
|
|
{
|
|
err_msg = $"Failed to cast CaliumAttribute !!!, calium_attribute is null - {toBasicString()}, {owner.toBasicString()}";
|
|
result.setFail(ServerErrorCode.ClassTypeCastIsNull, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
|
|
return result;
|
|
}
|
|
|
|
DailyCalium = calium_attribute.DailyCalium;
|
|
ProvidedDate = calium_attribute.ProvidedDate;
|
|
|
|
//=====================================================================================
|
|
// Attribute => Origin Doc
|
|
//=====================================================================================
|
|
var origin_doc = getOriginDocBase<CaliumAttribute>() as CaliumDoc;
|
|
if (null == origin_doc)
|
|
{
|
|
err_msg = $"getOriginDocBase<CaliumAttribute>() is null !!! - docName:{nameof(CaliumDoc)} - {toBasicString()}";
|
|
Log.getLogger().warn(err_msg);
|
|
}
|
|
else
|
|
{
|
|
var calium_attrib = origin_doc.getAttrib<CaliumAttrib>();
|
|
NullReferenceCheckHelper.throwIfNull(calium_attrib, () => $"calium_attrib is null !!! - {toBasicString()}");
|
|
|
|
calium_attrib.DailyCalium = DailyCalium;
|
|
calium_attrib.ProvidedDate = ProvidedDate;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public bool copyEntityAttributeFromDoc(DynamoDbDocBase? newDocBase)
|
|
{
|
|
var owner = getOwner();
|
|
|
|
var calium_doc = newDocBase as CaliumDoc;
|
|
if (null == calium_doc)
|
|
{
|
|
var err_msg = $"calium_doc is null !!!, in copyEntityAttributeFromDoc() - docName:{nameof(CaliumDoc)} - {owner.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
return false;
|
|
}
|
|
|
|
//=====================================================================================
|
|
// New Doc => Origin Doc
|
|
//=====================================================================================
|
|
syncOriginDocBaseWithNewDoc<CaliumAttribute>(calium_doc);
|
|
|
|
//=====================================================================================
|
|
// Origin Doc => Attribute
|
|
//=====================================================================================
|
|
var calium_attrib = calium_doc.getAttrib<CaliumAttrib>();
|
|
NullReferenceCheckHelper.throwIfNull(calium_attrib, () => $"calium_attrib is null !!! - {owner.toBasicString()}");
|
|
|
|
DailyCalium = calium_attrib.DailyCalium;
|
|
ProvidedDate = calium_attrib.ProvidedDate;
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public class CaliumAttributeTransactor : EntityAttributeTransactorBase<CaliumAttribute>, ICopyEntityAttributeTransactorFromEntityAttribute
|
|
{
|
|
public CaliumAttributeTransactor(EntityBase owner) : base(owner) { }
|
|
|
|
public bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase? entityAttributeBase)
|
|
{
|
|
string err_msg;
|
|
|
|
var copy_from_calium_attribute = entityAttributeBase as CaliumAttribute;
|
|
|
|
if (null == copy_from_calium_attribute)
|
|
{
|
|
err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_from_calium_attribute is null :{nameof(CaliumAttribute)}";
|
|
Log.getLogger().error(err_msg);
|
|
return false;
|
|
}
|
|
|
|
var copy_to_calium_attribute = getClonedEntityAttribute() as CaliumAttribute;
|
|
if (null == copy_to_calium_attribute)
|
|
{
|
|
err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_to_calium_attribute is null :{nameof(CaliumAttribute)}";
|
|
Log.getLogger().error(err_msg);
|
|
return false;
|
|
}
|
|
|
|
copy_to_calium_attribute.DailyCalium = copy_from_calium_attribute.DailyCalium;
|
|
copy_to_calium_attribute.ProvidedDate = copy_from_calium_attribute.ProvidedDate;
|
|
|
|
return true;
|
|
}
|
|
} |