get all accounts endpoint added

This commit is contained in:
2024-11-06 16:29:24 +01:00
Unverified
parent d6fda7dbb8
commit 57fd4ba7a1
9 changed files with 113 additions and 1 deletions

View File

@@ -0,0 +1,67 @@
using Microsoft.AspNetCore.Mvc;
using WatchIt.Common.Query;
namespace WatchIt.Common.Model.Accounts;
public class AccountQueryParameters : QueryParameters<AccountResponse>
{
#region PROPERTIES
[FromQuery(Name = "username")]
public string? Username { get; set; }
[FromQuery(Name = "email")]
public string? Email { get; set; }
[FromQuery(Name = "description")]
public string? Description { get; set; }
[FromQuery(Name = "gender_id")]
public short? GenderId { get; set; }
[FromQuery(Name = "last_active")]
public DateOnly? LastActive { get; set; }
[FromQuery(Name = "last_active_from")]
public DateOnly? LastActiveFrom { get; set; }
[FromQuery(Name = "last_active_to")]
public DateOnly? LastActiveTo { get; set; }
[FromQuery(Name = "creation_date")]
public DateOnly? CreationDate { get; set; }
[FromQuery(Name = "creation_date_from")]
public DateOnly? CreationDateFrom { get; set; }
[FromQuery(Name = "creation_date_to")]
public DateOnly? CreationDateTo { get; set; }
[FromQuery(Name = "is_admin")]
public bool? IsAdmin { get; set; }
#endregion
#region PRIVATE METHODS
protected override bool IsMeetingConditions(AccountResponse item) =>
(
TestStringWithRegex(item.Username, Username)
&&
TestStringWithRegex(item.Email, Email)
&&
TestStringWithRegex(item.Description, Description)
&&
Test(item.Gender?.Id, GenderId)
&&
TestComparable(item.LastActive, LastActive, LastActiveFrom, LastActiveTo)
&&
TestComparable(item.CreationDate, CreationDate, CreationDateFrom, CreationDateTo)
&&
Test(item.IsAdmin, IsAdmin)
);
#endregion
}

View File

@@ -1,13 +1,28 @@
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using WatchIt.Common.Model.Genders;
using WatchIt.Common.Query;
namespace WatchIt.Common.Model.Accounts;
public class AccountResponse : Account
public class AccountResponse : Account, IQueryOrderable<AccountResponse>
{
#region PROPERTIES
[JsonIgnore]
public static IDictionary<string, Func<AccountResponse, IComparable>> OrderableProperties { get; } = new Dictionary<string, Func<AccountResponse, IComparable>>
{
{ "id", x => x.Id },
{ "username", x => x.Username },
{ "email", x => x.Email },
{ "description", x => x.Description },
{ "gender", x => x.Gender.Name },
{ "last_active", x => x.LastActive },
{ "creation_date", x => x.CreationDate },
{ "is_admin", x => x.IsAdmin }
};
[JsonPropertyName("id")]
public required long Id { get; set; }

View File

@@ -94,6 +94,11 @@ public class AccountsController(IAccountsControllerService accountsControllerSer
#region Info
[HttpGet]
[AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<AccountResponse>), StatusCodes.Status200OK)]
public async Task<ActionResult> GetAccounts(AccountQueryParameters query) => await accountsControllerService.GetAccounts(query);
[HttpGet("{id}")]
[AllowAnonymous]
[ProducesResponseType(typeof(AccountResponse), StatusCodes.Status200OK)]

View File

@@ -238,6 +238,14 @@ public class AccountsControllerService(
#region Info
public async Task<RequestResult> GetAccounts(AccountQueryParameters query)
{
IEnumerable<Account> accounts = await database.Accounts.ToListAsync();
IEnumerable<AccountResponse> accountsData = accounts.Select(x => new AccountResponse(x));
accountsData = query.PrepareData(accountsData);
return RequestResult.Ok(accountsData);
}
public async Task<RequestResult> GetAccount(long id)
{
Account? account = await database.Accounts.FirstOrDefaultAsync(x => x.Id == id);

View File

@@ -19,6 +19,7 @@ public interface IAccountsControllerService
Task<RequestResult> GetAccountProfileBackground(long id);
Task<RequestResult> PutAccountProfileBackground(AccountProfileBackgroundRequest data);
Task<RequestResult> DeleteAccountProfileBackground();
Task<RequestResult> GetAccounts(AccountQueryParameters query);
Task<RequestResult> GetAccount(long id);
Task<RequestResult> PutAccountProfileInfo(AccountProfileInfoRequest data);
Task<RequestResult> PatchAccountUsername(AccountUsernameRequest data);

View File

@@ -150,6 +150,19 @@ public class AccountsClientService(IHttpClientService httpClientService, IConfig
.ExecuteAction();
}
public async Task GetAccounts(AccountQueryParameters query, Action<IEnumerable<AccountResponse>>? successAction = null)
{
string url = GetUrl(EndpointsConfiguration.Accounts.GetAccounts);
HttpRequest request = new HttpRequest(HttpMethodType.Get, url)
{
Query = query
};
HttpResponse response = await httpClientService.SendRequestAsync(request);
response.RegisterActionFor2XXSuccess(successAction)
.ExecuteAction();
}
public async Task GetAccount(long id, Action<AccountResponse>? successAction = null, Action? notFoundAction = null)
{
string url = GetUrl(EndpointsConfiguration.Accounts.GetAccount, id);

View File

@@ -18,6 +18,7 @@ public interface IAccountsClientService
Task GetAccountProfileBackground(long id, Action<PhotoResponse>? successAction = null, Action<IDictionary<string, string[]>>? badRequestAction = null, Action? notFoundAction = null);
Task PutAccountProfileBackground(AccountProfileBackgroundRequest data, Action<PhotoResponse>? successAction = null, Action<IDictionary<string, string[]>>? badRequestAction = null, Action? unauthorizedAction = null);
Task DeleteAccountProfileBackground(Action? successAction = null, Action? unauthorizedAction = null);
Task GetAccounts(AccountQueryParameters query, Action<IEnumerable<AccountResponse>>? successAction = null);
Task GetAccount(long id, Action<AccountResponse>? successAction = null, Action? notFoundAction = null);
Task PutAccountProfileInfo(AccountProfileInfoRequest data, Action? successAction = null, Action<IDictionary<string, string[]>>? badRequestAction = null, Action? unauthorizedAction = null);
Task PatchAccountUsername(AccountUsernameRequest data, Action? successAction = null, Action<IDictionary<string, string[]>>? badRequestAction = null, Action? unauthorizedAction = null);

View File

@@ -13,6 +13,7 @@ public class Accounts
public string GetAccountProfileBackground { get; set; }
public string PutAccountProfileBackground { get; set; }
public string DeleteAccountProfileBackground { get; set; }
public string GetAccounts { get; set; }
public string GetAccount { get; set; }
public string PutAccountProfileInfo { get; set; }
public string PatchAccountUsername { get; set; }

View File

@@ -27,6 +27,7 @@
"GetAccountProfileBackground": "/{0}/profile_background",
"PutAccountProfileBackground": "/profile_background",
"DeleteAccountProfileBackground": "/profile_background",
"GetAccounts": "",
"GetAccount": "/{0}",
"PutAccountProfileInfo": "/profile_info",
"PatchAccountUsername": "/username",