diff --git a/Marechai.App/Services/Client/ApiClient.cs b/Marechai.App/Services/Client/ApiClient.cs
index 3738fdec..c03efe3c 100644
--- a/Marechai.App/Services/Client/ApiClient.cs
+++ b/Marechai.App/Services/Client/ApiClient.cs
@@ -3,12 +3,9 @@
using Marechai.App.Auth;
using Marechai.App.Books;
using Marechai.App.BrowserTests;
-using Marechai.App.ByLetter;
-using Marechai.App.ByYear;
using Marechai.App.Companies;
using Marechai.App.Computers;
using Marechai.App.Consoles;
-using Marechai.App.Count;
using Marechai.App.Countries;
using Marechai.App.Currencies;
using Marechai.App.Documents;
@@ -25,10 +22,8 @@ using Marechai.App.Machines;
using Marechai.App.Magazines;
using Marechai.App.MagazinesByMachine;
using Marechai.App.MagazinesByMachineFamily;
-using Marechai.App.MaximumYear;
using Marechai.App.Medias;
using Marechai.App.MemoriesByMachine;
-using Marechai.App.MinimumYear;
using Marechai.App.News;
using Marechai.App.People;
using Marechai.App.PeopleByBook;
@@ -79,16 +74,6 @@ namespace Marechai.App
{
get => new global::Marechai.App.BrowserTests.BrowserTestsRequestBuilder(PathParameters, RequestAdapter);
}
- /// The byLetter property
- public global::Marechai.App.ByLetter.ByLetterRequestBuilder ByLetter
- {
- get => new global::Marechai.App.ByLetter.ByLetterRequestBuilder(PathParameters, RequestAdapter);
- }
- /// The byYear property
- public global::Marechai.App.ByYear.ByYearRequestBuilder ByYear
- {
- get => new global::Marechai.App.ByYear.ByYearRequestBuilder(PathParameters, RequestAdapter);
- }
/// The companies property
public global::Marechai.App.Companies.CompaniesRequestBuilder Companies
{
@@ -104,11 +89,6 @@ namespace Marechai.App
{
get => new global::Marechai.App.Consoles.ConsolesRequestBuilder(PathParameters, RequestAdapter);
}
- /// The count property
- public global::Marechai.App.Count.CountRequestBuilder Count
- {
- get => new global::Marechai.App.Count.CountRequestBuilder(PathParameters, RequestAdapter);
- }
/// The countries property
public global::Marechai.App.Countries.CountriesRequestBuilder Countries
{
@@ -189,11 +169,6 @@ namespace Marechai.App
{
get => new global::Marechai.App.MagazinesByMachineFamily.MagazinesByMachineFamilyRequestBuilder(PathParameters, RequestAdapter);
}
- /// The maximumYear property
- public global::Marechai.App.MaximumYear.MaximumYearRequestBuilder MaximumYear
- {
- get => new global::Marechai.App.MaximumYear.MaximumYearRequestBuilder(PathParameters, RequestAdapter);
- }
/// The medias property
public global::Marechai.App.Medias.MediasRequestBuilder Medias
{
@@ -204,11 +179,6 @@ namespace Marechai.App
{
get => new global::Marechai.App.MemoriesByMachine.MemoriesByMachineRequestBuilder(PathParameters, RequestAdapter);
}
- /// The minimumYear property
- public global::Marechai.App.MinimumYear.MinimumYearRequestBuilder MinimumYear
- {
- get => new global::Marechai.App.MinimumYear.MinimumYearRequestBuilder(PathParameters, RequestAdapter);
- }
/// The news property
public global::Marechai.App.News.NewsRequestBuilder News
{
diff --git a/Marechai.App/Services/Client/Computers/ComputersRequestBuilder.cs b/Marechai.App/Services/Client/Computers/ComputersRequestBuilder.cs
index 784292ea..ac12ce9d 100644
--- a/Marechai.App/Services/Client/Computers/ComputersRequestBuilder.cs
+++ b/Marechai.App/Services/Client/Computers/ComputersRequestBuilder.cs
@@ -1,5 +1,10 @@
//
#pragma warning disable CS0618
+using Marechai.App.Computers.ByLetter;
+using Marechai.App.Computers.ByYear;
+using Marechai.App.Computers.Count;
+using Marechai.App.Computers.MaximumYear;
+using Marechai.App.Computers.MinimumYear;
using Marechai.App.Models;
using Microsoft.Kiota.Abstractions.Extensions;
using Microsoft.Kiota.Abstractions.Serialization;
@@ -17,6 +22,31 @@ namespace Marechai.App.Computers
[global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
public partial class ComputersRequestBuilder : BaseRequestBuilder
{
+ /// The byLetter property
+ public global::Marechai.App.Computers.ByLetter.ByLetterRequestBuilder ByLetter
+ {
+ get => new global::Marechai.App.Computers.ByLetter.ByLetterRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The byYear property
+ public global::Marechai.App.Computers.ByYear.ByYearRequestBuilder ByYear
+ {
+ get => new global::Marechai.App.Computers.ByYear.ByYearRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The count property
+ public global::Marechai.App.Computers.Count.CountRequestBuilder Count
+ {
+ get => new global::Marechai.App.Computers.Count.CountRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The maximumYear property
+ public global::Marechai.App.Computers.MaximumYear.MaximumYearRequestBuilder MaximumYear
+ {
+ get => new global::Marechai.App.Computers.MaximumYear.MaximumYearRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The minimumYear property
+ public global::Marechai.App.Computers.MinimumYear.MinimumYearRequestBuilder MinimumYear
+ {
+ get => new global::Marechai.App.Computers.MinimumYear.MinimumYearRequestBuilder(PathParameters, RequestAdapter);
+ }
///
/// Instantiates a new and sets the default values.
///
diff --git a/Marechai.App/Services/Client/Consoles/ConsolesRequestBuilder.cs b/Marechai.App/Services/Client/Consoles/ConsolesRequestBuilder.cs
index a4cd09e1..4f705744 100644
--- a/Marechai.App/Services/Client/Consoles/ConsolesRequestBuilder.cs
+++ b/Marechai.App/Services/Client/Consoles/ConsolesRequestBuilder.cs
@@ -1,5 +1,10 @@
//
#pragma warning disable CS0618
+using Marechai.App.Consoles.ByLetter;
+using Marechai.App.Consoles.ByYear;
+using Marechai.App.Consoles.Count;
+using Marechai.App.Consoles.MaximumYear;
+using Marechai.App.Consoles.MinimumYear;
using Marechai.App.Models;
using Microsoft.Kiota.Abstractions.Extensions;
using Microsoft.Kiota.Abstractions.Serialization;
@@ -17,6 +22,31 @@ namespace Marechai.App.Consoles
[global::System.CodeDom.Compiler.GeneratedCode("Kiota", "1.0.0")]
public partial class ConsolesRequestBuilder : BaseRequestBuilder
{
+ /// The byLetter property
+ public global::Marechai.App.Consoles.ByLetter.ByLetterRequestBuilder ByLetter
+ {
+ get => new global::Marechai.App.Consoles.ByLetter.ByLetterRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The byYear property
+ public global::Marechai.App.Consoles.ByYear.ByYearRequestBuilder ByYear
+ {
+ get => new global::Marechai.App.Consoles.ByYear.ByYearRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The count property
+ public global::Marechai.App.Consoles.Count.CountRequestBuilder Count
+ {
+ get => new global::Marechai.App.Consoles.Count.CountRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The maximumYear property
+ public global::Marechai.App.Consoles.MaximumYear.MaximumYearRequestBuilder MaximumYear
+ {
+ get => new global::Marechai.App.Consoles.MaximumYear.MaximumYearRequestBuilder(PathParameters, RequestAdapter);
+ }
+ /// The minimumYear property
+ public global::Marechai.App.Consoles.MinimumYear.MinimumYearRequestBuilder MinimumYear
+ {
+ get => new global::Marechai.App.Consoles.MinimumYear.MinimumYearRequestBuilder(PathParameters, RequestAdapter);
+ }
///
/// Instantiates a new and sets the default values.
///
diff --git a/Marechai.App/Services/Client/kiota-lock.json b/Marechai.App/Services/Client/kiota-lock.json
index b9b0d46d..f726eb09 100644
--- a/Marechai.App/Services/Client/kiota-lock.json
+++ b/Marechai.App/Services/Client/kiota-lock.json
@@ -1,5 +1,5 @@
{
- "descriptionHash": "4C4317F1318B3D4CA2225D2F84196E63FE3991CAA0B4FAC3BDA2432C98D3457223C321CFD97E2BC392D20DCE9E265F204F4B0E90C7FE300BC876152A4FC07520",
+ "descriptionHash": "1CBF8A151B68ADF959BF4CE97533C13CE3C5B8E0425C6F097F0EF8A5308B53C6DA208B6B18CF8A0B949DD033B070BB2A4B530F0F64BBBAA487D86887990865AF",
"descriptionLocation": "http://localhost:5023/openapi/v1.json",
"lockFileVersion": "1.0.0",
"kiotaVersion": "1.29.0",
diff --git a/Marechai.App/Services/ComputersService.cs b/Marechai.App/Services/ComputersService.cs
new file mode 100644
index 00000000..67ce4e78
--- /dev/null
+++ b/Marechai.App/Services/ComputersService.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.Kiota.Abstractions.Serialization;
+
+namespace Marechai.App.Services;
+
+///
+/// Service for fetching and managing computers from the Marechai API
+///
+public class ComputersService
+{
+ private readonly ApiClient _apiClient;
+ private readonly ILogger _logger;
+
+ public ComputersService(ApiClient apiClient, ILogger logger)
+ {
+ _apiClient = apiClient;
+ _logger = logger;
+ }
+
+ ///
+ /// Fetches the total count of computers from the API
+ ///
+ /// Total number of computers, or 0 if API call fails
+ public async Task GetComputersCountAsync()
+ {
+ try
+ {
+ _logger.LogInformation("Fetching computers count from API");
+ UntypedNode result = await _apiClient.Computers.Count.GetAsync();
+
+ // Extract integer value from UntypedNode
+ // UntypedNode wraps a JsonElement, we need to parse it
+ int count = ExtractIntFromUntypedNode(result);
+ _logger.LogInformation("Successfully fetched computers count: {Count}", count);
+
+ return count;
+ }
+ catch(Exception ex)
+ {
+ _logger.LogError(ex, "Error fetching computers count from API");
+
+ return 0;
+ }
+ }
+
+ ///
+ /// Fetches the minimum year of computers from the API
+ ///
+ /// Minimum year, or 0 if API call fails
+ public async Task GetMinimumYearAsync()
+ {
+ try
+ {
+ _logger.LogInformation("Fetching minimum year from API");
+ UntypedNode result = await _apiClient.Computers.MinimumYear.GetAsync();
+
+ // Extract integer value from UntypedNode
+ int year = ExtractIntFromUntypedNode(result);
+ _logger.LogInformation("Successfully fetched minimum year: {Year}", year);
+
+ return year;
+ }
+ catch(Exception ex)
+ {
+ _logger.LogError(ex, "Error fetching minimum year from API");
+
+ return 0;
+ }
+ }
+
+ ///
+ /// Fetches the maximum year of computers from the API
+ ///
+ /// Maximum year, or 0 if API call fails
+ public async Task GetMaximumYearAsync()
+ {
+ try
+ {
+ _logger.LogInformation("Fetching maximum year from API");
+ UntypedNode result = await _apiClient.Computers.MaximumYear.GetAsync();
+
+ // Extract integer value from UntypedNode
+ int year = ExtractIntFromUntypedNode(result);
+ _logger.LogInformation("Successfully fetched maximum year: {Year}", year);
+
+ return year;
+ }
+ catch(Exception ex)
+ {
+ _logger.LogError(ex, "Error fetching maximum year from API");
+
+ return 0;
+ }
+ }
+
+ ///
+ /// Helper method to extract an integer from an UntypedNode
+ ///
+ private int ExtractIntFromUntypedNode(UntypedNode node)
+ {
+ if(node == null) return 0;
+
+ try
+ {
+ // Cast to UntypedInteger to access the Value property
+ if(node is UntypedInteger intNode) return intNode.GetValue();
+
+ // Fallback: try to parse ToString() result
+ var stringValue = node.ToString();
+
+ if(!string.IsNullOrWhiteSpace(stringValue) && int.TryParse(stringValue, out int result)) return result;
+
+ return 0;
+ }
+ catch
+ {
+ return 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Marechai.Server/Controllers/ComputersController.cs b/Marechai.Server/Controllers/ComputersController.cs
index 5faa08fe..0a2df10f 100644
--- a/Marechai.Server/Controllers/ComputersController.cs
+++ b/Marechai.Server/Controllers/ComputersController.cs
@@ -40,13 +40,13 @@ namespace Marechai.Server.Controllers;
[ApiController]
public class ComputersController(MarechaiContext context) : ControllerBase
{
- [HttpGet("/count")]
+ [HttpGet("count")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public Task GetComputersCountAsync() => context.Machines.CountAsync(c => c.Type == MachineType.Computer);
- [HttpGet("/minimum-year")]
+ [HttpGet("minimum-year")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -56,7 +56,7 @@ public class ComputersController(MarechaiContext context) : ControllerBase
t.Introduced.Value.Year > 1000)
.MinAsync(t => t.Introduced.Value.Year);
- [HttpGet("/maximum-year")]
+ [HttpGet("maximum-year")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -66,7 +66,7 @@ public class ComputersController(MarechaiContext context) : ControllerBase
t.Introduced.Value.Year > 1000)
.MaxAsync(t => t.Introduced.Value.Year);
- [HttpGet("/by-letter/{c}")]
+ [HttpGet("by-letter/{c}")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -84,7 +84,7 @@ public class ComputersController(MarechaiContext context) : ControllerBase
})
.ToListAsync();
- [HttpGet("/by-year/{year:int}")]
+ [HttpGet("by-year/{year:int}")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
diff --git a/Marechai.Server/Controllers/ConsolesController.cs b/Marechai.Server/Controllers/ConsolesController.cs
index 4d626a3e..aac0d8d3 100644
--- a/Marechai.Server/Controllers/ConsolesController.cs
+++ b/Marechai.Server/Controllers/ConsolesController.cs
@@ -40,13 +40,13 @@ namespace Marechai.Server.Controllers;
[ApiController]
public class ConsolesController(MarechaiContext context) : ControllerBase
{
- [HttpGet("/count")]
+ [HttpGet("count")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public Task GetConsolesCountAsync() => context.Machines.CountAsync(c => c.Type == MachineType.Console);
- [HttpGet("/minimum-year")]
+ [HttpGet("minimum-year")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -56,7 +56,7 @@ public class ConsolesController(MarechaiContext context) : ControllerBase
t.Introduced.Value.Year > 1000)
.MinAsync(t => t.Introduced.Value.Year);
- [HttpGet("/maximum-year")]
+ [HttpGet("maximum-year")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -66,7 +66,7 @@ public class ConsolesController(MarechaiContext context) : ControllerBase
t.Introduced.Value.Year > 1000)
.MaxAsync(t => t.Introduced.Value.Year);
- [HttpGet("/by-letter/{c}")]
+ [HttpGet("by-letter/{c}")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -84,7 +84,7 @@ public class ConsolesController(MarechaiContext context) : ControllerBase
})
.ToListAsync();
- [HttpGet("/by-year/{year:int}")]
+ [HttpGet("by-year/{year:int}")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]