diff --git a/DevDates API Wrapper/DevDates API Wrapper.csproj b/DevDates API Wrapper/DevDates API Wrapper.csproj new file mode 100644 index 0000000..2f0c008 --- /dev/null +++ b/DevDates API Wrapper/DevDates API Wrapper.csproj @@ -0,0 +1,14 @@ + + + + net7.0 + DevDates_API_Wrapper + enable + enable + + + + + + + diff --git a/DevDates API Wrapper/Wrapper.cs b/DevDates API Wrapper/Wrapper.cs new file mode 100644 index 0000000..ad61b6e --- /dev/null +++ b/DevDates API Wrapper/Wrapper.cs @@ -0,0 +1,344 @@ +using System.Net.Http; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace DevDatesApiWrapper +{ + public class DevDatesApiWrapper + { + private readonly HttpClient _httpClient; + private readonly string _baseUrl = "https://api.devdates.com/"; + + public DevDatesApiWrapper() + { + _httpClient = new HttpClient(); + _httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); + } + + public async Task GetUser(int id) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task GetPhotos(int id) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}/photos"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task GetInterests(int id) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}/interests"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task GetConnectedServices(int id) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}/connected-services"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task GetSexualPreferences(int id) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}/sexual-preferences"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task GetShortUserInfo(int id) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}/short-info"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task GetDetailedUserInfo(int id) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}/detailed-info"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task GetPhoto(int id, int photoId) + { + var response = await _httpClient.GetAsync($"{_baseUrl}users/{id}/photos/{photoId}"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + + public async Task PostUser(int id) + { + var response = await _httpClient.PostAsync($"{_baseUrl}users/{id}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + + } + + public async Task PostPhoto(int id, int photoId) + { + var response = await _httpClient.PostAsync($"{_baseUrl}users/{id}/photos/{photoId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PostInterest(int id, int interestId) + { + var response = await _httpClient.PostAsync($"{_baseUrl}users/{id}/interests/{interestId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PostConnectedService(int id, int connectedServiceId) + { + var response = await _httpClient.PostAsync($"{_baseUrl}users/{id}/connected-services/{connectedServiceId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PostSexualPreference(int id, int sexualPreferenceId) + { + var response = await _httpClient.PostAsync($"{_baseUrl}users/{id}/sexual-preferences/{sexualPreferenceId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PostShortUserInfo(int id) + { + var response = await _httpClient.PostAsync($"{_baseUrl}users/{id}/short-info", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PostDetailedUserInfo(int id) + { + var response = await _httpClient.PostAsync($"{_baseUrl}users/{id}/detailed-info", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PutUser(int id) + { + var response = await _httpClient.PutAsync($"{_baseUrl}users/{id}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + + } + + public async Task PutPhoto(int id, int photoId) + { + var response = await _httpClient.PutAsync($"{_baseUrl}users/{id}/photos/{photoId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PutInterest(int id, int interestId) + { + var response = await _httpClient.PutAsync($"{_baseUrl}users/{id}/interests/{interestId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PutConnectedService(int id, int connectedServiceId) + { + var response = await _httpClient.PutAsync($"{_baseUrl}users/{id}/connected-services/{connectedServiceId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PutSexualPreference(int id, int sexualPreferenceId) + { + var response = await _httpClient.PutAsync($"{_baseUrl}users/{id}/sexual-preferences/{sexualPreferenceId}", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PutShortUserInfo(int id) + { + var response = await _httpClient.PutAsync($"{_baseUrl}users/{id}/short-info", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task PutDetailedUserInfo(int id) + { + var response = await _httpClient.PutAsync($"{_baseUrl}users/{id}/detailed-info", null); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeleteUser(int id) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeletePhoto(int id, int photoId) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}/photos/{photoId}"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeleteInterest(int id, int interestId) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}/interests/{interestId}"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeleteConnectedService(int id, int connectedServiceId) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}/connected-services/{connectedServiceId}"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeleteSexualPreference(int id, int sexualPreferenceId) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}/sexual-preferences/{sexualPreferenceId}"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeleteShortUserInfo(int id) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}/short-info"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeleteDetailedUserInfo(int id) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}/detailed-info"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + public async Task DeleteAll(int id) + { + var response = await _httpClient.DeleteAsync($"{_baseUrl}users/{id}/all"); + response.EnsureSuccessStatusCode(); + + var json = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(json); + } + + + + + + + + public class User + { + public ShortUserInfo ShortInfo { get; set; } + public DetailedUserInfo DetailedInfo { get; set; } + public ConnectedService[] ConnectedServices { get; set; } + } + + public record ShortUserInfo + { + public string Name { get; set; } + public int Age { get; set; } + public string Gender { get; set; } + public SexualPreference[] SexualPreferences { get; set; } + public Photo[] Photos { get; set; } + } + + public record DetailedUserInfo + { + public ShortUserInfo? ShortInfo { get; set; } + public string Bio { get; set; } + public Interest[] Interests { get; set; } + } + + public record ConnectedService + { + public string Name { get; set; } + public string Url { get; set; } + } + + public record SexualPreference + { + public string Gender { get; set; } + public string Orientation { get; set; } + } + + public record Photo + { + public string Url { get; set; } + public string Description { get; set; } + } + + public record Interest + { + public string Name { get; set; } + public string Category { get; set; } + } + } +} diff --git a/DevDates.Model/ViewModels/SexualPreference.cs b/DevDates.Model/ViewModels/SexualPreference.cs index 292a7c0..c71978c 100644 --- a/DevDates.Model/ViewModels/SexualPreference.cs +++ b/DevDates.Model/ViewModels/SexualPreference.cs @@ -5,6 +5,7 @@ /// public class SexualPreference { + public int Id { get; set; } public string DisplayName { get; init; } public Photo Photo { get; init; } } diff --git a/DevDatesAPI.sln b/DevDatesAPI.sln index b87de89..0748eff 100644 --- a/DevDatesAPI.sln +++ b/DevDatesAPI.sln @@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevDatesAPI", "DevDatesAPI\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevDates.Model", "DevDates.Model\DevDates.Model.csproj", "{2FD5579F-464F-432B-B0DD-510B636CC921}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wrapper", "Wrapper\Wrapper.csproj", "{9E27A2E5-7AB0-4C43-9F31-5CAE78EC1A1C}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevDates.DBModel", "DevDates.DBModel\DevDates.DBModel.csproj", "{59BD3631-3C1A-4487-9CE6-36B8E1CC36FC}" EndProject Global @@ -23,6 +25,14 @@ Global {2FD5579F-464F-432B-B0DD-510B636CC921}.Debug|Any CPU.Build.0 = Debug|Any CPU {2FD5579F-464F-432B-B0DD-510B636CC921}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FD5579F-464F-432B-B0DD-510B636CC921}.Release|Any CPU.Build.0 = Release|Any CPU + {9E27A2E5-7AB0-4C43-9F31-5CAE78EC1A1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E27A2E5-7AB0-4C43-9F31-5CAE78EC1A1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E27A2E5-7AB0-4C43-9F31-5CAE78EC1A1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E27A2E5-7AB0-4C43-9F31-5CAE78EC1A1C}.Release|Any CPU.Build.0 = Release|Any CPU + {BA513A6A-18E9-41F6-A1EB-B026D2041CE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA513A6A-18E9-41F6-A1EB-B026D2041CE1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA513A6A-18E9-41F6-A1EB-B026D2041CE1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA513A6A-18E9-41F6-A1EB-B026D2041CE1}.Release|Any CPU.Build.0 = Release|Any CPU {59BD3631-3C1A-4487-9CE6-36B8E1CC36FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {59BD3631-3C1A-4487-9CE6-36B8E1CC36FC}.Debug|Any CPU.Build.0 = Debug|Any CPU {59BD3631-3C1A-4487-9CE6-36B8E1CC36FC}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/DevDatesAPI/Controllers/InterestController.cs b/DevDatesAPI/Controllers/InterestController.cs index 7f5c519..ffc9b38 100644 --- a/DevDatesAPI/Controllers/InterestController.cs +++ b/DevDatesAPI/Controllers/InterestController.cs @@ -41,5 +41,7 @@ public Interest GetInterestsInfo(int id) }).ToArray() }).ToArray()[0]; } + + } } \ No newline at end of file diff --git a/DevDatesAPI/Controllers/SexualPreferencesController.cs b/DevDatesAPI/Controllers/SexualPreferencesController.cs index c75ef72..112a15d 100644 --- a/DevDatesAPI/Controllers/SexualPreferencesController.cs +++ b/DevDatesAPI/Controllers/SexualPreferencesController.cs @@ -2,12 +2,13 @@ using Microsoft.AspNetCore.Mvc; using System.Xml.Linq; using DevDates.DBModel.Data; +using DevDates.DBModel.Data.Models; namespace DevDatesAPI.Controllers { [ApiController] [Route("[controller]")] - public class SexualPreferencesController + public class SexualPreferencesController : ControllerBase { private DevDatesDbContext _context; public SexualPreferencesController(DevDatesDbContext context) @@ -15,40 +16,103 @@ public SexualPreferencesController(DevDatesDbContext context) _context = context; } + + [HttpGet("preferences", Name = "GetAllPreferences")] public SexualPreference[] GetAllPreferences() { return _context.Genders.Select(g => new SexualPreference() { + Id = g.Id, DisplayName = g.DisplayName }).ToArray(); } + + [HttpGet("preference/{id}", Name = "GetPreference")] public SexualPreference GetPreference(int id) { return _context.Genders.Where(g => g.Id == id).Select(g => new SexualPreference() { + Id = g.Id, DisplayName = g.DisplayName }).ToArray()[0]; } + + [HttpDelete("preference/delete/{id}")] - public void Delete(int id) + public IActionResult Delete(int id) { - // TODO + /* + var context = _context.Genders.Where(g => g.Id == id); + + _context.Remove(context); + _context.SaveChanges(); + */ + + var context = _context.Genders.FirstOrDefault(g => g.Id == id); + + if (context == null) + { + return NotFound(); + } + + _context.Remove(context); + _context.SaveChanges(); + + return NoContent(); } + + [HttpPost("preference/post/{id}")] - public void Post() + public IActionResult Post([FromBody] SexualPreference preference) { - // TODO + //var context = _context.Genders.Find(g => g.Id == id); + + if (preference == null) + { + return BadRequest(); + } + + var gender = new Gender + { + DisplayName = preference.DisplayName + }; + + _context.Genders.Add(gender); + _context.SaveChanges(); + + return CreatedAtRoute("GetPreference", new { id = gender.Id }, preference); } + + [HttpPut("preference/put/{id}")] - public void put(int id) + public IActionResult put(int id, [FromBody] SexualPreference preference) { - // TODO + //var context = _context.Genders.Find(g => g.Id == id); + + if (preference == null || id != preference.Id) + { + return BadRequest(); + } + + var gender = _context.Genders.FirstOrDefault(g => g.Id == id); + + if (gender == null) + { + return NotFound(); + } + + gender.DisplayName = preference.DisplayName; + + _context.Genders.Update(gender); + _context.SaveChanges(); + + return NoContent(); } } -} +} \ No newline at end of file