aboutsummaryrefslogtreecommitdiff
path: root/BartService.cs
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2024-10-24 08:23:45 +1100
committerJake Mannens <jake@asger.xyz>2024-11-01 16:23:35 +1100
commite6d573bb8ef5c7f87409272eb3a994a902c3db95 (patch)
treebac12527b6917172b30c54ab7b3c7431dc825b86 /BartService.cs
parentbc4939d6d0f59a326b7182949b1d33e77da55864 (diff)
Fixed bug causing unstable hashcodes to be generated for records
Diffstat (limited to 'BartService.cs')
-rw-r--r--BartService.cs35
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;
}
}