diff --git a/src/Dto/ActivityDto.cs b/src/Dto/ActivityDto.cs
new file mode 100644
index 0000000..e69de29
diff --git a/src/Dto/AthleteDto.cs b/src/Dto/AthleteDto.cs
new file mode 100644
index 0000000..cbae984
--- /dev/null
+++ b/src/Dto/AthleteDto.cs
@@ -0,0 +1,21 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Dto;
+
+public class AthleteDto
+{
+ public int IdAthlete { get; set; }
+ [MaxLength(100)]
+ public required string Username { get; set; }
+ [MaxLength(150)]
+ public required string LastName { get; set; }
+ [MaxLength(100)]
+ public required string FirstName { get; set; }
+ public required string Email { get; set; }
+ public required string Sexe { get; set; }
+ public double Lenght { get; set; }
+ public float Weight { get; set; }
+ public required string Password { get; set; }
+ public DateTime DateOfBirth { get; set; }
+ public bool IsCoach { get; set; }
+}
diff --git a/src/Dto/DataSourceDto.cs b/src/Dto/DataSourceDto.cs
new file mode 100644
index 0000000..e69de29
diff --git a/src/Dto/Dto.csproj b/src/Dto/Dto.csproj
new file mode 100644
index 0000000..bb23fb7
--- /dev/null
+++ b/src/Dto/Dto.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/src/Dto/HeartRateDto.cs b/src/Dto/HeartRateDto.cs
new file mode 100644
index 0000000..e69de29
diff --git a/src/Dto/NotificationDto.cs b/src/Dto/NotificationDto.cs
new file mode 100644
index 0000000..e69de29
diff --git a/src/Dto/StatisticDto.cs b/src/Dto/StatisticDto.cs
new file mode 100644
index 0000000..e69de29
diff --git a/src/Dto/TrainingDto.cs b/src/Dto/TrainingDto.cs
new file mode 100644
index 0000000..e69de29
diff --git a/src/HeartTrack.sln b/src/HeartTrack.sln
index 6ecaf7b..ddc2c8a 100644
--- a/src/HeartTrack.sln
+++ b/src/HeartTrack.sln
@@ -15,6 +15,20 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTestEntities", "Test
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTestRelationships", "Tests\ConsoleTestRelationships\ConsoleTestRelationships.csproj", "{2D166FAD-4934-474B-96A8-6C0635156EC2}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dto", "Dto\Dto.csproj", "{562019BC-0F61-41B0-9BAE-259B92C6BFBA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeartTrackAPI", "HeartTrackAPI\HeartTrackAPI.csproj", "{C1C2EAC3-3347-466B-BFB6-2A9F11A3AE12}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{F80C60E1-1E06-46C2-96DE-42B1C7DE65BC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StubbedDtoLib", "StubbedDtoLib\StubbedDtoLib.csproj", "{87F65E21-0555-4772-88B4-C8B43146A02C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestsAPI", "TestsAPI", "{30FC2BE9-7397-445A-84AD-043CE70F4281}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientTests", "Tests\TestsAPI\ClientTests\ClientTests.csproj", "{9E4D3AC5-E6CA-4753-BD96-BF5EE793931A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestsXUnit", "Tests\TestsAPI\TestsXUnit\TestsXUnit.csproj", "{44C367DC-5FE0-4CF2-9E76-A0282E931853}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -44,9 +58,36 @@ Global
{2D166FAD-4934-474B-96A8-6C0635156EC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D166FAD-4934-474B-96A8-6C0635156EC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D166FAD-4934-474B-96A8-6C0635156EC2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {562019BC-0F61-41B0-9BAE-259B92C6BFBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {562019BC-0F61-41B0-9BAE-259B92C6BFBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {562019BC-0F61-41B0-9BAE-259B92C6BFBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {562019BC-0F61-41B0-9BAE-259B92C6BFBA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C1C2EAC3-3347-466B-BFB6-2A9F11A3AE12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C1C2EAC3-3347-466B-BFB6-2A9F11A3AE12}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C1C2EAC3-3347-466B-BFB6-2A9F11A3AE12}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C1C2EAC3-3347-466B-BFB6-2A9F11A3AE12}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F80C60E1-1E06-46C2-96DE-42B1C7DE65BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F80C60E1-1E06-46C2-96DE-42B1C7DE65BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F80C60E1-1E06-46C2-96DE-42B1C7DE65BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F80C60E1-1E06-46C2-96DE-42B1C7DE65BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87F65E21-0555-4772-88B4-C8B43146A02C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87F65E21-0555-4772-88B4-C8B43146A02C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87F65E21-0555-4772-88B4-C8B43146A02C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87F65E21-0555-4772-88B4-C8B43146A02C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E4D3AC5-E6CA-4753-BD96-BF5EE793931A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E4D3AC5-E6CA-4753-BD96-BF5EE793931A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E4D3AC5-E6CA-4753-BD96-BF5EE793931A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E4D3AC5-E6CA-4753-BD96-BF5EE793931A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {44C367DC-5FE0-4CF2-9E76-A0282E931853}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {44C367DC-5FE0-4CF2-9E76-A0282E931853}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {44C367DC-5FE0-4CF2-9E76-A0282E931853}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {44C367DC-5FE0-4CF2-9E76-A0282E931853}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{477D2129-A6C9-4FF8-8BE9-5E9E8E5282F8} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
{2D166FAD-4934-474B-96A8-6C0635156EC2} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
+ {30FC2BE9-7397-445A-84AD-043CE70F4281} = {2B227C67-3BEC-4A83-BDA0-F3918FBC0D18}
+ {9E4D3AC5-E6CA-4753-BD96-BF5EE793931A} = {30FC2BE9-7397-445A-84AD-043CE70F4281}
+ {44C367DC-5FE0-4CF2-9E76-A0282E931853} = {30FC2BE9-7397-445A-84AD-043CE70F4281}
EndGlobalSection
EndGlobal
diff --git a/src/HeartTrackAPI/Controllers/AthleteController.cs b/src/HeartTrackAPI/Controllers/AthleteController.cs
new file mode 100644
index 0000000..7180759
--- /dev/null
+++ b/src/HeartTrackAPI/Controllers/AthleteController.cs
@@ -0,0 +1,26 @@
+using Dto;
+using Microsoft.AspNetCore.Mvc;
+using Shared;
+
+[ApiController]
+[Route("api/athletes")]
+public class AthletesController : ControllerBase
+{
+ private readonly ILogger _logger;
+ IAthleteService _stubbedDto;
+ private const int DEFAULT_INDEX = 0, DEFAULT_COUNT = 5;
+
+ public AthletesController(ILogger logger, IAthleteService athletesService)
+ {
+ _logger = logger;
+ _stubbedDto = athletesService;
+ }
+
+ [HttpGet("all")]
+ [ProducesResponseType(typeof(IEnumerable), 200)]
+ public async Task GetAllAthletesAsync()
+ {
+ var athletes = await _stubbedDto.GetAllAthletesAsync();
+ return Ok(athletes);
+ }
+}
\ No newline at end of file
diff --git a/src/HeartTrackAPI/HeartTrackAPI.csproj b/src/HeartTrackAPI/HeartTrackAPI.csproj
new file mode 100644
index 0000000..0a86543
--- /dev/null
+++ b/src/HeartTrackAPI/HeartTrackAPI.csproj
@@ -0,0 +1,19 @@
+
+
+
+ net8.0
+ enable
+ enable
+ true
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/HeartTrackAPI/HeartTrackAPI.http b/src/HeartTrackAPI/HeartTrackAPI.http
new file mode 100644
index 0000000..97c9a67
--- /dev/null
+++ b/src/HeartTrackAPI/HeartTrackAPI.http
@@ -0,0 +1,6 @@
+@HeartTrackAPI_HostAddress = http://localhost:5030
+
+GET {{HeartTrackAPI_HostAddress}}/weatherforecast/
+Accept: application/json
+
+###
diff --git a/src/HeartTrackAPI/Program.cs b/src/HeartTrackAPI/Program.cs
new file mode 100644
index 0000000..fda9a7d
--- /dev/null
+++ b/src/HeartTrackAPI/Program.cs
@@ -0,0 +1,44 @@
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+builder.Services.AddEndpointsApiExplorer();
+builder.Services.AddSwaggerGen();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (app.Environment.IsDevelopment())
+{
+ app.UseSwagger();
+ app.UseSwaggerUI();
+}
+
+app.UseHttpsRedirection();
+
+var summaries = new[]
+{
+ "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
+};
+
+app.MapGet("/weatherforecast", () =>
+{
+ var forecast = Enumerable.Range(1, 5).Select(index =>
+ new WeatherForecast
+ (
+ DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
+ Random.Shared.Next(-20, 55),
+ summaries[Random.Shared.Next(summaries.Length)]
+ ))
+ .ToArray();
+ return forecast;
+})
+.WithName("GetWeatherForecast")
+.WithOpenApi();
+
+app.Run();
+
+record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
+{
+ public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
+}
diff --git a/src/HeartTrackAPI/Properties/launchSettings.json b/src/HeartTrackAPI/Properties/launchSettings.json
new file mode 100644
index 0000000..7156f3d
--- /dev/null
+++ b/src/HeartTrackAPI/Properties/launchSettings.json
@@ -0,0 +1,41 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:13881",
+ "sslPort": 44333
+ }
+ },
+ "profiles": {
+ "http": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "http://localhost:5030",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "https://localhost:7233;http://localhost:5030",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/src/HeartTrackAPI/appsettings.Development.json b/src/HeartTrackAPI/appsettings.Development.json
new file mode 100644
index 0000000..ff66ba6
--- /dev/null
+++ b/src/HeartTrackAPI/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/src/HeartTrackAPI/appsettings.json b/src/HeartTrackAPI/appsettings.json
new file mode 100644
index 0000000..4d56694
--- /dev/null
+++ b/src/HeartTrackAPI/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/src/Shared/AthleteOrderCriteria.cs b/src/Shared/AthleteOrderCriteria.cs
new file mode 100644
index 0000000..2a7085d
--- /dev/null
+++ b/src/Shared/AthleteOrderCriteria.cs
@@ -0,0 +1,11 @@
+namespace Shared
+{
+ public enum AthleteOrderCriteria
+ {
+ None,
+ ByUsername,
+ ByEmail,
+ ByIsCoach
+ }
+}
+
diff --git a/src/Shared/IAthleteService.cs b/src/Shared/IAthleteService.cs
new file mode 100644
index 0000000..17ff7f2
--- /dev/null
+++ b/src/Shared/IAthleteService.cs
@@ -0,0 +1,23 @@
+using Dto;
+
+namespace Shared;
+
+public interface IAthleteService
+{
+ public Task> GetAllAthletesAsync();
+ public Task> GetSomeAthletesAsync(int index, int count, AthleteOrderCriteria criterium);
+ public Task GetAthleteByIdAsync(int id);
+ public Task> GetAthleteByUsernameAsync(string username, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesByEmailAsync(string email, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesByFirstNameAsync(string firstName, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesByLastNameAsync(string lastName, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesBySexeAsync(string sexe, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesByLenghtAsync(double lenght, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesByWeightAsync(float weight, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesByDateOfBirthAsync(DateTime dateOfBirth, int index, int count, AthleteOrderCriteria criterium);
+ public Task> GetAthletesByIsCoachAsync(bool isCoach, int index, int count, AthleteOrderCriteria criterium);
+ public Task AddAthleteAsync(AthleteDto athlete, AthleteOrderCriteria criterium);
+ public Task UpdateAthleteAsync(int id, AthleteDto athlete, AthleteOrderCriteria criterium);
+ public Task DeleteAthleteAsync(int id, AthleteOrderCriteria criterium);
+
+}
\ No newline at end of file
diff --git a/src/Shared/Shared.csproj b/src/Shared/Shared.csproj
new file mode 100644
index 0000000..7d742ab
--- /dev/null
+++ b/src/Shared/Shared.csproj
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/src/StubbedDtoLib/AthleteStubDto.cs b/src/StubbedDtoLib/AthleteStubDto.cs
new file mode 100644
index 0000000..1b501c7
--- /dev/null
+++ b/src/StubbedDtoLib/AthleteStubDto.cs
@@ -0,0 +1,135 @@
+using System.ComponentModel;
+using Dto;
+using Share;
+
+namespace StubbedDtoLib;
+
+public class AthleteStubDto : IAthleteService
+{
+ private static List AthleteList = new List()
+ {
+ new AthleteDto { IdAthlete = 1, Username = "Doe", LastName = "John", FirstName = "Doe", Email = "john.doe@example.com", Password = "password123", Sexe = "M", Lenght = 1.80, Weight = 75, DateOfBirth = new DateTime(), IsCoach = true },
+ new AthleteDto { IdAthlete = 2, Username = "Smith", LastName = "Jane", FirstName = "Smith", Email = "jane.smith@example.com", Password = "secure456", Sexe = "F", Lenght = 1.65, Weight = 60, DateOfBirth = new DateTime(), IsCoach = false },
+ new AthleteDto { IdAthlete = 3, Username = "Martin", LastName = "Paul", FirstName = "Martin", Email = "paul.martin@example.com", Password = "super789", Sexe = "M", Lenght = 1.75, Weight = 68, DateOfBirth = new DateTime(), IsCoach = true },
+ new AthleteDto { IdAthlete = 4, Username = "Brown", LastName = "Anna", FirstName = "Brown", Email = "anna.brown@example.com", Password = "test000", Sexe = "M", Lenght = 1.70, Weight = 58, DateOfBirth = new DateTime(), IsCoach = false },
+ new AthleteDto { IdAthlete = 5, Username = "Lee", LastName = "Bruce", FirstName = "Lee", Email = "bruce.lee@example.com", Password = "hello321", Sexe = "M", Lenght = 2.0, Weight = 90, DateOfBirth = new DateTime(), IsCoach = false }
+ };
+
+ public async Task> GetAllAthletesAsync()
+ {
+ return AthleteList;
+ }
+
+ public async Task> GetSomeAthletesAsync(int index, int count)
+ {
+ return AthleteList.Skip(count*index).Take(count);
+ }
+
+ public async Task GetAthleteByIdAsync(int id) => AthleteList.Find(a => a.IdAthlete == id);
+
+ public async Task> GetAthleteByUsernameAsync(string username, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.Username.Contains(username, StringComparison.OrdinalIgnoreCase)).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesByEmailAsync(string email, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.Email.Contains(email, StringComparison.OrdinalIgnoreCase)).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesByFirstNameAsync(string firstName, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.FirstName.Contains(firstName, StringComparison.OrdinalIgnoreCase)).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesByLastNameAsync(string lastName, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.LastName.Contains(lastName, StringComparison.OrdinalIgnoreCase)).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesBySexeAsync(string sexe, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.Sexe.Contains(sexe, StringComparison.OrdinalIgnoreCase)).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesByLenghtAsync(double lenght, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.Lenght == lenght).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesByWeightAsync(float weight, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.Weight == weight).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesByDateOfBirthAsync(DateTime dateOfBirth, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.DateOfBirth == dateOfBirth).Skip(index*count).Take(count);
+ }
+
+ public async Task> GetAthletesByIsCoachAsync(bool isCoach, int index, int count)
+ {
+ return AthleteList.FindAll(a => a.IsCoach == isCoach).Skip(index*count).Take(count);
+ }
+
+ public async Task AddAthleteAsync(AthleteDto athlete)
+ {
+ var newAthlete = new AthleteDto()
+ {
+ IdAthlete = AthleteList.Max(a => a.IdAthlete) + 1,
+ Username = athlete.Username,
+ LastName = athlete.LastName,
+ FirstName = athlete.FirstName,
+ Email = athlete.Email,
+ Password = athlete.Password,
+ Sexe = athlete.Sexe,
+ Lenght = athlete.Lenght,
+ Weight = athlete.Weight,
+ DateOfBirth = athlete.DateOfBirth,
+ IsCoach = athlete.IsCoach
+ };
+ AthleteList.Add(newAthlete);
+ return newAthlete;
+ }
+
+ public async Task UpdateAthleteAsync(int id, AthleteDto athlete)
+ {
+ var theId = AthleteList.FindIndex(a => a.IdAthlete == id);
+ if (theId >= 0)
+ {
+ var a = AthleteList[theId];
+
+ a.Username = athlete.Username;
+ a.LastName = athlete.LastName;
+ a.FirstName = athlete.FirstName;
+ a.Email = athlete.Email;
+ a.Password = athlete.Password;
+ a.Sexe = athlete.Sexe;
+ a.Lenght = athlete.Lenght;
+ a.Weight = athlete.Weight;
+ a.DateOfBirth = athlete.DateOfBirth;
+ a.IsCoach = athlete.IsCoach;
+
+ AthleteList[theId] = a;
+
+ return a;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public async Task DeleteAthleteAsync(int id)
+ {
+ var theId = AthleteList.FindIndex(a => a.IdAthlete == id);
+ if (theId >= 0)
+ {
+ AthleteList.RemoveAt(theId);
+ return true;
+ } else
+ {
+ return false;
+ }
+ }
+}
diff --git a/src/StubbedDtoLib/StubbedDtoLib.csproj b/src/StubbedDtoLib/StubbedDtoLib.csproj
new file mode 100644
index 0000000..581f491
--- /dev/null
+++ b/src/StubbedDtoLib/StubbedDtoLib.csproj
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/src/Tests/TestsAPI/ClientTests/ClientTests.csproj b/src/Tests/TestsAPI/ClientTests/ClientTests.csproj
new file mode 100644
index 0000000..206b89a
--- /dev/null
+++ b/src/Tests/TestsAPI/ClientTests/ClientTests.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/src/Tests/TestsAPI/ClientTests/Program.cs b/src/Tests/TestsAPI/ClientTests/Program.cs
new file mode 100644
index 0000000..83fa4f4
--- /dev/null
+++ b/src/Tests/TestsAPI/ClientTests/Program.cs
@@ -0,0 +1,2 @@
+// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");
diff --git a/src/Tests/TestsAPI/TestsXUnit/GlobalUsings.cs b/src/Tests/TestsAPI/TestsXUnit/GlobalUsings.cs
new file mode 100644
index 0000000..8c927eb
--- /dev/null
+++ b/src/Tests/TestsAPI/TestsXUnit/GlobalUsings.cs
@@ -0,0 +1 @@
+global using Xunit;
\ No newline at end of file
diff --git a/src/Tests/TestsAPI/TestsXUnit/TestsXUnit.csproj b/src/Tests/TestsAPI/TestsXUnit/TestsXUnit.csproj
new file mode 100644
index 0000000..22b0134
--- /dev/null
+++ b/src/Tests/TestsAPI/TestsXUnit/TestsXUnit.csproj
@@ -0,0 +1,25 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+ false
+ true
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
diff --git a/src/Tests/TestsAPI/TestsXUnit/UnitTest1.cs b/src/Tests/TestsAPI/TestsXUnit/UnitTest1.cs
new file mode 100644
index 0000000..70d745a
--- /dev/null
+++ b/src/Tests/TestsAPI/TestsXUnit/UnitTest1.cs
@@ -0,0 +1,10 @@
+namespace TestsXUnit;
+
+public class UnitTest1
+{
+ [Fact]
+ public void Test1()
+ {
+
+ }
+}
\ No newline at end of file