using Management.Data; using Management.Security; using Microsoft.AspNetCore.Mvc; using System.Text.Json; namespace Management.Controllers.Admin; /// /// Admin endpoints for campaign (initiative) management. /// Lists initiatives across all clients with their channel campaign details. /// Requires Admin role. /// /// ENDPOINTS: /// GET /api/admin/campaigns - List all initiatives with channels /// GET /api/admin/campaigns/{id} - Get initiative detail with channels /// [ApiController] [Route("api/admin/campaigns")] public sealed class AdminCampaignsController : AdminControllerBase { public AdminCampaignsController(SqlService sql, ClientContext client, ILogger log) : base(sql, client, log) { } /// /// List all initiatives across all clients, with nested channel campaigns. /// Optional filters: status, clientId, dateFrom, dateTo. /// [HttpPost("list")] public Task List([FromBody] JsonElement body, CancellationToken ct) => CallProc("spAdminCampaigns", "list", body.ToString(), ct); /// /// Get initiative by ID with full channel campaign details. /// [HttpGet("{initiativeId:long}")] public Task Get(long initiativeId, CancellationToken ct) => CallProc("spAdminCampaigns", "get", new { initiativeId }, ct); }