Skip to content

Commit 48c34ec

Browse files
authored
Merge branch 'main' into feature/testes-unitarios
2 parents 325f84f + 3d2f4f5 commit 48c34ec

12 files changed

+6699
-1208
lines changed

README.md

Lines changed: 146 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,147 @@
1-
# laravel-problem-detail-exceptions-lib
1+
# Laravel Problem Detail Exceptions
22

3+
[![Versão](https://img.shields.io/badge/vers%C3%A3o-0.1.0-beta)](https://github.com/seu-usuario/sua-lib/releases)
4+
[![Licença](https://img.shields.io/badge/licen%C3%A7a-MIT-green)](https://opensource.org/licenses/MIT)
5+
6+
Esse projeto tem por objetivo prover uma biblioteca Laravel que permite implementar de maneira simples e rápida um padrão de exceptions, seguindo os conceitos da [RFC de problem details](https://datatracker.ietf.org/doc/html/rfc7807)
7+
8+
## Instalação
9+
10+
O pacote pode ser instalado usando [Composer](https://getcomposer.org/):
11+
12+
```bash
13+
composer require gsousadev/laravel-problem-detail-exceptions-lib
14+
```
15+
16+
Após a instalação é necessário publicar os arquivos de configuração do pacote. Use o comando abaixo para isso:
17+
18+
```bash
19+
php artisan vendor:publish --tag=problem-detail-exceptions
20+
```
21+
22+
Após a publicação do pacote devem ser criados dois arquivos no projeto, o arquivo de configuração `/config/problem-detail-exceptions.php` e uma classe de excessão de exemplo neste caminho `App\Exceptions\ExampleException`.
23+
24+
## Configurando
25+
26+
Este pacote permite algumas configurações de customização. Para isso deve-se user o arquivo ```problem-detail-exceptions.php```
27+
28+
Para ter dados coerentes dentro do fluxo é importante ter duas variáveis de ambiente implementadas:
29+
- **PROBLEM_DETAIL_EXCEPTION_APP_NAME** : Indica o nome que pode aparecer nos logs referente ao nome do projeto ou app que o pacote esta sendo usado.
30+
- **PROBLEM_DETAIL_EXCEPTION_GENERATE_LOGS** : Esta variável permite que sejam ligados e desligados os logs que devem ser publicados em casos de erro.
31+
32+
Existe também uma configuração que pode ser feita dentro do arquivo de configuração, informando quais campos devem ser considerados para exceptions de APIs
33+
34+
Existir duas configurações possíveis: Campos que devem ser usados em qualquer contexto chamado `fields` e campos que devem ser mostrados em chamadas HTTP como resposta em casos de erro `renderable_fields`.
35+
36+
***Obs: NÃO RECOMENDAMOS o uso de todos os campos disponíveis, nas respostas HTTP, pois alguns campos podem ter informaçÕes que devem ser guardadas em segurança de não devem ser disponíveis para qualquer pessoa.***
37+
38+
Todos os campos devem ser cadastrados de acordo com uma classe de Enum, que esta localizada tambem no projeto.
39+
40+
Os campos disponíveis estão dentro do Enum a seguir:
41+
42+
```php
43+
<?php
44+
45+
namespace Gsousadev\LaravelProblemDetailExceptions\Enums;
46+
47+
enum ExceptionsFieldsEnum: string
48+
{
49+
case TYPE = 'type';
50+
case TITLE = 'title';
51+
case STATUS = 'status';
52+
case DETAIL = 'detail';
53+
case INTERNAL_CODE = 'internal_code';
54+
case MESSAGE = 'message';
55+
case USER_MESSAGE = 'user_message';
56+
case USER_TITLE = 'user_title';
57+
case LOCATION = 'location';
58+
case TRACE_ID = 'trace_id';
59+
}
60+
61+
```
62+
63+
64+
## Usando
65+
66+
Para usar o pacote recomendamos que sejam criadas excessões extendendo da classe `Gsousadev\LaravelProblemDetailExceptions\Exceptions\ProblemDetailException` conforme a classe de exemplo abaixo:
67+
68+
```php
69+
...
70+
71+
use Gsousadev\LaravelProblemDetailExceptions\Exceptions\ProblemDetailException;
72+
73+
class ExampleException extends ProblemDetailException
74+
```
75+
76+
Em seguida devemos criar dentro do construtor uma chamada para o construtor da classe Pai passando os parâmetros necessários para a construção da exception.
77+
78+
```php
79+
...
80+
81+
public function __construct(?\Throwable $previous = null)
82+
{
83+
parent::__construct(
84+
title: 'Titulo curto para erro. Deve ser imutável',
85+
detail: 'Descrição mais detalhada do erro podendo conter variaveis dinâmicas.' .
86+
'Pode ser mutável a cada lançamento dependendo do contexto',
87+
userTitle: 'Titulo amigavel para usuário final que pode ver o erro',
88+
userMessage: 'Detalhamento amigavel para usuário que pode ver o erro',
89+
httpStatus: 500,
90+
internalCode: 'SHRD0001',
91+
previous: $previous
92+
);
93+
}
94+
...
95+
96+
```
97+
98+
O resultado final deve ser algo como o exemplo abaixo
99+
100+
```php
101+
<?php
102+
103+
declare(strict_types=1);
104+
105+
namespace App\Exceptions;
106+
107+
use Gsousadev\LaravelProblemDetailExceptions\Exceptions\ProblemDetailException;
108+
109+
class ExampleException extends ProblemDetailException
110+
{
111+
public function __construct(?\Throwable $previous = null)
112+
{
113+
parent::__construct(
114+
title: 'Titulo curto para erro. Deve ser imutável',
115+
detail: 'Descrição mais detalhada do erro podendo conter variaveis dinâmicas.' .
116+
'Pode ser mutável a cada lançamento dependendo do contexto',
117+
userTitle: 'Titulo amigavel para usuário final que pode ver o erro',
118+
userMessage: 'Detalhamento amigavel para usuário que pode ver o erro',
119+
httpStatus: 500,
120+
internalCode: 'SHRD0001',
121+
previous: $previous
122+
);
123+
}
124+
125+
}
126+
127+
```
128+
129+
Desta maneira é possível ter uma exception bem legível, completa e com uma forma de invocação simples e direta
130+
131+
132+
```php
133+
try {
134+
...
135+
} catch(\Exception $exception){
136+
throw new ExampleException($exception);
137+
}
138+
```
139+
140+
## Contribuindo
141+
142+
O projeto esta em fase de construção da ideia inicial, mas apontamentos de melhorias são muito importantes para o
143+
crescimento. Para sugerir uma melhoria use as Issues do github.
144+
145+
## Licença
146+
147+
[MIT](https://choosealicense.com/licenses/mit/)

composer.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@
2424
},
2525
"minimum-stability": "dev",
2626
"require": {
27-
"php": "^8.2",
28-
"illuminate/support": "^10",
29-
"illuminate/http": "^10"
27+
"php": "^8.2"
28+
},
29+
"require-dev": {
30+
"orchestra/testbench": "v8.1.1"
3031
}
3132
}

0 commit comments

Comments
 (0)