using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using RadicadeServer.DB; using RadicadeServer.Extensions; using RadicadeServer.RecNet.Board; namespace RadicadeServer.API.Board.V2 { [Route("api/communityboard/v2")] public class CommunityBoardV2 : Controller { private readonly RecDBContext db; public CommunityBoardV2(RecDBContext context) { db = context; } [HttpGet("current")] public async Task> GetCurrentCommunityBoard() { var config = await db.ServerConfig.FirstOrDefaultAsync(x => x.Key == "CommunityBoard"); var board = config?.Value?.FromJson() ?? CreateDefaultBoard(); NormalizeBoard(board); return Ok(board); } private static CommunityBoard CreateDefaultBoard() { return new CommunityBoard { FeaturedPlayer = new FeaturedPlayer { Id = 0, TitleOverride = string.Empty, UrlOverride = string.Empty }, FeaturedRoomGroup = new FeaturedRoomGroup { FeaturedRoomGroupId = 0, Name = string.Empty, Rooms = new List() }, CurrentAnnouncement = new BoardAnnouncement { Message = string.Empty, MoreInfoUrl = string.Empty }, InstagramImages = new List(), Videos = new List() }; } private static void NormalizeBoard(CommunityBoard board) { board.FeaturedPlayer ??= new FeaturedPlayer { Id = 0, TitleOverride = string.Empty, UrlOverride = string.Empty }; board.FeaturedRoomGroup ??= new FeaturedRoomGroup { FeaturedRoomGroupId = 0, Name = string.Empty, Rooms = new List() }; board.FeaturedRoomGroup.Rooms ??= new List(); board.CurrentAnnouncement ??= new BoardAnnouncement { Message = string.Empty, MoreInfoUrl = string.Empty }; board.InstagramImages ??= new List(); board.Videos ??= new List(); foreach (var video in board.Videos) { if (string.IsNullOrWhiteSpace(video.SourceUrl) && !string.IsNullOrWhiteSpace(video.BlobName)) video.SourceUrl = $"{DBConfig.ServerUrl}/cdn/video/{video.BlobName.TrimStart('/')}"; } var playable = board.Videos .Where(video => !string.IsNullOrWhiteSpace(video.SourceUrl) || !string.IsNullOrWhiteSpace(video.BlobName)) .ToList(); board.Videos = playable; } } }