Skip to content

Commit ebb1654

Browse files
committed
WIP - criando varios models e endpoints
1 parent 6205071 commit ebb1654

35 files changed

+862
-101
lines changed

README.md

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,100 @@ https://www.mitryus.com.br:8191/MitryusReports/integracao.xhtml#metodoslayout
1818
## Get started
1919

2020
* [Instalação](#Instalação)
21+
* [Configurando o SDK](#)
22+
* [Brincando com coleções e métodos mágicos](#)
23+
* [Recuperando Departamentos](#)
24+
* [Recuperar PacotesDados](#)
25+
* [Confirmando consumo de dados](#)
2126

2227

23-
#### Instalação
28+
### Instalação
2429

2530
Usando composer execute o comando para instalar o pacote:
2631

27-
`composer require prhost/mitryusweb-sdk`
32+
`composer require prhost/mitryusweb-sdk`
33+
34+
### Configurando o SDK
35+
36+
Veja o exemplo abaixo para configurar principalmente a chave de integração:
37+
38+
```php
39+
use Mitryusweb\Api\Mitryusweb;
40+
41+
Mitryusweb::$token = 'chave de integracao';
42+
43+
//Opcional, setar uma outra URL que não seja a atual da documentação
44+
Mitryusweb::$uri = 'url.ws.mitryusweb';
45+
```
46+
47+
outro exemplo:
48+
49+
```php
50+
use Mitryusweb\Api\Mitryusweb;
51+
Mitryusweb::init('chave integracao', 'url api (opcional)');
52+
```
53+
54+
### Brincando com coleções e métodos mágicos
55+
56+
#### Coleções
57+
Quando uma consulta é esperado o retorno de varios registros, ele sempre vai retornar uma model que contém uma coleção extendida da biblioteca [Collection do laravel](https://laravel.com/docs/5.7/collections).
58+
A coleção também tras em cada item de sua coleção uma model do tipo item com os dados daquele registro.
59+
60+
Exemplos de uso da coleção:
61+
62+
```php
63+
$pacoteEndpoint = new \Mitryusweb\Endpoints\PacoteDados();
64+
$pacoteDados = $pacoteEndpoint->get();
65+
66+
//Exemplo acessando uma coleção de dados
67+
$departamentos = $pacoteDados->getDepartamentos();
68+
69+
//Por departamentos também se uma lista de dados, se torna uma model do tipo coleção.
70+
foreach ($departamentos as $departamento) {
71+
$departamento->getCodDepartamento();
72+
}
73+
```
74+
75+
#### Métodos mágicos
76+
Com alguns métodos mágicos que contem nas models de retorno, é possível acessar os dados chamando chamando métodos do tipo `$pacoteDados->getDepartamentos()` que retornará apenas os departamentos daquele pacote.
77+
78+
Outra forma também é através dos atributos, por exemplo, `$pacoteDados->Departamentos` ou `$pacoteDados->codigo_confirmacao`. Confira a lista de atributos chamando `$pacoteDados->getAttributeMap()`
79+
80+
Alguns outros exemplos com método mágico e coleções:
81+
82+
### Recuperando Departamentos
83+
84+
Para recuperar os departamentos, use o EndPoint `Departamentos`:
85+
86+
```php
87+
$departamentosEndpoint = new \Mitryusweb\Endpoints\Departamentos();
88+
89+
//Retorna uma model de coleção baseada na instancia da biblioteca Collection do laravel
90+
$departamentos = $departamentosEndpoint->get();
91+
```
92+
93+
### Recuperar PacoteDados
94+
95+
Para recuperar todos os dados em um unico pacote, use o EndPoint `PacoteDados`:
96+
97+
```php
98+
$pacoteEndpoint = new \Mitryusweb\Endpoints\PacoteDados();
99+
100+
//Retorna uma model do tipo PacoteDados contendo varias coleções de cada dado.
101+
$pacoteDados = $pacoteEndpoint->get();
102+
103+
//Você também pode auto confirmar a recuperação do pacote passando true no paramentro do get():
104+
$pacoteDados = $pacoteEndpoint->get(true);
105+
106+
```
107+
108+
### Confirnamdo consumo de dados
109+
110+
Para confirmar que recebeu os dados corretamente usando o codigo_confirmacao use o exemplo abaixo:
111+
112+
```php
113+
$pacoteEndPoint = new \Mitryusweb\Endpoints\PacoteDados();
114+
115+
$codigo_confirmacao = 123;
116+
$pacoteEndPoint->confimar($codigo_confirmacao);
117+
```
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Mitryusweb\Classes;
3+
namespace Mitryusweb\Api;
44

55
use Mitryusweb\Client\ApiClient;
66
use Mitryusweb\Client\Response;
@@ -20,7 +20,7 @@ class Mitryusweb
2020
* Api uri
2121
* @var string
2222
*/
23-
public static $uri = 'https://wss.mitryus.com.br:8087/wsintegracao';
23+
public static $uri = 'https://wss.mitryus.com.br:8087/wsintegracao/api/ecommerce/integracao/';
2424

2525
/**
2626
* @var ApiClient
@@ -49,7 +49,7 @@ public static function init(string $token = null, string $uri = null)
4949
'base_uri' => ($uri ? $uri : self::$uri),
5050
'handler' => $stack,
5151
'headers' => [
52-
'Accept' => 'application/json',
52+
'Content-Type' => 'application/json',
5353
'Authorization' => 'Bearer ' . ($token ? $token : self::$token),
5454
]
5555
]);

src/Classes/EndpointBase.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Mitryusweb\Classes;
44

55

6+
use Mitryusweb\Api\Mitryusweb;
67
use Mitryusweb\Client\ApiClient;
78
use Mitryusweb\Client\Response;
89

@@ -18,8 +19,8 @@ public function __construct($apiClient = null)
1819
if (null === $apiClient) {
1920
if (Mitryusweb::$apiClient === null) {
2021
Mitryusweb::init();
21-
} else
22-
$this->apiClient = Mitryusweb::$apiClient;
22+
}
23+
$this->apiClient = Mitryusweb::$apiClient;
2324
} else {
2425
$this->apiClient = $apiClient;
2526
}

src/Classes/ModelBase.php

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace Mitryusweb\Classes;
4+
5+
6+
abstract class ModelCollectionBase extends Collection
7+
{
8+
use TraitModelBase;
9+
10+
public function __construct($data = null)
11+
{
12+
if ($data && $data instanceof \StdClass) {
13+
foreach ($this->getAttributeMap() as $attribute => $type) {
14+
if (property_exists($data, $attribute)) {
15+
$modelClass = $this->getModelClassFromAttribute($attribute);
16+
if (class_exists($modelClass) && is_array($data->{$attribute})) {
17+
foreach ($data->{$attribute} as $value) {
18+
$this->push(new $modelClass($value));
19+
}
20+
} else {
21+
$this->{$attribute} = $data->{$attribute};
22+
}
23+
}
24+
}
25+
} else {
26+
parent::__construct($data);
27+
}
28+
}
29+
30+
protected function getModelClassFromAttribute(string $attribute)
31+
{
32+
return '\Mitryusweb\Model\\' . ($this->itemAttributeModel[$attribute] ?? '');
33+
}
34+
35+
public function __get($attribute)
36+
{
37+
$modelClass = $this->getModelClassFromAttribute($attribute);
38+
if (class_exists($modelClass)) {
39+
return $this->whereInstanceOf($modelClass);
40+
} else {
41+
$value = $this->attributeValues[$attribute] ?? null;
42+
43+
if (!$value) {
44+
return parent::__get($attribute);
45+
}
46+
47+
return $value;
48+
}
49+
}
50+
51+
public function __call($name, $arguments)
52+
{
53+
if (strpos($name, 'get') === 0) {
54+
$attribute = ltrim($name, 'get');
55+
return $this->{$attribute};
56+
}
57+
}
58+
}

src/Classes/ModelItemBase.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Mitryusweb\Classes;
4+
5+
6+
abstract class ModelItemBase
7+
{
8+
use TraitModelBase;
9+
10+
public function __construct(\StdClass $data)
11+
{
12+
foreach ($this->getAttributeMap() as $attribute => $type) {
13+
$this->{$attribute} = $data->{$attribute};
14+
}
15+
}
16+
17+
public function toArray()
18+
{
19+
return $this->attributeValues;
20+
}
21+
}

src/Classes/TraitModelBase.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace Mitryusweb\Classes;
4+
5+
6+
trait TraitModelBase
7+
{
8+
protected $attributeMap = [];
9+
10+
protected $attributeValues = [];
11+
12+
protected $itemAttributeModel = [];
13+
14+
/**
15+
* @return array
16+
*/
17+
public function getAttributeMap(): array
18+
{
19+
return $this->attributeMap;
20+
}
21+
22+
/**
23+
* @param array $attributeMap
24+
*/
25+
public function setAttributeMap(array $attributeMap): void
26+
{
27+
$this->attributeMap = $attributeMap;
28+
}
29+
30+
public function __set($attribute, $value)
31+
{
32+
$this->attributeValues[$attribute] = $value;
33+
}
34+
35+
public function __get($attribute)
36+
{
37+
return $this->attributeValues[$attribute] ?? null;
38+
}
39+
40+
public function __call($name, $arguments)
41+
{
42+
if (strpos($name, 'get') === 0) {
43+
$attribute = ltrim($name, 'get');
44+
return $this->{snake_case($attribute)};
45+
}
46+
}
47+
48+
/**
49+
* @return array
50+
*/
51+
public function getItemAttributeModel(): array
52+
{
53+
return $this->itemAttributeModel;
54+
}
55+
56+
/**
57+
* @param array $itemAttributeModel
58+
*/
59+
public function setItemAttributeModel(array $itemAttributeModel): void
60+
{
61+
$this->itemAttributeModel = $itemAttributeModel;
62+
}
63+
}

src/Endpoints/PacoteDados.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace Mitryusweb\Endpoints;
4+
5+
use Mitryusweb\Classes\EndpointBase;
6+
use \Mitryusweb\Model\PacoteDados as PacoteDadosModel;
7+
8+
class PacoteDados extends EndpointBase
9+
{
10+
/**
11+
* @see https://www.mitryus.com.br:8191/MitryusReports/integracao.xhtml#ApiPacoteDados
12+
* @return PacoteDadosModel
13+
*/
14+
public function get(bool $confirmar = false): PacoteDadosModel
15+
{
16+
$response = $this->request('GET', 'pacotedados')->getResponse();
17+
18+
$model = new PacoteDadosModel($response);
19+
20+
if ($confirmar) {
21+
$this->confirm($model->codigo_confirmacao, true);
22+
}
23+
24+
return $model;
25+
}
26+
27+
/**
28+
* @see https://www.mitryus.com.br:8191/MitryusReports/integracao.xhtml#ApiConfirmacao
29+
* @param int $codigo_confirmacao
30+
* @param bool $status
31+
*/
32+
public function confirm(int $codigo_confirmacao, bool $status = true): void
33+
{
34+
$status = $status ? 'true' : 'false';
35+
$this->request('GET', "confirmacao/$codigo_confirmacao/$status")->getResponse();
36+
}
37+
}

src/Endpoints/Produtos.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Mitryusweb\Endpoints;
4+
5+
use Mitryusweb\Classes\EndpointBase;
6+
use \Mitryusweb\Model\Produtos as ProdutosModel;
7+
8+
class Produtos extends EndpointBase
9+
{
10+
/**
11+
* @see https://www.mitryus.com.br:8191/MitryusReports/integracao.xhtml#ApiProdutos
12+
*
13+
* @return DepartamentosModel
14+
*/
15+
public function get(): ProdutosModel
16+
{
17+
$response = $this->request('GET', 'produtos')->getResponse();
18+
19+
return new ProdutosModel($response);
20+
}
21+
}

0 commit comments

Comments
 (0)