v1.0.0: DisplayController — display frontend + playlist API
This commit is contained in:
@@ -0,0 +1,71 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using NoticeBoard.Data;
|
||||||
|
|
||||||
|
namespace NoticeBoard.Controllers;
|
||||||
|
|
||||||
|
public class DisplayController : Controller
|
||||||
|
{
|
||||||
|
private readonly AppDbContext _db;
|
||||||
|
|
||||||
|
public DisplayController(AppDbContext db)
|
||||||
|
{
|
||||||
|
_db = db;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> Show(string slug)
|
||||||
|
{
|
||||||
|
var device = await _db.Devices
|
||||||
|
.Include(d => d.DeviceSlides.Where(ds => ds.Enabled).OrderBy(ds => ds.DisplayOrder))
|
||||||
|
.ThenInclude(ds => ds.Slide)
|
||||||
|
.FirstOrDefaultAsync(d => d.Slug == slug.ToLower());
|
||||||
|
|
||||||
|
if (device == null)
|
||||||
|
{
|
||||||
|
var devices = await _db.Devices.OrderBy(d => d.Name).ToListAsync();
|
||||||
|
return View("NotFound", devices);
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("api/playlist/{slug}")]
|
||||||
|
public async Task<IActionResult> GetPlaylist(string slug)
|
||||||
|
{
|
||||||
|
var device = await _db.Devices
|
||||||
|
.Include(d => d.DeviceSlides.Where(ds => ds.Enabled).OrderBy(ds => ds.DisplayOrder))
|
||||||
|
.ThenInclude(ds => ds.Slide)
|
||||||
|
.FirstOrDefaultAsync(d => d.Slug == slug.ToLower());
|
||||||
|
|
||||||
|
if (device == null) return NotFound();
|
||||||
|
|
||||||
|
var playlist = device.DeviceSlides.Select(ds => new
|
||||||
|
{
|
||||||
|
id = ds.Slide.Id,
|
||||||
|
name = ds.Slide.Name,
|
||||||
|
type = ds.Slide.SlideType.ToString().ToLower(),
|
||||||
|
content = ds.Slide.Content,
|
||||||
|
embedUrl = ds.Slide.EmbedUrl,
|
||||||
|
icsSource = ds.Slide.IcsSource,
|
||||||
|
backgroundColor = ds.Slide.BackgroundColor,
|
||||||
|
backgroundImage = ds.Slide.BackgroundImage,
|
||||||
|
customCss = ds.Slide.CustomCss,
|
||||||
|
duration = ds.DurationSeconds,
|
||||||
|
updatedAt = ds.Slide.UpdatedAt
|
||||||
|
});
|
||||||
|
|
||||||
|
return Json(new
|
||||||
|
{
|
||||||
|
device = new
|
||||||
|
{
|
||||||
|
name = device.Name,
|
||||||
|
slug = device.Slug,
|
||||||
|
width = device.ResolutionWidth,
|
||||||
|
height = device.ResolutionHeight,
|
||||||
|
transition = device.Transition
|
||||||
|
},
|
||||||
|
slides = playlist
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user