/
kochkatech
/
Queue
Обзор
Документация
Войти
/
kochkatech
/
Queue
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
dev
src/Queue.Server/Endpoints/BoardEndpoints.cs
49 строк
2 KB
kochkareal
feat: табло очереди
24 июл 2026, 22:27
24 июл 2026, 22:27
2805d52
Код
Авторство
О чём код?
using System.Linq; using Microsoft.AspNetCore.Builder; using Microsoft.EntityFrameworkCore; using Queue.Core.Enums; using Queue.Core.Models; using Queue.Data; using Queue.Server.Dtos; namespace Queue.Server.Endpoints; // Данные для табло очереди (Queue.Display, этап 3): только чтение, без авторизации — // экран предполагается публичным (телевизор/монитор в зале ожидания). public static class BoardEndpoints { public static void MapBoardEndpoints(this WebApplication app) { app.MapGet("/api/tickets/board", async (QueueDbContextFactory dbFactory) => { using var db = dbFactory.CreateDbContext(); var serviceNames = (await db.Services.ToListAsync()).ToDictionary(s => s.Id, s => s.Name); var windowNames = (await db.Windows.ToListAsync()).ToDictionary(w => w.Id, w => w.Name); var activeCalls = await db.Tickets .Where(t => t.Status == TicketStatus.Called || t.Status == TicketStatus.InService) .OrderByDescending(t => t.CalledAt) .Take(10) .ToListAsync(); var waiting = await db.Tickets .Where(t => t.Status == TicketStatus.Waiting) .OrderBy(t => t.CreatedAt) .Take(10) .ToListAsync(); BoardTicketDto ToBoard(Ticket t) => new( t.Number, serviceNames.GetValueOrDefault(t.ServiceId, "—"), t.WindowId.HasValue ? windowNames.GetValueOrDefault(t.WindowId.Value) : null, t.CalledAt); var snapshot = new BoardSnapshotDto( activeCalls.Select(ToBoard).ToList(), waiting.Select(ToBoard).ToList()); return Results.Ok(snapshot); }); } }