Skip to content

Commit 51aeb67

Browse files
committed
Improved paged endpoint rage validation. Fixed smaller request model validation issues
1 parent 5e371ed commit 51aeb67

File tree

6 files changed

+33
-28
lines changed

6 files changed

+33
-28
lines changed

Moonlight.ApiServer/Http/Controllers/Admin/ApiKeys/ApiKeysController.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.EntityFrameworkCore;
55
using MoonCore.Exceptions;
66
using MoonCore.Extended.Abstractions;
7+
using MoonCore.Extended.Models;
78
using MoonCore.Models;
89
using Moonlight.ApiServer.Database.Entities;
910
using Moonlight.ApiServer.Services;
@@ -27,18 +28,15 @@ public ApiKeysController(DatabaseRepository<ApiKey> apiKeyRepository, ApiKeyServ
2728

2829
[HttpGet]
2930
[Authorize(Policy = "permissions:admin.apikeys.get")]
30-
public async Task<IPagedData<ApiKeyResponse>> Get(
31-
[FromQuery] [Range(0, int.MaxValue)] int page,
32-
[FromQuery] [Range(1, 100)] int pageSize
33-
)
31+
public async Task<IPagedData<ApiKeyResponse>> Get([FromQuery] PagedOptions options)
3432
{
3533
var count = await ApiKeyRepository.Get().CountAsync();
3634

3735
var apiKeys = await ApiKeyRepository
3836
.Get()
3937
.OrderBy(x => x.Id)
40-
.Skip(page * pageSize)
41-
.Take(pageSize)
38+
.Skip(options.Page * options.PageSize)
39+
.Take(options.PageSize)
4240
.ToArrayAsync();
4341

4442
var mappedApiKey = apiKeys
@@ -53,11 +51,11 @@ [FromQuery] [Range(1, 100)] int pageSize
5351

5452
return new PagedData<ApiKeyResponse>()
5553
{
56-
CurrentPage = page,
54+
CurrentPage = options.Page,
5755
Items = mappedApiKey,
58-
PageSize = pageSize,
56+
PageSize = options.PageSize,
5957
TotalItems = count,
60-
TotalPages = count == 0 ? 0 : (count - 1) / pageSize
58+
TotalPages = count == 0 ? 0 : (count - 1) / options.PageSize
6159
};
6260
}
6361

Moonlight.ApiServer/Http/Controllers/Admin/Sys/Customisation/ThemesController.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.EntityFrameworkCore;
55
using MoonCore.Exceptions;
66
using MoonCore.Extended.Abstractions;
7+
using MoonCore.Extended.Models;
78
using MoonCore.Models;
89
using Moonlight.ApiServer.Database.Entities;
910
using Moonlight.ApiServer.Mappers;
@@ -25,17 +26,14 @@ public ThemesController(DatabaseRepository<Theme> themeRepository)
2526

2627
[HttpGet]
2728
[Authorize(Policy = "permissions:admin.system.customisation.themes.read")]
28-
public async Task<PagedData<ThemeResponse>> Get(
29-
[FromQuery] [Range(0, int.MaxValue)] int page,
30-
[FromQuery] [Range(1, 100)] int pageSize
31-
)
29+
public async Task<PagedData<ThemeResponse>> Get([FromQuery] PagedOptions options)
3230
{
3331
var count = await ThemeRepository.Get().CountAsync();
3432

3533
var items = await ThemeRepository
3634
.Get()
37-
.Skip(page * pageSize)
38-
.Take(pageSize)
35+
.Skip(options.Page * options.PageSize)
36+
.Take(options.PageSize)
3937
.ToArrayAsync();
4038

4139
var mappedItems = items
@@ -44,11 +42,11 @@ [FromQuery] [Range(1, 100)] int pageSize
4442

4543
return new PagedData<ThemeResponse>()
4644
{
47-
CurrentPage = page,
45+
CurrentPage = options.Page,
4846
Items = mappedItems,
49-
PageSize = pageSize,
47+
PageSize = options.PageSize,
5048
TotalItems = count,
51-
TotalPages = count == 0 ? 0 : (count - 1) / pageSize
49+
TotalPages = count == 0 ? 0 : (count - 1) / options.PageSize
5250
};
5351
}
5452

Moonlight.ApiServer/Http/Controllers/Admin/Users/UsersController.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using MoonCore.Exceptions;
77
using MoonCore.Extended.Abstractions;
88
using MoonCore.Extended.Helpers;
9+
using MoonCore.Extended.Models;
910
using MoonCore.Models;
1011
using Moonlight.ApiServer.Database.Entities;
1112
using Moonlight.ApiServer.Services;
@@ -27,18 +28,15 @@ public UsersController(DatabaseRepository<User> userRepository)
2728

2829
[HttpGet]
2930
[Authorize(Policy = "permissions:admin.users.get")]
30-
public async Task<IPagedData<UserResponse>> Get(
31-
[FromQuery] [Range(0, int.MaxValue)] int page,
32-
[FromQuery] [Range(1, 100)] int pageSize
33-
)
31+
public async Task<IPagedData<UserResponse>> Get([FromQuery] PagedOptions options)
3432
{
3533
var count = await UserRepository.Get().CountAsync();
3634

3735
var users = await UserRepository
3836
.Get()
3937
.OrderBy(x => x.Id)
40-
.Skip(page * pageSize)
41-
.Take(pageSize)
38+
.Skip(options.Page * options.PageSize)
39+
.Take(options.PageSize)
4240
.ToArrayAsync();
4341

4442
var mappedUsers = users
@@ -53,11 +51,11 @@ [FromQuery] [Range(1, 100)] int pageSize
5351

5452
return new PagedData<UserResponse>()
5553
{
56-
CurrentPage = page,
54+
CurrentPage = options.Page,
5755
Items = mappedUsers,
58-
PageSize = pageSize,
56+
PageSize = options.PageSize,
5957
TotalItems = count,
60-
TotalPages = count == 0 ? 0 : (count - 1) / pageSize
58+
TotalPages = count == 0 ? 0 : (count - 1) / options.PageSize
6159
};
6260
}
6361

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1-
namespace Moonlight.Shared.Http.Requests.Admin.Sys.Files;
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace Moonlight.Shared.Http.Requests.Admin.Sys.Files;
24

35
public class DecompressRequest
46
{
7+
[Required(ErrorMessage = "You need to provide a format")]
58
public string Format { get; set; }
9+
10+
[Required(ErrorMessage = "You need to provide a path")]
611
public string Path { get; set; }
12+
13+
[Required(ErrorMessage = "You need to provide a destination")]
714
public string Destination { get; set; }
815
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
using System.ComponentModel.DataAnnotations;
2+
13
namespace Moonlight.Shared.Http.Requests.Admin.Sys;
24

35
public class GenerateDiagnoseRequest
46
{
7+
[Required(ErrorMessage = "You need to define providers")]
58
public string[] Providers { get; set; } = [];
69
}

Moonlight.Shared/Http/Requests/Admin/Users/CreateUserRequest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ public class CreateUserRequest
1717
[MaxLength(256, ErrorMessage = "Your password should not exceed the length of 256 characters")]
1818
public string Password { get; set; }
1919

20+
[Required(ErrorMessage = "You need to provide permissions")]
2021
public string[] Permissions { get; set; } = [];
2122
}

0 commit comments

Comments
 (0)