39 lines
1.4 KiB
C#
39 lines
1.4 KiB
C#
using Management.Data;
|
|
using Management.Security;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System.Text.Json;
|
|
|
|
namespace Management.Controllers.Admin;
|
|
|
|
/// <summary>
|
|
/// 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
|
|
/// </summary>
|
|
[ApiController]
|
|
[Route("api/admin/campaigns")]
|
|
public sealed class AdminCampaignsController : AdminControllerBase
|
|
{
|
|
public AdminCampaignsController(SqlService sql, ClientContext client, ILogger<AdminCampaignsController> log)
|
|
: base(sql, client, log) { }
|
|
|
|
/// <summary>
|
|
/// List all initiatives across all clients, with nested channel campaigns.
|
|
/// Optional filters: status, clientId, dateFrom, dateTo.
|
|
/// </summary>
|
|
[HttpPost("list")]
|
|
public Task<IActionResult> List([FromBody] JsonElement body, CancellationToken ct)
|
|
=> CallProc("spAdminCampaigns", "list", body.ToString(), ct);
|
|
|
|
/// <summary>
|
|
/// Get initiative by ID with full channel campaign details.
|
|
/// </summary>
|
|
[HttpGet("{initiativeId:long}")]
|
|
public Task<IActionResult> Get(long initiativeId, CancellationToken ct)
|
|
=> CallProc("spAdminCampaigns", "get", new { initiativeId }, ct);
|
|
}
|