Files
Radicade/Server/Board/CommunityBoardV2.cs
2026-10-16 23:33:13 -07:00

95 lines
2.3 KiB
C#

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<ActionResult<CommunityBoard>> GetCurrentCommunityBoard()
{
var config = await db.ServerConfig.FirstOrDefaultAsync(x => x.Key == "CommunityBoard");
var board = config?.Value?.FromJson<CommunityBoard>() ?? 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<FeaturedRoom>()
},
CurrentAnnouncement = new BoardAnnouncement
{
Message = string.Empty,
MoreInfoUrl = string.Empty
},
InstagramImages = new List<InstagramImage>(),
Videos = new List<BoardVideo>()
};
}
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<FeaturedRoom>()
};
board.FeaturedRoomGroup.Rooms ??= new List<FeaturedRoom>();
board.CurrentAnnouncement ??= new BoardAnnouncement
{
Message = string.Empty,
MoreInfoUrl = string.Empty
};
board.InstagramImages ??= new List<InstagramImage>();
board.Videos ??= new List<BoardVideo>();
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;
}
}
}