CPKreuz 1 rok temu
rodzic
commit
58dab5b1f8

+ 8 - 0
src/PixiEditor/Models/AnalyticsAPI/AnalyticSessionInfo.cs

@@ -0,0 +1,8 @@
+namespace PixiEditor.Models.AnalyticsAPI;
+
+public class AnalyticSessionInfo
+{
+    public Version Version { get; set; }
+
+    public string BuildId { get; set; }
+}

+ 32 - 8
src/PixiEditor/Models/AnalyticsAPI/AnalyticsClient.cs

@@ -15,7 +15,13 @@ public class AnalyticsClient
 
     private readonly JsonSerializerOptions _options = new()
     {
-        Converters = { new JsonStringEnumConverter(), new KeyCombinationConverter(), new VecDConverter() }
+        Converters =
+        {
+            new JsonStringEnumConverter(),
+            new KeyCombinationConverter(),
+            new VecDConverter(),
+            new VersionConverter()
+        }
     };
 
     public AnalyticsClient(string url)
@@ -25,7 +31,12 @@ public class AnalyticsClient
 
     public async Task<Guid?> CreateSessionAsync(CancellationToken cancellationToken = default)
     {
-        var response = await _client.GetAsync($"init-session?version={VersionHelpers.GetCurrentAssemblyVersion()}&buildId={VersionHelpers.GetBuildId()}", cancellationToken);
+        var session = new AnalyticSessionInfo()
+        {
+            Version = VersionHelpers.GetCurrentAssemblyVersion(), BuildId = VersionHelpers.GetBuildId()
+        };
+        
+        var response = await _client.PostAsJsonAsync("sessions/new", session, _options, cancellationToken);
 
         if (response.IsSuccessStatusCode)
         {
@@ -41,14 +52,14 @@ public class AnalyticsClient
 
     }
 
-    public async Task<string?> SendEventsAsync(Guid sessionId, IEnumerable<AnalyticEvent> events,
+    public async Task<bool> SendEventsAsync(Guid sessionId, IEnumerable<AnalyticEvent> events,
         CancellationToken cancellationToken = default)
     {
-        var response = await _client.PostAsJsonAsync($"post-events?id={sessionId}", events, _options, cancellationToken);
+        var response = await _client.PostAsJsonAsync($"sessions/{sessionId}/events", events, _options, cancellationToken);
         
         if (response.IsSuccessStatusCode)
         {
-            return await response.Content.ReadAsStringAsync(cancellationToken);
+            return true;
         }
 
         if (response.StatusCode is not (HttpStatusCode.NotFound or HttpStatusCode.ServiceUnavailable))
@@ -56,19 +67,19 @@ public class AnalyticsClient
             await ReportInvalidStatusCodeAsync(response.StatusCode);
         }
             
-        return null;
+        return false;
     }
 
     public async Task<bool> SendHeartbeatAsync(Guid sessionId, CancellationToken cancellationToken = default)
     {
-        var response = await _client.PostAsync($"heartbeat?id={sessionId}", null, cancellationToken);
+        var response = await _client.PostAsync($"sessions/{sessionId}/heartbeat", null, cancellationToken);
 
         return response.IsSuccessStatusCode;
     }
 
     public async Task EndSessionAsync(Guid sessionId, CancellationToken cancellationToken = default)
     {
-        await _client.PostAsync($"end-session?id={sessionId}", null, cancellationToken);
+        await _client.DeleteAsync($"sessions/{sessionId}", cancellationToken);
     }
 
     private static async Task ReportInvalidStatusCodeAsync(HttpStatusCode statusCode)
@@ -102,4 +113,17 @@ public class AnalyticsClient
             writer.WriteStringValue($"{value.X.ToString("F2", invariant)}; {value.X.ToString("F2", invariant)}");
         }
     }
+    
+    class VersionConverter : JsonConverter<Version>
+    {
+        public override Version? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void Write(Utf8JsonWriter writer, Version value, JsonSerializerOptions options)
+        {
+            writer.WriteStringValue(value.ToString());
+        }
+    }
 }