// Copyright (C) 2021-present sam (starshines.gay) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published // by the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . using Catalogger.Backend.Api.Middleware; using Catalogger.Backend.Cache.InMemoryCache; using Microsoft.AspNetCore.Mvc; namespace Catalogger.Backend.Api; [Route("/api")] public class MetaController(GuildCache guildCache, DiscordRequestService discordRequestService) : ApiControllerBase { [HttpGet("meta")] public IActionResult GetMeta() { return Ok(new MetaResponse(Guilds: (int)CataloggerMetrics.GuildsCached.Value)); } [HttpGet("current-user")] [Authorize] public async Task GetCurrentUserAsync() { var token = HttpContext.GetTokenOrThrow(); var currentUser = await discordRequestService.GetMeAsync(token); var guilds = await discordRequestService.GetGuildsAsync(token); return Ok( new CurrentUserResponse( new ApiUser(currentUser), guilds .Where(g => g.CanManage) .Select(g => new ApiGuild(g, guildCache.Contains(g.Id))) ) ); } private record MetaResponse(int Guilds); private record CurrentUserResponse(ApiUser User, IEnumerable Guilds); }