From 69a3570a605a6fa743476cc0ece166da18ed50f9 Mon Sep 17 00:00:00 2001 From: Egamorf Date: Thu, 10 Apr 2025 01:27:46 +0200 Subject: [PATCH] Add dto and services --- .../Pages/Games/Filter/GameFilter.razor.cs | 4 +- .../GameIdeas.Shared/Dto/DeveloperDto.cs | 7 +++ src/GameIdeas/GameIdeas.Shared/Dto/GameDto.cs | 17 +++++- .../GameIdeas.Shared/Dto/GameFilterDto.cs | 18 ++++++ .../GameIdeas.Shared/Dto/LoginDto.cs | 6 +- .../GameIdeas.Shared/Dto/PlatformDto.cs | 8 +++ .../GameIdeas.Shared/Dto/PropertyDto.cs | 7 +++ .../GameIdeas.Shared/Dto/PublisherDto.cs | 7 +++ src/GameIdeas/GameIdeas.Shared/Dto/TagDto.cs | 8 +++ src/GameIdeas/GameIdeas.Shared/Dto/UserDto.cs | 13 ++++ src/GameIdeas/GameIdeas.Shared/Enum/Role.cs | 8 +++ .../GameIdeas.Shared/Model/Platform.cs | 2 +- .../Controllers/GameController.cs | 17 ++++++ .../GameIdeas.WebAPI/GameIdeas.WebAPI.csproj | 1 + ... 20250409225125_InitialCreate.Designer.cs} | 4 +- ...ate.cs => 20250409225125_InitialCreate.cs} | 2 +- .../GameIdeasContextModelSnapshot.cs | 2 +- .../Profiles/CategoryProfile.cs | 36 +++++++++++ .../GameIdeas.WebAPI/Profiles/GameProfile.cs | 31 ++++++++++ .../GameIdeas.WebAPI/Profiles/UserProfile.cs | 22 +++++++ .../Server/GameIdeas.WebAPI/Program.cs | 8 +++ .../GameIdeas.WebAPI/Services/GameService.cs | 60 +++++++++++++++++++ .../GameIdeas.WebAPI/Services/UserService.cs | 5 ++ 23 files changed, 283 insertions(+), 10 deletions(-) create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/DeveloperDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/GameFilterDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/PlatformDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/PropertyDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/PublisherDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/TagDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Dto/UserDto.cs create mode 100644 src/GameIdeas/GameIdeas.Shared/Enum/Role.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/GameController.cs rename src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/{20250409210640_InitialCreate.Designer.cs => 20250409225125_InitialCreate.Designer.cs} (99%) rename src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/{20250409210640_InitialCreate.cs => 20250409225125_InitialCreate.cs} (99%) create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/CategoryProfile.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/GameProfile.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/UserProfile.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Services/GameService.cs create mode 100644 src/GameIdeas/Server/GameIdeas.WebAPI/Services/UserService.cs diff --git a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Filter/GameFilter.razor.cs b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Filter/GameFilter.razor.cs index 7fda92f..49d7461 100644 --- a/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Filter/GameFilter.razor.cs +++ b/src/GameIdeas/Client/GameIdeas.BlazorApp/Pages/Games/Filter/GameFilter.razor.cs @@ -21,7 +21,7 @@ public partial class GameFilter ]; private readonly IEnumerable>> GameProperties = [ - new() { Item = game => game?.Name, Label = "Nom", IsSelected = true }, + new() { Item = game => game?.Title, Label = "Nom", IsSelected = true }, new() { Item = game => game?.ReleaseDate, Label = "Date de parution" } ]; @@ -40,7 +40,7 @@ public partial class GameFilter ]; private EditContext? EditContext; - private SliderRangeParams SliderRangeParams = + private readonly SliderRangeParams SliderRangeParams = new() { Min = 1, ValueMin = 1, ValueMax = 5, Max = 5 }; protected override void OnInitialized() diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/DeveloperDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/DeveloperDto.cs new file mode 100644 index 0000000..61cf754 --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Dto/DeveloperDto.cs @@ -0,0 +1,7 @@ +namespace GameIdeas.Shared.Dto; + +public class DeveloperDto +{ + public int? Id { get; set; } + public string? Name { get; set; } +} diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/GameDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/GameDto.cs index 293a672..e0fca59 100644 --- a/src/GameIdeas/GameIdeas.Shared/Dto/GameDto.cs +++ b/src/GameIdeas/GameIdeas.Shared/Dto/GameDto.cs @@ -2,6 +2,19 @@ public class GameDto { - public string? Name { get; set; } - public string? ReleaseDate { get; set; } + public int? Id { get; set; } + public string? Title { get; set; } + public DateTime? ReleaseDate { get; set; } + public DateTime? CreationDate { get; set; } + public UserDto? CreationUser { get; set; } + public DateTime? ModificationDate { get; set; } + public UserDto? ModificationUser { get; set; } + public double? StorageSpace { get; set; } + public string? Description { get; set; } + public int? Interest { get; set; } + public IEnumerable? Platforms { get; set; } + public IEnumerable? Properties { get; set; } + public IEnumerable? Tags { get; set; } + public IEnumerable? Publishers { get; set; } + public IEnumerable? Developers { get; set; } } \ No newline at end of file diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/GameFilterDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/GameFilterDto.cs new file mode 100644 index 0000000..eae8c05 --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Dto/GameFilterDto.cs @@ -0,0 +1,18 @@ +namespace GameIdeas.Shared.Dto; + +public class GameFilterDto +{ + public IEnumerable? Platforms { get; set; } + public string? Name { get; set; } + public IEnumerable? Tags { get; set; } + public IEnumerable? Properties { get; set; } + public int? MinInterest { get; set; } + public int? MaxInterest { get; set; } + public IEnumerable? ReleaseYears { get; set; } + public IEnumerable? PublisherIds { get; set; } + public IEnumerable? DeveloperIds { get; set; } + public IEnumerable? CreationUserIds { get; set; } + public IEnumerable? ModificationUserIds { get; set; } + public int CurrentPage { get; set; } + public int NumberPerPage { get; set; } +} diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/LoginDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/LoginDto.cs index 61ea528..33c81a7 100644 --- a/src/GameIdeas/GameIdeas.Shared/Dto/LoginDto.cs +++ b/src/GameIdeas/GameIdeas.Shared/Dto/LoginDto.cs @@ -1,7 +1,11 @@ -namespace GameIdeas.Shared.Dto; +using GameIdeas.Shared.Enum; + +namespace GameIdeas.Shared.Dto; public class LoginDto { + public int? Id { get; set; } public string? Username { get; set; } public string? Password { get; set; } + public Role? Role { get; set; } } diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/PlatformDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/PlatformDto.cs new file mode 100644 index 0000000..472f1cc --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Dto/PlatformDto.cs @@ -0,0 +1,8 @@ +namespace GameIdeas.Shared.Dto; + +public class PlatformDto +{ + public int? Id { get; set; } + public string? Label { get; set; } + public string? Url { get; set; } +} diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/PropertyDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/PropertyDto.cs new file mode 100644 index 0000000..0841c91 --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Dto/PropertyDto.cs @@ -0,0 +1,7 @@ +namespace GameIdeas.Shared.Dto; + +public class PropertyDto +{ + public int? Id { get; set; } + public string? Label { get; set; } +} diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/PublisherDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/PublisherDto.cs new file mode 100644 index 0000000..4e97bc9 --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Dto/PublisherDto.cs @@ -0,0 +1,7 @@ +namespace GameIdeas.Shared.Dto; + +public class PublisherDto +{ + public int? Id { get; set; } + public string? Name { get; set; } +} diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/TagDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/TagDto.cs new file mode 100644 index 0000000..a959e21 --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Dto/TagDto.cs @@ -0,0 +1,8 @@ + +namespace GameIdeas.Shared.Dto; + +public class TagDto +{ + public int? Id { get; set; } + public string? Label { get; set; } +} diff --git a/src/GameIdeas/GameIdeas.Shared/Dto/UserDto.cs b/src/GameIdeas/GameIdeas.Shared/Dto/UserDto.cs new file mode 100644 index 0000000..39d52ca --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Dto/UserDto.cs @@ -0,0 +1,13 @@ +using GameIdeas.Shared.Enum; + +namespace GameIdeas.Shared.Dto; + +public class UserDto +{ + public int? Id { get; set; } + public string? Username { get; set; } + public string? Password { get; set; } + public Role? Role { get; set; } + public IEnumerable? CreationGames { get; set; } + public IEnumerable? ModificationGames { get; set; } +} diff --git a/src/GameIdeas/GameIdeas.Shared/Enum/Role.cs b/src/GameIdeas/GameIdeas.Shared/Enum/Role.cs new file mode 100644 index 0000000..25ed04c --- /dev/null +++ b/src/GameIdeas/GameIdeas.Shared/Enum/Role.cs @@ -0,0 +1,8 @@ +namespace GameIdeas.Shared.Enum; + +public enum Role +{ + Guest = 1, + Member = 2, + Administrator = 3 +} diff --git a/src/GameIdeas/GameIdeas.Shared/Model/Platform.cs b/src/GameIdeas/GameIdeas.Shared/Model/Platform.cs index a4c643c..b1557c9 100644 --- a/src/GameIdeas/GameIdeas.Shared/Model/Platform.cs +++ b/src/GameIdeas/GameIdeas.Shared/Model/Platform.cs @@ -8,7 +8,7 @@ public partial class Platform } public int Id { get; set; } - public string Libelle { get; set; } = null!; + public string Label { get; set; } = null!; public virtual ICollection GamePlatforms { get; set; } diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/GameController.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/GameController.cs new file mode 100644 index 0000000..ae31a44 --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/GameController.cs @@ -0,0 +1,17 @@ +using GameIdeas.Shared.Dto; +using GameIdeas.WebAPI.Services; +using Microsoft.AspNetCore.Mvc; + +namespace GameIdeas.WebAPI.Controllers; + +[ApiController] +[Route("api/[controller]")] + +public class GameController(GameService gameService) : Controller +{ + [HttpGet("Search")] + public async Task> FetchGames([FromQuery] GameFilterDto filter) + { + return await gameService.SearchGames(filter); + } +} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj b/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj index cb257d4..9a3748c 100644 --- a/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj @@ -11,6 +11,7 @@ + diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409210640_InitialCreate.Designer.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409225125_InitialCreate.Designer.cs similarity index 99% rename from src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409210640_InitialCreate.Designer.cs rename to src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409225125_InitialCreate.Designer.cs index 8a8bf38..4e323db 100644 --- a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409210640_InitialCreate.Designer.cs +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409225125_InitialCreate.Designer.cs @@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace GameIdeas.WebAPI.Migrations { [DbContext(typeof(GameIdeasContext))] - [Migration("20250409210640_InitialCreate")] + [Migration("20250409225125_InitialCreate")] partial class InitialCreate { /// @@ -176,7 +176,7 @@ namespace GameIdeas.WebAPI.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - b.Property("Libelle") + b.Property("Label") .IsRequired() .HasColumnType("text"); diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409210640_InitialCreate.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409225125_InitialCreate.cs similarity index 99% rename from src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409210640_InitialCreate.cs rename to src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409225125_InitialCreate.cs index 338fcf5..b4bb5ab 100644 --- a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409210640_InitialCreate.cs +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/20250409225125_InitialCreate.cs @@ -31,7 +31,7 @@ namespace GameIdeas.WebAPI.Migrations { Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - Libelle = table.Column(type: "text", nullable: false) + Label = table.Column(type: "text", nullable: false) }, constraints: table => { diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/GameIdeasContextModelSnapshot.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/GameIdeasContextModelSnapshot.cs index d142826..630e7fb 100644 --- a/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/GameIdeasContextModelSnapshot.cs +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Migrations/GameIdeasContextModelSnapshot.cs @@ -173,7 +173,7 @@ namespace GameIdeas.WebAPI.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - b.Property("Libelle") + b.Property("Label") .IsRequired() .HasColumnType("text"); diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/CategoryProfile.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/CategoryProfile.cs new file mode 100644 index 0000000..2763b8b --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/CategoryProfile.cs @@ -0,0 +1,36 @@ +using AutoMapper; +using GameIdeas.Shared.Dto; +using GameIdeas.Shared.Model; + +namespace GameIdeas.WebAPI.Profiles; + +public class CategoryProfile : Profile +{ + public CategoryProfile() + { + CreateMap() + .ForMember(d => d.Id, o => o.MapFrom(s => s.Id)) + .ForMember(d => d.Label, o => o.MapFrom(s => s.Label)) + .ReverseMap(); + + CreateMap() + .ForMember(d => d.Id, o => o.MapFrom(s => s.Id)) + .ForMember(d => d.Label, o => o.MapFrom(s => s.Label)) + .ReverseMap(); + + CreateMap() + .ForMember(d => d.Id, o => o.MapFrom(s => s.Id)) + .ForMember(d => d.Label, o => o.MapFrom(s => s.Label)) + .ReverseMap(); + + CreateMap() + .ForMember(d => d.Id, o => o.MapFrom(s => s.Id)) + .ForMember(d => d.Name, o => o.MapFrom(s => s.Name)) + .ReverseMap(); + + CreateMap() + .ForMember(d => d.Id, o => o.MapFrom(s => s.Id)) + .ForMember(d => d.Name, o => o.MapFrom(s => s.Name)) + .ReverseMap(); + } +} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/GameProfile.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/GameProfile.cs new file mode 100644 index 0000000..a0e8d12 --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/GameProfile.cs @@ -0,0 +1,31 @@ +using AutoMapper; +using GameIdeas.Shared.Dto; +using GameIdeas.Shared.Model; + +namespace GameIdeas.WebAPI.Profiles; + +public class GameProfile : Profile +{ + public GameProfile() + { + CreateMap() + .ForMember(d => d.Id, o => o.MapFrom(s => s.Id)) + .ForMember(d => d.Title, o => o.MapFrom(s => s.Title)) + .ForMember(d => d.ReleaseDate, o => o.MapFrom(s => s.ReleaseDate)) + .ForMember(d => d.CreationDate, o => o.MapFrom(s => s.CreationDate)) + .ForPath(d => d.CreationUser!.Id, o => o.MapFrom(s => s.CreationUserId)) + .ForMember(d => d.CreationUser, o => o.MapFrom(s => s.CreationUser)) + .ForMember(d => d.ModificationDate, o => o.MapFrom(s => s.ModificationDate)) + .ForPath(d => d.ModificationUser!.Id, o => o.MapFrom(s => s.ModificationUserId)) + .ForMember(d => d.ModificationUser, o => o.MapFrom(s => s.ModificationUser)) + .ForMember(d => d.StorageSpace, o => o.MapFrom(s => s.StorageSpace)) + .ForMember(d => d.Description, o => o.MapFrom(s => s.Description)) + .ForMember(d => d.Interest, o => o.MapFrom(s => s.Interest)) + .ForMember(d => d.Platforms, o => o.MapFrom(s => s.GamePlatforms.Select(p => new PlatformDto() { Id = p.Platform.Id, Label = p.Platform.Label, Url = p.Url }))) + .ForMember(d => d.Properties, o => o.MapFrom(s => s.GameProperties.Select(p => p.Property))) + .ForMember(d => d.Tags, o => o.MapFrom(s => s.GameTags.Select(t => t.Tag))) + .ForMember(d => d.Publishers, o => o.MapFrom(s => s.GamePublishers.Select(p => p.Publisher))) + .ForMember(d => d.Developers, o => o.MapFrom(s => s.GameDevelopers.Select(gd => gd.Developer))) + .ReverseMap(); + } +} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/UserProfile.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/UserProfile.cs new file mode 100644 index 0000000..f0868d7 --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Profiles/UserProfile.cs @@ -0,0 +1,22 @@ +using AutoMapper; +using GameIdeas.Shared.Dto; +using GameIdeas.Shared.Enum; +using GameIdeas.Shared.Model; + +namespace GameIdeas.WebAPI.Profiles; + +public class UserProfile : Profile +{ + public UserProfile() + { + CreateMap() + .ForMember(d => d.Id, o => o.MapFrom(s => s.Id)) + .ForMember(d => d.Username, o => o.MapFrom(s => s.Username)) + .ForMember(d => d.Password, o => o.MapFrom(s => s.Password)) + .ForMember(d => d.Role, o => o.MapFrom(s => s.Role)) + .ForMember(d => d.CreationGames, o => o.MapFrom(s => s.CreationGames)) + .ForMember(d => d.ModificationGames, o => o.MapFrom(s => s.ModificationGames)) + .ReverseMap(); + + } +} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs index 6ce21a4..6486ff7 100644 --- a/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs @@ -1,5 +1,7 @@ using GameIdeas.Resources; using GameIdeas.WebAPI.Context; +using GameIdeas.WebAPI.Profiles; +using GameIdeas.WebAPI.Services; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System.Data; @@ -32,6 +34,12 @@ services.AddDbContext(dbContextOptions); services.AddSingleton(); services.AddSingleton(); +services.AddScoped(); + +services.AddAutoMapper(typeof(GameProfile).Assembly); +services.AddAutoMapper(typeof(UserProfile).Assembly); +services.AddAutoMapper(typeof(CategoryProfile).Assembly); + services.AddControllers(); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi services.AddOpenApi(); diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Services/GameService.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/GameService.cs new file mode 100644 index 0000000..9ff1772 --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/GameService.cs @@ -0,0 +1,60 @@ +using AutoMapper; +using GameIdeas.Shared.Dto; +using GameIdeas.Shared.Enum; +using GameIdeas.Shared.Model; +using GameIdeas.WebAPI.Context; +using Microsoft.EntityFrameworkCore; + +namespace GameIdeas.WebAPI.Services; + +public class GameService(GameIdeasContext context, IMapper mapper) +{ + public async Task> SearchGames(GameFilterDto filter) + { + var query = context.Games + .Include(g => g.CreationUser) + .Include(g => g.ModificationUser) + .Include(g => g.GamePlatforms).ThenInclude(p => p.Platform) + .Include(g => g.GameProperties).ThenInclude(p => p.Property) + .Include(g => g.GameTags).ThenInclude(p => p.Tag) + .Include(g => g.GamePublishers).ThenInclude(p => p.Publisher) + .Include(g => g.GameDevelopers).ThenInclude(p => p.Developer) + .AsQueryable(); + + ApplyFilter(ref query); + + var games = await query + .OrderBy(g => g.Title) + .Skip(filter.CurrentPage * filter.NumberPerPage) + .Take(filter.NumberPerPage) + .ToListAsync(); + + List gamesTest = [ new () + { + Id = 1, + Title = "Test", + CreationDate = DateTime.Today - TimeSpan.FromHours(-12), + CreationUser = new User() { Id = 1, Username = "Test", Role = (int)Role.Administrator }, + CreationUserId = 1, + Description = "Test", + GameDevelopers = [ new() { Developer = new Developer() { Id = 1, Name = "THQNordic"} }], + GamePlatforms = [ new() { Platform = new Platform() { Id = 1, Label = "Steam" }, Url = "steam.com?app=55554131" }], + GameProperties = [ new () { Property = new Property() { Id = 1, Label = "Coop"} }], + GamePublishers = [ new () { Publisher = new Publisher() { Id = 1, Name = "Take-Two"} }], + GameTags = [ new () { Tag = new Tag() { Id = 1, Label = "RPG" } }], + Interest = 5, + ModificationDate = DateTime.Today , + ModificationUser = new User() { Id = 2, Username = "Test 2", Role = (int)Role.Member }, + ModificationUserId = 2, + ReleaseDate = new DateTime(2025, 2, 1), + StorageSpace = 40 + } ]; + + return mapper.Map>(gamesTest); + } + + private void ApplyFilter(ref IQueryable query) + { + + } +} diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Services/UserService.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/UserService.cs new file mode 100644 index 0000000..bfb43fb --- /dev/null +++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/UserService.cs @@ -0,0 +1,5 @@ +namespace GameIdeas.WebAPI.Services; + +public class UserService +{ +}