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