52 lines
No EOL
2.1 KiB
C#
Executable file
52 lines
No EOL
2.1 KiB
C#
Executable file
using Dan.Enums;
|
|
|
|
namespace Dan.Models
|
|
{
|
|
public struct LeaderboardSearchQuery
|
|
{
|
|
public int Skip { get; set; }
|
|
public int Take { get; set; }
|
|
public string Username { get; set; }
|
|
public TimePeriodType TimePeriod { get; set; }
|
|
|
|
private string Query => $"skip={Skip}&take={Take}&username={Username}&timePeriod={(int) TimePeriod}";
|
|
|
|
public string GetQuery() => "?" + Query;
|
|
|
|
public string ChainQuery() => "&" + Query;
|
|
|
|
public static LeaderboardSearchQuery Default => new LeaderboardSearchQuery
|
|
{
|
|
Skip = 0,
|
|
Take = 0,
|
|
Username = "",
|
|
TimePeriod = TimePeriodType.AllTime
|
|
};
|
|
|
|
public static LeaderboardSearchQuery Paginated(int skip, int take) =>
|
|
ByUsernameAndTimePaginated("", TimePeriodType.AllTime, skip, take);
|
|
|
|
public static LeaderboardSearchQuery ByUsername(string username) =>
|
|
ByUsernamePaginated(username, 5, 5);
|
|
|
|
public static LeaderboardSearchQuery ByUsernamePaginated(string username, int prev, int next) =>
|
|
ByUsernameAndTimePaginated(username, TimePeriodType.AllTime, prev, next);
|
|
|
|
public static LeaderboardSearchQuery ByTimePeriod(TimePeriodType timePeriod) =>
|
|
ByTimePeriodPaginated(timePeriod, 0, 0);
|
|
|
|
public static LeaderboardSearchQuery ByTimePeriodPaginated(TimePeriodType timePeriod, int skip, int take) =>
|
|
ByUsernameAndTimePaginated("", timePeriod, skip, take);
|
|
|
|
public static LeaderboardSearchQuery ByUsernameAndTime(string username, TimePeriodType timePeriod) =>
|
|
ByUsernameAndTimePaginated(username, timePeriod, 0, 0);
|
|
|
|
public static LeaderboardSearchQuery ByUsernameAndTimePaginated(string username, TimePeriodType timePeriod, int skip, int take) => new LeaderboardSearchQuery
|
|
{
|
|
Skip = skip,
|
|
Take = take,
|
|
Username = username,
|
|
TimePeriod = timePeriod
|
|
};
|
|
}
|
|
} |