61130130ff
Success responses now use ApiResponse<T>{ Success=true, Data=T }
instead of returning raw T — consistent shape for all outcomes.
Ref: IT-628
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
46 lines
1.8 KiB
C#
46 lines
1.8 KiB
C#
using HrynCo.NotificationService.Api.Infrastructure;
|
|
using HrynCo.NotificationService.Services.Core;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace HrynCo.NotificationService.Api.Controllers;
|
|
|
|
[Route("api/v1/[controller]")]
|
|
[ApiController]
|
|
public abstract class ApiControllerBase : ControllerBase
|
|
{
|
|
protected ApiControllerBase(IMediator mediator)
|
|
{
|
|
Mediator = mediator;
|
|
}
|
|
|
|
protected IMediator Mediator { get; }
|
|
|
|
protected IActionResult FromServiceResult<T>(ServiceResult<T> result) =>
|
|
result.IsSuccess
|
|
? Ok(new ApiResponse<T> { Success = true, Data = result.Result })
|
|
: MapServiceError(result.Error!);
|
|
|
|
protected IActionResult CreatedFromServiceResult<T>(ServiceResult<Guid> result, string actionName, Func<Guid, T> routeValues) =>
|
|
result.IsSuccess
|
|
? CreatedAtAction(actionName, routeValues(result.Result), new ApiResponse<Guid> { Success = true, Data = result.Result })
|
|
: MapServiceError(result.Error!);
|
|
|
|
protected IActionResult MapServiceError(ServiceError error)
|
|
{
|
|
string code = error.Code?.ToString() ?? "Unknown";
|
|
|
|
return error.Code switch
|
|
{
|
|
ServiceErrorCode.NotFound => NotFound(ErrorResponse(code, error.Message)),
|
|
ServiceErrorCode.Conflict => Conflict(ErrorResponse(code, error.Message)),
|
|
ServiceErrorCode.InvalidRequest => BadRequest(ErrorResponse(code, error.Message)),
|
|
null => throw new InvalidOperationException("Error code was null for failed result."),
|
|
_ => throw new ArgumentOutOfRangeException(nameof(error), error, "Unexpected error code.")
|
|
};
|
|
}
|
|
|
|
private static ApiResponse<object> ErrorResponse(string code, string message) =>
|
|
new() { Success = false, Error = new ApiError { Code = code, Message = message } };
|
|
}
|