You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.1 KiB
80 lines
3.1 KiB
7 days ago
|
using CoreAgent.Domain.Models;
|
||
|
using MediatR;
|
||
|
using Microsoft.AspNetCore.Mvc;
|
||
|
using Microsoft.Extensions.Logging;
|
||
|
using System.Net;
|
||
|
|
||
|
namespace CoreAgent.API.Controllers
|
||
|
{
|
||
|
[ApiController]
|
||
|
[Route("api/v{version:apiVersion}/[controller]")]
|
||
|
public abstract class BaseApiController : ControllerBase
|
||
|
{
|
||
|
protected readonly IMediator _mediator;
|
||
|
protected readonly ILogger<BaseApiController> _logger;
|
||
|
|
||
|
protected BaseApiController(IMediator mediator, ILogger<BaseApiController> logger)
|
||
|
{
|
||
|
_mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
|
||
|
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||
|
}
|
||
|
|
||
|
protected async Task<IActionResult> HandleRequest<TRequest, TResponse>(TRequest request)
|
||
|
where TRequest : IRequest<TResponse>
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
_logger.LogInformation("Handling request of type {RequestType}", typeof(TRequest).Name);
|
||
|
var response = await _mediator.Send(request);
|
||
|
return new ApiActionResult<TResponse>(ApiResponse<TResponse>.CreateSuccess(response));
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
_logger.LogError(ex, "Error handling request of type {RequestType}", typeof(TRequest).Name);
|
||
|
return new ApiActionResult<TResponse>(
|
||
|
ApiResponse<TResponse>.CreateError(ex.Message),
|
||
|
HttpStatusCode.InternalServerError
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected async Task<IActionResult> HandleRequest<TRequest>(TRequest request)
|
||
|
where TRequest : IRequest
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
_logger.LogInformation("Handling request of type {RequestType}", typeof(TRequest).Name);
|
||
|
await _mediator.Send(request);
|
||
|
return new ApiActionResult(ApiResponse.CreateSuccess());
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
_logger.LogError(ex, "Error handling request of type {RequestType}", typeof(TRequest).Name);
|
||
|
return new ApiActionResult(
|
||
|
ApiResponse.CreateError(ex.Message),
|
||
|
HttpStatusCode.InternalServerError
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected IActionResult Success<T>(T data, string message = null)
|
||
|
{
|
||
|
return new ApiActionResult<T>(ApiResponse<T>.CreateSuccess(data, message));
|
||
|
}
|
||
|
|
||
|
protected IActionResult Success(string message = null)
|
||
|
{
|
||
|
return new ApiActionResult(ApiResponse.CreateSuccess(message));
|
||
|
}
|
||
|
|
||
|
protected IActionResult Error(string message, List<string> errors = null, HttpStatusCode statusCode = HttpStatusCode.BadRequest)
|
||
|
{
|
||
|
return new ApiActionResult(ApiResponse.CreateError(message, errors), statusCode);
|
||
|
}
|
||
|
|
||
|
protected IActionResult Error<T>(string message, List<string> errors = null, HttpStatusCode statusCode = HttpStatusCode.BadRequest)
|
||
|
{
|
||
|
return new ApiActionResult<T>(ApiResponse<T>.CreateError(message, errors), statusCode);
|
||
|
}
|
||
|
}
|
||
|
}
|