Foxnouns.NET/Foxnouns.Backend/Controllers/MetaController.cs

60 lines
1.8 KiB
C#
Raw Normal View History

using Foxnouns.Backend.Utils;
2024-06-08 21:02:12 +02:00
using Microsoft.AspNetCore.Mvc;
namespace Foxnouns.Backend.Controllers;
[Route("/api/v2/meta")]
public class MetaController : ApiControllerBase
2024-06-08 21:02:12 +02:00
{
private const string Repository = "https://codeberg.org/pronounscc/pronouns.cc";
2024-06-08 21:02:12 +02:00
[HttpGet]
[ProducesResponseType<MetaResponse>(StatusCodes.Status200OK)]
public IActionResult GetMeta()
2024-06-08 21:02:12 +02:00
{
return Ok(
new MetaResponse(
Repository,
BuildInfo.Version,
BuildInfo.Hash,
(int)FoxnounsMetrics.MemberCount.Value,
new UserInfo(
(int)FoxnounsMetrics.UsersCount.Value,
(int)FoxnounsMetrics.UsersActiveMonthCount.Value,
(int)FoxnounsMetrics.UsersActiveWeekCount.Value,
(int)FoxnounsMetrics.UsersActiveDayCount.Value
),
new Limits(
MemberCount: MembersController.MaxMemberCount,
BioLength: ValidationUtils.MaxBioLength,
CustomPreferences: ValidationUtils.MaxCustomPreferences,
MaxAuthMethods: AuthUtils.MaxAuthMethodsPerType
)
)
2024-06-09 15:48:26 +02:00
);
2024-06-08 21:02:12 +02:00
}
[HttpGet("/api/v2/coffee")]
public IActionResult BrewCoffee() =>
Problem("Sorry, I'm a teapot!", statusCode: StatusCodes.Status418ImATeapot);
2024-10-01 16:06:02 +02:00
private record MetaResponse(
string Repository,
string Version,
string Hash,
int Members,
UserInfo Users,
Limits Limits
);
2024-06-09 15:48:26 +02:00
private record UserInfo(int Total, int ActiveMonth, int ActiveWeek, int ActiveDay);
// All limits that the frontend should know about (for UI purposes)
private record Limits(
int MemberCount,
int BioLength,
int CustomPreferences,
int MaxAuthMethods
);
}