2024-06-08 21:02:12 +02:00
|
|
|
using Foxnouns.Backend.Database;
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
2024-07-13 03:09:00 +02:00
|
|
|
using NodaTime;
|
2024-06-08 21:02:12 +02:00
|
|
|
|
|
|
|
namespace Foxnouns.Backend.Controllers;
|
|
|
|
|
|
|
|
[Route("/api/v2/meta")]
|
2024-07-13 03:09:00 +02:00
|
|
|
public class MetaController(DatabaseContext db, IClock clock) : ApiControllerBase
|
2024-06-08 21:02:12 +02:00
|
|
|
{
|
2024-07-13 03:09:00 +02:00
|
|
|
private const string Repository = "https://codeberg.org/pronounscc/pronouns.cc";
|
|
|
|
|
2024-06-08 21:02:12 +02:00
|
|
|
[HttpGet]
|
2024-07-13 19:38:40 +02:00
|
|
|
[ProducesResponseType<MetaResponse>(StatusCodes.Status200OK)]
|
2024-06-08 21:02:12 +02:00
|
|
|
public async Task<IActionResult> GetMeta()
|
|
|
|
{
|
2024-07-13 03:09:00 +02:00
|
|
|
var now = clock.GetCurrentInstant();
|
|
|
|
var users = await db.Users.Select(u => u.LastActive).ToListAsync();
|
2024-06-08 21:02:12 +02:00
|
|
|
var memberCount = await db.Members.CountAsync();
|
|
|
|
|
2024-06-09 15:48:26 +02:00
|
|
|
return Ok(new MetaResponse(
|
2024-07-13 03:09:00 +02:00
|
|
|
Repository, BuildInfo.Version, BuildInfo.Hash, memberCount,
|
|
|
|
new UserInfo(
|
|
|
|
users.Count,
|
|
|
|
users.Count(i => i > now - Duration.FromDays(30)),
|
|
|
|
users.Count(i => i > now - Duration.FromDays(7)),
|
|
|
|
users.Count(i => i > now - Duration.FromDays(1))
|
|
|
|
))
|
2024-06-09 15:48:26 +02:00
|
|
|
);
|
2024-06-08 21:02:12 +02:00
|
|
|
}
|
|
|
|
|
2024-07-12 17:12:24 +02:00
|
|
|
[HttpGet("/api/v2/coffee")]
|
2024-06-12 16:19:49 +02:00
|
|
|
public IActionResult BrewCoffee() => Problem("Sorry, I'm a teapot!", statusCode: StatusCodes.Status418ImATeapot);
|
|
|
|
|
2024-07-13 03:09:00 +02:00
|
|
|
private record MetaResponse(string Repository, string Version, string Hash, int Members, UserInfo Users);
|
2024-06-09 15:48:26 +02:00
|
|
|
|
|
|
|
private record UserInfo(int Total, int ActiveMonth, int ActiveWeek, int ActiveDay);
|
2024-06-08 21:02:12 +02:00
|
|
|
}
|