using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon.Cache; using META_ID = System.UInt32; using LAND_AUCTION_NUBER = System.Int32; using USER_GUID = System.String; namespace ServerCommon { //============================================================================================= // // // // //============================================================================================= public class LandAuctionActivityAttribute : EntityAttributeBase, ICopyEntityAttributeFromDoc, IMergeWithEntityAttribute { [JsonProperty] public META_ID LandMetaId { get; set; } = 0; // 경매 대상 LandData Meta Id [JsonProperty] public LAND_AUCTION_NUBER AuctionNumber { get; set; } = 0; // 경매 번호 public LandAuctionActivityAttribute(EntityBase owner) : base(owner) { } public void resetActivity(META_ID landMetaId) { LandMetaId = landMetaId; AuctionNumber = 0; } public override IEntityAttributeTransactor onNewEntityAttributeTransactor() { return new LandAuctionActivityAttributeTransactor(getOwner()); } public override void onClear() { LandMetaId = 0; AuctionNumber = 0; getAttributeState().reset(); } public override EntityAttributeBase onCloned() { var cloned = new LandAuctionActivityAttribute(getOwner()); cloned.deepCopyFromBase(this); cloned.LandMetaId = LandMetaId; cloned.AuctionNumber = AuctionNumber; return cloned; } public override async Task<(Result, DynamoDbDocBase?)> toDocBase(bool isForQuery = true) { var result = new Result(); var owner = getOwner(); NullReferenceCheckHelper.throwIfNull(owner, () => "owner is null !!!"); //===================================================================================== // Attribute => try pending Doc //===================================================================================== var try_pending_doc = getTryPendingDocBase() as LandAuctionActivityDoc; if (null == try_pending_doc) { var to_copy_doc = new LandAuctionActivityDoc(LandMetaId); var origin_doc = getOriginDocBase(); if (null != origin_doc) { to_copy_doc.copyTimestampsFromOriginDocBase(origin_doc); } try_pending_doc = to_copy_doc; setTryPendingDocBase(try_pending_doc); } var land_auction_activity_attrib = try_pending_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(land_auction_activity_attrib, () => $"land_auction_activity_attrib is null !!! - {owner.toBasicString()}"); land_auction_activity_attrib.LandMetaId = LandMetaId; land_auction_activity_attrib.AuctionNumber = AuctionNumber; if (false == isForQuery) { return (result, try_pending_doc); } //===================================================================================== // Doc QueryType 반영 //===================================================================================== (result, var to_query_doc) = await applyDoc4Query(try_pending_doc); if (result.isFail()) { return (result, null); } return (result, to_query_doc); } public bool copyEntityAttributeFromDoc(DynamoDbDocBase? docBase) { var err_msg = string.Empty; var to_cast_string = typeof(LandAuctionActivityDoc).Name; var land_auction_activity_doc = docBase as LandAuctionActivityDoc; if (null == land_auction_activity_doc) { err_msg = $"Failed to copyEntityAttributeFromDoc() !!!, land_auction_activity_doc is null :{to_cast_string}"; Log.getLogger().error(err_msg); return false; } //===================================================================================== // New Doc => Origin Doc //===================================================================================== syncOriginDocBaseWithNewDoc(land_auction_activity_doc); //===================================================================================== // Doc => Attribute //===================================================================================== var land_auction_activity_attrib = land_auction_activity_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(land_auction_activity_attrib, () => "land_auction_activity_attrib is null !!!"); LandMetaId = land_auction_activity_attrib.LandMetaId; AuctionNumber = land_auction_activity_attrib.AuctionNumber; return true; } public Result onMerge(EntityAttributeBase otherEntityAttribute) { var owner = getOwner(); NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); var result = new Result(); var err_msg = string.Empty; if (null == otherEntityAttribute) { err_msg = $"Invalid Param !!!, otherEntityAttribute is null"; result.setFail(ServerErrorCode.FunctionParamNull, err_msg); Log.getLogger().error(result.toBasicString()); return result; } //===================================================================================== // OtherAttribute => Attribute //===================================================================================== var land_auction_activity_attribute = otherEntityAttribute as LandAuctionActivityAttribute; if (null == land_auction_activity_attribute) { err_msg = $"Failed to cast land_auction_activity_attribute !!!, land_attribute is null"; result.setFail(ServerErrorCode.ClassTypeCastIsNull, err_msg); Log.getLogger().error(result.toBasicString()); return result; } LandMetaId = land_auction_activity_attribute.LandMetaId; AuctionNumber = land_auction_activity_attribute.AuctionNumber; //===================================================================================== // Attribute Try Pending Doc => Origin Doc //===================================================================================== var try_pending_doc = land_auction_activity_attribute.getTryPendingDocBase() as LandAuctionActivityDoc; if (null != try_pending_doc) { land_auction_activity_attribute.resetTryPendingDocBase(); syncOriginDocBaseWithNewDoc(try_pending_doc); } var origin_doc_base = getOriginDocBase(); if (null == origin_doc_base) { // DB 에 저장되어 있지 않는 경우 OriginDoc은 null 이다 !!! return result; } var land_auction_activity_attrib = origin_doc_base.getAttrib(); NullReferenceCheckHelper.throwIfNull(land_auction_activity_attrib, () => $"land_auction_activity_attrib is null !!! - {owner.toBasicString()}"); land_auction_activity_attrib.LandMetaId = LandMetaId; land_auction_activity_attrib.AuctionNumber = AuctionNumber; return result; } public override string toBasicString() { return base.toBasicString() + $" LandMetaId:{LandMetaId}, AuctionNumber:{AuctionNumber}"; } } public class LandAuctionActivityAttributeTransactor : EntityAttributeTransactorBase, ICopyEntityAttributeTransactorFromEntityAttribute { public LandAuctionActivityAttributeTransactor(EntityBase owner) : base(owner) { } public bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase? entityAttributeBase) { var err_msg = string.Empty; var to_cast_string = typeof(LandAuctionRegistryAttribute).Name; var copy_from_land_auction_activity_attribute = entityAttributeBase as LandAuctionActivityAttribute; if (null == copy_from_land_auction_activity_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorBaseFromEntityAttribute() !!!, copy_from_land_auction_activity_attribute is null :{to_cast_string}"; Log.getLogger().error(err_msg); return false; } var copy_to_land_auction_activity_attribute = getClonedEntityAttribute() as LandAuctionActivityAttribute; if (null == copy_to_land_auction_activity_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorBaseFromEntityAttribute() !!!, copy_to_land_auction_activity_attribute is null :{to_cast_string}"; Log.getLogger().error(err_msg); return false; } copy_to_land_auction_activity_attribute.LandMetaId = copy_from_land_auction_activity_attribute.LandMetaId; copy_to_land_auction_activity_attribute.AuctionNumber = copy_from_land_auction_activity_attribute.AuctionNumber; return true; } } }