From 425bb6113d101ffbedd118ca383a9f1517290c1b Mon Sep 17 00:00:00 2001 From: Wyatt Miller Date: Thu, 6 Dec 2018 01:03:58 -0500 Subject: [PATCH] architecture changes; application has hit beta --- .vs/DeskHubSharp/v15/.suo | Bin 169984 -> 186368 bytes .../v15/Server/sqlite3/storage.ide | Bin 1392640 -> 1409024 bytes DeskHubSharp/BusinessLayer/Request.cs | 122 ++-------------- DeskHubSharp/DAL/ApiDataService.cs | 135 ++++++++++++++++++ DeskHubSharp/DAL/IDataService.cs | 8 +- DeskHubSharp/DAL/XmlDataService.cs | 66 --------- DeskHubSharp/Data/DataConfig.cs | 2 +- DeskHubSharp/DeskHubSharp.csproj | 4 +- DeskHubSharp/DetailWindow.xaml | 22 ++- DeskHubSharp/DetailWindow.xaml.cs | 41 +++++- DeskHubSharp/MainWindow.xaml.cs | 22 ++- DeskHubSharp/Models/RepoDetail.cs | 1 + DeskHubSharp/SearchWindow.xaml.cs | 9 +- DeskHubSharp/obj/Debug/App.g.cs | 2 +- DeskHubSharp/obj/Debug/App.g.i.cs | 2 +- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 8143 -> 8187 bytes ...eskHubSharp.csproj.CoreCompileInputs.cache | 2 +- .../Debug/DeskHubSharp_MarkupCompile.cache | 8 +- .../Debug/DeskHubSharp_MarkupCompile.i.cache | 8 +- .../obj/Debug/DeskHubSharp_MarkupCompile.lref | 14 +- DeskHubSharp/obj/Debug/MainWindow.g.cs | 2 +- DeskHubSharp/obj/Debug/MainWindow.g.i.cs | 2 +- 22 files changed, 243 insertions(+), 229 deletions(-) create mode 100644 DeskHubSharp/DAL/ApiDataService.cs delete mode 100644 DeskHubSharp/DAL/XmlDataService.cs diff --git a/.vs/DeskHubSharp/v15/.suo b/.vs/DeskHubSharp/v15/.suo index f0f52bb6c450c7b4a47f1a1b7a6a0f803dc46a14..cd668ae83e232393bc24f525e5f05b843da0226b 100644 GIT binary patch delta 20022 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 XWV~X7nC+?9E>_U~+wp2Ow4(n9-D?hq delta 17077 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 delta 14595 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 +GgH>t~rKTnS&euWp-1%?^bT@8m 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 diff --git a/DeskHubSharp/BusinessLayer/Request.cs b/DeskHubSharp/BusinessLayer/Request.cs index 85167bf..6936274 100644 --- a/DeskHubSharp/BusinessLayer/Request.cs +++ b/DeskHubSharp/BusinessLayer/Request.cs @@ -1,133 +1,41 @@ -using RestSharp; -using System; +using System; using System.Collections.Generic; using System.Linq; -using System.Net; -using System.Net.Mail; using System.Text; using System.Threading.Tasks; -using Newtonsoft.Json; -using System.Collections.ObjectModel; namespace DeskHubSharp { - class Request + public class Request { - // TODO: this is rudimentary, fix it - // i.e. try catch statements\ - // TODO: Add BranchRequest function - - private string _apiEndpoint = "https://api.github.com/"; + private ApiDataService _api; private string _query; - public List RepoDetail { get; set; } - public Request(string query) { _query = query; + _api = new ApiDataService(_query); } - //public Request(string query, Object function) - //{ - // _query = query; - //} - - /// - /// Calls API for repo and basic user data - /// - /// - public void SearchRequest() + public void PerformSearchRequest() { - try - { - var client = new RestClient(_apiEndpoint); - RestRequest requestRepo = new RestRequest($"users/{_query}/repos", Method.GET); - - var response = client.Execute(requestRepo); - var x = response.Content; - var deserialized = JsonConvert.DeserializeObject>(x); - - //ObservableCollection test = new ObservableCollection() - //{ - // new RepoDetail() - // { - // Login = "John", - // Password = "pw" - // } - //}; - - if (deserialized.Count == 0) - { - throw new Exception(); - } - else - { - RequestList.repoDetail = deserialized; - } - } - catch (Exception) - { - ErrorWindow err = new ErrorWindow(); - err.txtblk_error.Text = "We couldn't gather repository data. Please try again"; - } + _api.SearchRequest(); } - - /// - /// Calls API for detailed user data - /// - public void UserRequest() + public void PerformUserRequest() { - try - { - var client = new RestClient(_apiEndpoint); - - RestRequest requestUser = new RestRequest($"users/{_query}", Method.GET); - - var response = client.Execute(requestUser); - string x = response.Content; - var deserailized = JsonConvert.DeserializeObject(x); - - if (deserailized == null) - { - throw new Exception(); - } - else - { - RequestList.userDetail = deserailized; - } - - } - catch (NullReferenceException) - { - ErrorWindow err = new ErrorWindow(); - err.txtblk_error.Text = "We couldn't gather user data. Please try again."; - } - + _api.UserRequest(); } - /// - /// Calls API for detailed branch data - /// - public void BranchRequest() + public void PerformBranchRequest() { - try - { - var client = new RestClient(_apiEndpoint); + _api.BranchRequest(); + } - RestRequest requestUser = new RestRequest($"/repos/{RequestList.userDetail.login}/{_query}/branches", Method.GET); - - var response = client.Execute(requestUser); - string x = response.Content; - var deserailized = JsonConvert.DeserializeObject>(x); - - RequestList.branchDetail = deserailized; - } - catch (NullReferenceException) - { - ErrorWindow err = new ErrorWindow(); - err.txtblk_error.Text = "We couldn't gather user data. Please try again."; - } + public Owner GetUserData() + { + Owner owner = new Owner(); + return owner; } } diff --git a/DeskHubSharp/DAL/ApiDataService.cs b/DeskHubSharp/DAL/ApiDataService.cs new file mode 100644 index 0000000..bbfde1b --- /dev/null +++ b/DeskHubSharp/DAL/ApiDataService.cs @@ -0,0 +1,135 @@ +using RestSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Mail; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; +using System.Collections.ObjectModel; + +namespace DeskHubSharp +{ + class ApiDataService : IDataService + { + // TODO: this is rudimentary, fix it + // i.e. try catch statements\ + // TODO: Add BranchRequest function + + private string _apiEndpoint; + private string _query; + + public List RepoDetail { get; set; } + + public ApiDataService(string query) + { + _query = query; + _apiEndpoint = DataConfig.dataConfString; + } + + //public Request(string query, Object function) + //{ + // _query = query; + //} + + /// + /// Calls API for repo and basic user data + /// + /// + public void SearchRequest() + { + try + { + var client = new RestClient(_apiEndpoint); + RestRequest requestRepo = new RestRequest($"users/{_query}/repos", Method.GET); + + var response = client.Execute(requestRepo); + var x = response.Content; + var deserialized = JsonConvert.DeserializeObject>(x); + + //ObservableCollection test = new ObservableCollection() + //{ + // new RepoDetail() + // { + // Login = "John", + // Password = "pw" + // } + //}; + + if (deserialized.Count == 0) + { + throw new Exception(); + } + else + { + RequestList.repoDetail = deserialized; + } + } + catch (Exception) + { + ErrorWindow err = new ErrorWindow(); + err.txtblk_error.Text = "We couldn't gather repository data. Please try again"; + } + } + + + /// + /// Calls API for detailed user data + /// + public void UserRequest() + { + try + { + var client = new RestClient(_apiEndpoint); + + RestRequest requestUser = new RestRequest($"users/{_query}", Method.GET); + + var response = client.Execute(requestUser); + string x = response.Content; + var deserailized = JsonConvert.DeserializeObject(x); + + if (deserailized == null) + { + throw new Exception(); + } + else + { + RequestList.userDetail = deserailized; + } + + } + catch (NullReferenceException) + { + ErrorWindow err = new ErrorWindow(); + err.txtblk_error.Text = "We couldn't gather user data. Please try again."; + } + + } + + /// + /// Calls API for detailed branch data + /// + public void BranchRequest() + { + try + { + var client = new RestClient(_apiEndpoint); + + RestRequest requestUser = new RestRequest($"/repos/{RequestList.userDetail.login}/{_query}/branches", Method.GET); + + var response = client.Execute(requestUser); + string x = response.Content; + var deserailized = JsonConvert.DeserializeObject>(x); + + RequestList.branchDetail = deserailized; + } + catch (NullReferenceException) + { + ErrorWindow err = new ErrorWindow(); + err.txtblk_error.Text = "We couldn't gather user data. Please try again."; + } + } + + } +} diff --git a/DeskHubSharp/DAL/IDataService.cs b/DeskHubSharp/DAL/IDataService.cs index 524d14e..1d367b8 100644 --- a/DeskHubSharp/DAL/IDataService.cs +++ b/DeskHubSharp/DAL/IDataService.cs @@ -8,7 +8,11 @@ namespace DeskHubSharp { public interface IDataService { - List ReadAll(); - void WriteAll(List user); + //List ReadAll(); + //void WriteAll(List user); + + void SearchRequest(); + void UserRequest(); + void BranchRequest(); } } diff --git a/DeskHubSharp/DAL/XmlDataService.cs b/DeskHubSharp/DAL/XmlDataService.cs deleted file mode 100644 index 756b7b0..0000000 --- a/DeskHubSharp/DAL/XmlDataService.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Serialization; -using System.IO; - -namespace DeskHubSharp -{ - class XmlDataService - { - private readonly string _dataFilePath; - - public List ReadAll() - { - List Users = new List(); - XmlSerializer serializer = new XmlSerializer(typeof(List), new XmlRootAttribute("Users")); - - try - { - StreamReader reader = new StreamReader(_dataFilePath); - using (reader) - { - Users = (List)serializer.Deserialize(reader); - } - - } - catch (Exception) - { - throw; - } - - return Users; - } - - public void WriteAll(List Users) - { - XmlSerializer serializer = new XmlSerializer(typeof(List), new XmlRootAttribute("Users")); - - try - { - StreamWriter writer = new StreamWriter(_dataFilePath); - using (writer) - { - serializer.Serialize(writer, Users); - } - } - catch (Exception) - { - - throw; - } - } - - public XmlDataService() - { - - } - - public XmlDataService(string datafile) - { - _dataFilePath = datafile; - } - } -} diff --git a/DeskHubSharp/Data/DataConfig.cs b/DeskHubSharp/Data/DataConfig.cs index 354c259..abca955 100644 --- a/DeskHubSharp/Data/DataConfig.cs +++ b/DeskHubSharp/Data/DataConfig.cs @@ -8,6 +8,6 @@ namespace DeskHubSharp { class DataConfig { - public string dataConfString = ""; + public static string dataConfString = "https://api.github.com/"; } } diff --git a/DeskHubSharp/DeskHubSharp.csproj b/DeskHubSharp/DeskHubSharp.csproj index 4b9c64c..ff95bab 100644 --- a/DeskHubSharp/DeskHubSharp.csproj +++ b/DeskHubSharp/DeskHubSharp.csproj @@ -71,6 +71,7 @@ MSBuild:Compile + @@ -107,9 +108,8 @@ Code - + - DetailWindow.xaml diff --git a/DeskHubSharp/DetailWindow.xaml b/DeskHubSharp/DetailWindow.xaml index bab7521..16ca90e 100644 --- a/DeskHubSharp/DetailWindow.xaml +++ b/DeskHubSharp/DetailWindow.xaml @@ -10,19 +10,13 @@