From d0a2fefbbf7523110dbeb847d74c985ebe69e2c1 Mon Sep 17 00:00:00 2001 From: lvas463 Date: Tue, 14 Nov 2023 12:50:07 -0500 Subject: [PATCH] idek tbh --- PcgsInvUi/Services/PcgsClient.cs | 45 +++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/PcgsInvUi/Services/PcgsClient.cs b/PcgsInvUi/Services/PcgsClient.cs index 3b39b49..b913f64 100644 --- a/PcgsInvUi/Services/PcgsClient.cs +++ b/PcgsInvUi/Services/PcgsClient.cs @@ -9,7 +9,11 @@ using ReactiveUI; namespace PcgsInvUi.Services; +/// +/// Provides an interface into the PCGS Public API. +/// public class PcgsClient : ReactiveObject { + public int NumApiRequests { get => _numApiRequests; set => this.RaiseAndSetIfChanged(ref _numApiRequests, value); @@ -20,7 +24,7 @@ public class PcgsClient : ReactiveObject { private int _numApiRequests; public PcgsClient(string apiKey) { - // _apiKey = apiKey; + // I'd like to be able to test the API key upon initialization. _apiKey = "E8xivTVN_k4Q8ubk8Xv_uU11U91WX0wDht4S4m4BAf2HPmKnGrZ0J2f9nccM7Ns1VkGoT1SXYR74I7aNaMKqXlJGEy3oobseKV0nGiqu1IKvFkOTVjhV37SWUVExSDFMC6FLzs7xJQIHwkcxr5JFOQNmc4ZytEh_-hmCN3NL-z0fEk98tzBmPJ_F7bq_xNru86QMD2A9yalu_dWe-lCysfyE2bCA2EDqwvWenRYf-0XnNtp6qlxxCMlCd-TDqqRKLC3qefCwpXSemwBiNSP5gbC9pwcKrZugkruuJ0nyxxThZymm"; } @@ -38,12 +42,15 @@ public class PcgsClient : ReactiveObject { Console.WriteLine("Got response."); if (response.IsSuccessStatusCode) { + // TODO Check for errors indicated by a successful response. string jsonResponse = await response.Content.ReadAsStringAsync(); newCoin = ParseJsonResponse(jsonResponse); Console.WriteLine("Coin created."); } else { - Console.WriteLine($"Error: {response.StatusCode} - {response.ReasonPhrase}"); + // TODO Throw HTTP exception. + Console.WriteLine("Error getting coin."); + } } @@ -68,4 +75,36 @@ public class PcgsClient : ReactiveObject { return newCoin; } -} \ No newline at end of file +} + +/// +/// Thrown when the API response indicates that the request was invalid. +/// Generally used when the request was formatted incorrectly. +/// +public class InvalidRequestException : Exception { + public InvalidRequestException() { } + public InvalidRequestException(string message) : base(message) { } + public InvalidRequestException(string message, Exception inner) : base(message, inner) { } +} + +/// +/// Thrown when the API response indicates that the coin was not found. +/// Generally used when the PCGS number and grade combo that was requested does not exist in the PCGS database. +/// +public class CoinNotFoundException : Exception { + public CoinNotFoundException() { } + public CoinNotFoundException(string message) : base(message) { } + public CoinNotFoundException(string message, Exception inner) : base(message, inner) { } +} + +/// +/// Thrown when the API returns an HTTP error 401. +/// Generally indicates that the API key is invalid. +/// +public class ApiAuthorizationException : Exception { + public ApiAuthorizationException() { } + public ApiAuthorizationException(string message) : base(message) { } + public ApiAuthorizationException(string message, Exception inner) : base(message, inner) { } +} + +public