| Índice |
|---|
O TNF faz uso do Notification Pattern em sua estrutura para o retorno e agrupamento de menagens que podem ocorrer na aplicação.
...
Para adicionar, recuperar e verificar se existe Notificações no objeto do request:
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
using Tnf.App.Bus.Notifications;
using Tnf.App.Domain.Services;
using Tnf.App.Dto.Request;
using Tnf.Architecture.Domain.Interfaces.Repositories;
using Tnf.Architecture.Domain.Interfaces.Services;
using Tnf.Architecture.Dto;
using Tnf.Architecture.Dto.Registration;
namespace Tnf.Architecture.Domain.Registration
{
public class PersonService : AppDomainService, IPersonService
{
private readonly IPersonRepository _repository;
public PersonService(IPersonRepository repository)
{
_repository = repository;
}
public Person GetPerson(IRequestDto<int> id)
{
if (!_repository.ExistsPerson(keys.GetId()))
{
Notification.Raise(Notification.DefaultBuilder
.WithNotFoundStatus()
.WithMessage(AppConsts.LocalizationSourceName, Person.Error.CouldNotFindPerson)
.Build());
}
if (Notification.HasNotification())
return null;
return _repository.GetPerson(keys);
}
}
} |
Para auxiliar o desenvolvedor a aderir o padrão API TOTVS, foi criado o objeto Tnf.AspNetCore.Mvc.Response.ErrorResponse com os parâmetros e atributos padronizado por esse padrão.
Se houver Notificações de erro durante o fluxo de um sistema web, no retorno do controller esse objeto irá ser criado com todas as Notificações de erro e retornará um IActionResult contendo ele, com o método CreateResponse<IDto> que é chamado pelo método mais especifíco CreateResponseOnGet<IDto> expostos nas controllers que herdam de Tnf.App.AspNetCore.Mvc.Controllers.TnfAppController:
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
using Microsoft.AspNetCore.Mvc;
using Tnf.Architecture.Application.Interfaces;
using Tnf.Architecture.Dto;
using Tnf.Architecture.Dto.Registration;
using Tnf.App.Dto.Request;
using Tnf.App.AspNetCore.Mvc.Controllers;
namespace Tnf.Architecture.Web.Controllers
{
[Route(RouteConsts.Person)]
public class PersonController : TnfAppController
{
private readonly IPersonAppService _personAppService;
public PersonController(IPersonAppService personAppService)
{
_personAppService = personAppService;
}
[HttpGet("{id}")]
public IActionResult Get(int id, [FromQuery]RequestDto<int> requestDto)
{
var response = _personAppService.GetPerson(requestDto.WithId(id));
return CreateResponseOnGet(response);
}
}
}
|