using Newtonsoft.Json; using ServerCore; using ServerBase; namespace ServerCommon; public class CaliumStorageAttribute : EntityAttributeBase, ICopyEntityAttributeFromDoc, IMergeWithEntityAttribute { [JsonProperty] public double ConverterTotalCalium { get; set; } [JsonProperty] public double DailyConvertRate { get; set; } [JsonProperty] public double OperatorTotalCalium { get; set; } [JsonProperty] public int DailyApplyEpoch { get; set; } [JsonProperty] public double DailyInflationRate { get; set; } [JsonProperty] public DateTime DailyPivotDate { get; set; } = DateTimeHelper.MinTime; public CaliumStorageAttribute(EntityBase owner) : base(owner, false) {} public override void onClear() { ConverterTotalCalium = 0.0; DailyConvertRate = 0.0; OperatorTotalCalium = 0.0; DailyApplyEpoch = 0; DailyInflationRate = 0.0; DailyPivotDate = DateTimeHelper.MinTime; getAttributeState().reset(); } public override EntityAttributeBase onCloned() { var cloned = new CaliumStorageAttribute(getOwner()); cloned.ConverterTotalCalium = ConverterTotalCalium; cloned.DailyConvertRate = DailyConvertRate; cloned.OperatorTotalCalium = OperatorTotalCalium; cloned.DailyApplyEpoch = DailyApplyEpoch; cloned.DailyInflationRate = DailyInflationRate; cloned.DailyPivotDate = DailyPivotDate; return cloned; } public override IEntityAttributeTransactor onNewEntityAttributeTransactor() { return new CaliumStorageAttributeTransactor(getOwner()); } 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_storage_attribute = otherEntityAttribute as CaliumStorageAttribute; if (null == calium_storage_attribute) { err_msg = $"Failed to cast CaliumAttribute !!!, calium_storage_attribute is null - {toBasicString()}, {owner.toBasicString()}"; result.setFail(ServerErrorCode.ClassTypeCastIsNull, err_msg); Log.getLogger().error(result.toBasicString()); return result; } ConverterTotalCalium = calium_storage_attribute.ConverterTotalCalium; DailyConvertRate = calium_storage_attribute.DailyConvertRate; OperatorTotalCalium = calium_storage_attribute.OperatorTotalCalium; DailyApplyEpoch = calium_storage_attribute.DailyApplyEpoch; DailyInflationRate = calium_storage_attribute.DailyInflationRate; DailyPivotDate = calium_storage_attribute.DailyPivotDate; return result; } public bool copyEntityAttributeFromDoc(DynamoDbDocBase? newDocBase) { var owner = getOwner(); var calium_storage_doc = newDocBase as CaliumStorageDoc; if (null == calium_storage_doc) { var err_msg = $"calium_doc is null !!!, in copyEntityAttributeFromDoc() - docName:{nameof(CaliumStorageDoc)} - {owner.toBasicString()}"; Log.getLogger().error(err_msg); return false; } //===================================================================================== // Origin Doc => Attribute //===================================================================================== var calium_storage_attrib = calium_storage_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(calium_storage_attrib, () => $"calium_storage_attrib is null !!! - {owner.toBasicString()}"); ConverterTotalCalium = calium_storage_attrib.ConverterStorage.TotalCalium; DailyConvertRate = calium_storage_attrib.ConverterStorage.DailyConvertRate; DailyPivotDate = calium_storage_attrib.DailyPivotDate; DailyApplyEpoch = calium_storage_attrib.DailyEpoch; OperatorTotalCalium = calium_storage_attrib.OperatorStorage.TotalCalium; DailyInflationRate = calium_storage_attrib.ExchangerStorage.DailyInflationRate; return true; } } public class CaliumStorageAttributeTransactor : EntityAttributeTransactorBase, ICopyEntityAttributeTransactorFromEntityAttribute { public CaliumStorageAttributeTransactor(EntityBase owner) : base(owner) { } public bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase? entityAttributeBase) { string err_msg; var copy_from_calium_storage_attribute = entityAttributeBase as CaliumStorageAttribute; if (null == copy_from_calium_storage_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_from_calium_storage_attribute is null :{nameof(CaliumAttribute)}"; Log.getLogger().error(err_msg); return false; } var copy_to_calium_storage_attribute = getClonedEntityAttribute() as CaliumStorageAttribute; if (null == copy_to_calium_storage_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_to_calium_storage_attribute is null :{nameof(CaliumAttribute)}"; Log.getLogger().error(err_msg); return false; } copy_to_calium_storage_attribute.ConverterTotalCalium = copy_from_calium_storage_attribute.ConverterTotalCalium; copy_to_calium_storage_attribute.DailyConvertRate = copy_from_calium_storage_attribute.DailyConvertRate; copy_to_calium_storage_attribute.OperatorTotalCalium = copy_from_calium_storage_attribute.OperatorTotalCalium; copy_to_calium_storage_attribute.DailyApplyEpoch = copy_from_calium_storage_attribute.DailyApplyEpoch; copy_to_calium_storage_attribute.DailyInflationRate = copy_from_calium_storage_attribute.DailyInflationRate; copy_to_calium_storage_attribute.DailyPivotDate = copy_from_calium_storage_attribute.DailyPivotDate; return true; } }