32 lines
1.2 KiB
C#
32 lines
1.2 KiB
C#
using InboxIntel.Application.Abstractions;
|
|
using InboxIntel.Application.DTOs;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace InboxIntel.Api.Controllers;
|
|
|
|
public class UnsubscribeController : ApiControllerBase
|
|
{
|
|
private readonly IUnsubscribeService _unsub;
|
|
public UnsubscribeController(IUnsubscribeService unsub) => _unsub = unsub;
|
|
|
|
[HttpPost("detect")]
|
|
public async Task<IActionResult> Detect(CancellationToken ct)
|
|
{
|
|
await _unsub.DetectAsync(UserId, ct);
|
|
return NoContent();
|
|
}
|
|
|
|
/// <summary>Senders that are safe to unsubscribe from, ranked by volume.</summary>
|
|
[HttpGet("safe-list")]
|
|
public async Task<IActionResult> SafeList(CancellationToken ct)
|
|
=> Ok(await _unsub.GetSafeToUnsubscribeAsync(UserId, ct));
|
|
|
|
/// <summary>Process the confirmed unsubscribe queue. Requires Confirmed = true.</summary>
|
|
[HttpPost("process")]
|
|
public async Task<IActionResult> Process([FromBody] UnsubscribeRequestDto request, CancellationToken ct)
|
|
{
|
|
var result = await _unsub.ProcessQueueAsync(UserId, request, ct);
|
|
return result.Succeeded ? Ok(result.Value) : BadRequest(new { error = result.Error });
|
|
}
|
|
}
|