aboutsummaryrefslogtreecommitdiff
path: root/src/Enmarcha.Backend/Controllers/AlertsController.cs
blob: 48603999f2b4602d6ce52c56668cce157652d150 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using Enmarcha.Backend.Data;
using Enmarcha.Backend.Data.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace Enmarcha.Backend.Controllers;

[Route("api/alerts")]
[ApiController]
public class AlertsController(AppDbContext db) : ControllerBase
{
    /// <summary>
    /// Returns all service alerts that are currently published and not yet hidden.
    /// Includes PreNotice, Active, and Finished phases.
    /// </summary>
    [HttpGet]
    public async Task<IActionResult> GetAlerts()
    {
        var now = DateTime.UtcNow;
        var alerts = await db.ServiceAlerts
            .Where(a => a.PublishDate <= now && a.HiddenDate > now)
            .OrderByDescending(a => a.EventStartDate)
            .ToListAsync();

        return Ok(alerts.Select(a => new
        {
            id = a.Id,
            version = a.Version,
            phase = a.GetPhase(now).ToString(),
            cause = a.Cause.ToString(),
            effect = a.Effect.ToString(),
            header = (Dictionary<string, string>)a.Header,
            description = (Dictionary<string, string>)a.Description,
            selectors = a.Selectors.Select(s => s.Raw).ToList(),
            infoUrls = a.InfoUrls,
            eventStartDate = a.EventStartDate,
            eventEndDate = a.EventEndDate,
        }));
    }
}