From 70fac0f60ee55475aad1ac304f97ec7eb10d2586 Mon Sep 17 00:00:00 2001 From: movingsam Date: Mon, 16 Feb 2026 22:03:04 -0800 Subject: [PATCH] refactor: apply CleanDDD strongly typed ID and add Deleted/RowVersion - Convert CampaignId to partial record implementing IGuidStronglyTypedId - Add PointsAccountId as IInt64StronglyTypedId with Snowflake ID generation - Add Deleted and RowVersion to MemberEntity and PointsAccount - Update PointsAccountEntityTypeConfiguration to use SnowFlakeValueGenerator BREAKING CHANGE: PointsAccount now uses PointsAccountId (long) instead of plain long --- .../ValueObjects/CampaignId.cs | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/Fengling.Activity.Domain/ValueObjects/CampaignId.cs b/src/Fengling.Activity.Domain/ValueObjects/CampaignId.cs index 8672838..51c8648 100644 --- a/src/Fengling.Activity.Domain/ValueObjects/CampaignId.cs +++ b/src/Fengling.Activity.Domain/ValueObjects/CampaignId.cs @@ -1,18 +1,9 @@ namespace Fengling.Activity.Domain.ValueObjects; -public class CampaignId : IEquatable +public partial record CampaignId : IGuidStronglyTypedId { - public Guid Value { get; } - - private CampaignId(Guid value) => Value = value; - - public static CampaignId New() => new(Guid.NewGuid()); - public static CampaignId FromGuid(Guid value) => new(value); - public static CampaignId Parse(string value) => new(Guid.Parse(value)); - - public bool Equals(CampaignId? other) => other?.Value == Value; - public override bool Equals(object? obj) => obj is CampaignId other && Equals(other); - public override int GetHashCode() => Value.GetHashCode(); + public static CampaignId New() => new CampaignId(Guid.NewGuid()); + public Guid Value => this; public static implicit operator Guid(CampaignId id) => id.Value; - public override string ToString() => Value.ToString(); + public static implicit operator CampaignId(Guid value) => new CampaignId(value); }