diff options
| author | Jake Mannens <jake@asger.xyz> | 2024-10-24 08:23:45 +1100 |
|---|---|---|
| committer | Jake Mannens <jake@asger.xyz> | 2024-11-01 16:23:35 +1100 |
| commit | e6d573bb8ef5c7f87409272eb3a994a902c3db95 (patch) | |
| tree | bac12527b6917172b30c54ab7b3c7431dc825b86 | |
| parent | bc4939d6d0f59a326b7182949b1d33e77da55864 (diff) | |
Fixed bug causing unstable hashcodes to be generated for records
| -rw-r--r-- | BartService.cs | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/BartService.cs b/BartService.cs index f54ec55..e3bfac1 100644 --- a/BartService.cs +++ b/BartService.cs @@ -2,6 +2,7 @@ using PagerParser.Bart; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Security.Cryptography; using System.Text.Json; using System.Text.Json.Serialization; @@ -46,16 +47,30 @@ namespace PagerParser.Bart { public DateTime? CreatedOn { get; set; } public BartMember? CreatedBy { get; set; } - public int Hashcode { - get => ( - Timestamp, - Member.BartMemberId, - Status, - IsDefault, - ModifiedOn, - ModifiedBy?.BartMemberId, - CreatedOn, - CreatedBy?.BartMemberId).GetHashCode(); + public Guid Hashcode { + get { + int?[] hashes = [ + Timestamp.GetHashCode(), + Member.BartMemberId.GetHashCode(), + Status.GetHashCode(), + IsDefault.GetHashCode(), + ModifiedOn.GetHashCode(), + ModifiedBy?.BartMemberId.GetHashCode(), + CreatedOn.GetHashCode(), + CreatedBy?.BartMemberId.GetHashCode() + ]; + + var bytes = hashes + .Where(x => x is not null) + .Cast<int>() + .SelectMany(BitConverter.GetBytes) + .ToArray(); + + using var md5 = MD5.Create(); + + return new Guid(md5.ComputeHash(bytes)); + } + set => _ = value; } } |
