Árvore de páginas


O TNF faz uso do Notification Pattern em sua estrutura para o retorno e agrupamento de menagens que podem ocorrer na aplicação.

A utilização desse Pattern auxilia o desenvolvedor na manutenção do código, na centralização de notificações, na extensibilidade do código, na redução do uso de exceções e no desacoplamento em retornos de métodos e camadas pois usando esse Pattern o desenvolvedor irá acumular notificações em um objeto único daquele request sem precisar retornar nada e que pode ser usado em qualquer lugar do sistema.

Para suporte a essa estrutura instale via nuget o pacote Tnf.App.Bus.Notifications disponível em: https://www.myget.org/F/tnf/api/v3/index.json.

Atributos

A classe NotificationEvent contém os parâmetros e atributos padronizados pela API TOTVS para a lista de resposta de erro.

Utilização

Já que o Pattern utilizado é um Pattern Cross-Cutting então ele pode ser acessado de qualquer lugar do sistema.

Classes que herdam de Tnf.App.Domain.Services.AppDomainService, Tnf.App.Application.Services.AppApplicationService e Tnf.App.AspNetCore.Mvc.Controllers.TnfAppController possuem um campo chamado Notification que representa o objeto único daquele request.

Manipulação de Notificações

Para adicionar, recuperar e verificar se existe Notificações no objeto do request:


PersonService.cs
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);
        }
    }
}

ErrorResponse

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:


PersonController.cs
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);
        }
    }
}



  • Sem rótulos