Í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<IPersonRepository>AppDomainService, IPersonService { private readonly IPersonRepository _repository; public PersonService(IPersonRepository repository) : base(repository) {{ _repository = repository; } public PersonDtoPerson GetPerson(RequestDto<int>IRequestDto<int> id) { PersonDto dto = null; if (!Repository_repository.ExistsPerson(keys.GetId())) { Notification.Raise(NotificationEventNotification.DefaultBuilder .WithNotFoundStatus() .WithMessage(AppConsts.LocalizationSourceName, Person.Error.CouldNotFindPerson) .Build()); } if (!Notification.HasNotification()) dto = Repository.GetPerson(keys);return null; return dto_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>()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 CreateResponse<PersonDto>() .FromErrorEnum(PersonDto.Error.GetPerson) .WithMessage(AppConsts.LocalizationSourceName, PersonDto.Error.GetPerson) .WithDto(response) .Build(CreateResponseOnGet(response); } } } |
...