ixc-orm 1.4.2 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # IXC-ORM
1
+ # IXC-ORM [![npm](https://img.shields.io/npm/dt/ixc-orm.svg)](https://www.npmjs.com/package/ixc-orm)
2
2
 
3
3
  Este ORM simples visa facilitar o consumo de dados da API oficial do IXCsoft.\
4
4
  Esta biblioteca não faz parte das bibliotecas oficiais da IXCsoft e foi desenvolvida de forma independente e sem fins lucrativos.
@@ -6,8 +6,13 @@ Esta biblioteca não faz parte das bibliotecas oficiais da IXCsoft e foi desenvo
6
6
 
7
7
  ## 🚀 Novidades
8
8
 
9
- ### v1.4.1 - 14 de agosto de 2025
9
+ ### v1.4.4 - 15 de agosto de 2025
10
+ * **Melhorado:** Foi adicionado um método `find()` a classe `IXCClient`, para encontrar um registro pelo seu `id` de uma forma mais simples.
11
+
12
+ ### v1.4.3 - 15 de agosto de 2025
13
+ * **Melhorado:** Os métodos `get()`, `post()` e `put()` da classe `IXCClient`, a partir de agora sempre retornarão um objeto `IXCResponse`, indepedente da requisição falhar ou não.
10
14
 
15
+ ### v1.4.1 - 14 de agosto de 2025
11
16
  * **Corrigido:** Resolvido o bug de leitura das variáveis de ambiente no arquivo .env na pasta raiz.
12
17
  * **Novo:** Foram adicionados 3 dos 44 recursos da API do IXC: `get_boleto`, `liberacao_temporaria` e `desbloqueio_confianca`. (Futuramente novos recursos serão adicionados)
13
18
 
@@ -1,24 +1,25 @@
1
- import { AxiosError } from 'axios';
2
1
  import { IXCOptions, IXCQuery, IXCResponse, IXCSortOrder } from './types';
3
2
  export default abstract class IXCClient {
4
3
  protected table: string;
5
4
  protected params: IXCQuery[];
6
5
  protected options: IXCOptions;
7
6
  /**
8
- *
9
7
  * @param table O nome da tabela correspondente ao banco de dados do seu servidor IXC
10
8
  * @see {@link https://wikiapiprovedor.ixcsoft.com.br/index.php}
11
9
  */
12
10
  constructor(table: string);
13
11
  /**
12
+ * Incrementa o array de parâmetros que serão trasformados no corpo de uma requisição
13
+ * e passados como filtro grid da API do IXC
14
14
  *
15
- * @param whereClauses Um array de strings, no formato [coluna, operador, valor]
16
- * Obs: se você passar um array no formato [coluna, valor] o operador será considerado como '='
17
- * Operadores válidos: =, !=, >, <, >=, <=, LIKE
15
+ * @param whereClauses Um array de strings, no formato [coluna, operador, valor]\
16
+ * `Obs`: se você passar um array no formato [coluna, valor] o operador será considerado como '='\
17
+ * Os operadores válidos são: =, !=, >, <, >=, <=, LIKE
18
18
  * @returns A própria instância
19
19
  */
20
20
  where(whereClauses: string[]): IXCClient;
21
21
  /**
22
+ * Define como a API do IXC ordenará os dados retornados
22
23
  *
23
24
  * @param column A coluna que será usada para ordenar a busca
24
25
  * @param order A ordem da busca ('asc'ou 'desc')
@@ -26,28 +27,41 @@ export default abstract class IXCClient {
26
27
  */
27
28
  orderBy(column: string, order: keyof typeof IXCSortOrder): IXCClient;
28
29
  /**
30
+ * Envia uma requisição GET para a API do IXC, com o header `ixcsoft` definico como `listar`\
31
+ * A `query` dessa requisição não será enviada para o IXC com o parâmetro `grid_param`\
32
+ * Ou seja, esta requisição executa uma busca simples, em vez do filtro de grid
33
+ *
34
+ * @param id O identificador numérico do registro que será buscado no IXC
35
+ * @returns Promise<IXCResponse>
36
+ */
37
+ find(id: any): Promise<IXCResponse>;
38
+ /**
39
+ * Envia uma requisição GET para a API do IXC, com o header `ixcsoft` definico como `listar`
40
+ * Preenche o corpo da requisição com os dados passados pela função `where` no formado JSON
29
41
  *
30
- * @param pg O número da página que será solicitada ao IXC
31
- * @param rows A quantidade de linhas (registros) por página
32
- * @returns Promise<null | IXCResponse | AxiosError>
42
+ * @param pg O número da página que será solicitada ao IXC `padão = 1`
43
+ * @param rows A quantidade de linhas (registros) por página `padrão = 20`
44
+ * @returns Promise<IXCResponse>
33
45
  */
34
- get(pg?: number, rows?: number): Promise<null | IXCResponse | AxiosError>;
46
+ get(pg?: number, rows?: number): Promise<IXCResponse>;
35
47
  /**
48
+ * Envia uma requisição do tipo `POST` para a API do IXC, com o header `ixcsoft` vazio
36
49
  *
37
50
  * @param body Um objeto no formado "chave: valor" contendo as informações do novo registro
38
51
  * a ser inserido no banco de dados do seu servidor IXC
39
- * @returns Promise<null | IXCResponse | AxiosError>
52
+ * @returns Promise<IXCResponse>
40
53
  */
41
54
  post(body?: {
42
55
  [key: string]: any;
43
- }): Promise<null | IXCResponse | AxiosError>;
56
+ }): Promise<IXCResponse>;
44
57
  /**
58
+ * Envia uma requisição do tipo `PUT` para a API do IXC, com o header `ixcsoft` vazio
45
59
  *
46
60
  * @param id O id do registro que será alterado
47
61
  * @param body Um objeto no formado "chave : valor" contendo as colunas que serão alteradas
48
- * @returns Promise<null | IXCResponse | AxiosError>
62
+ * @returns Promise<IXCResponse>
49
63
  */
50
64
  put(id: number, body?: {
51
65
  [key: string]: any;
52
- }): Promise<null | IXCResponse | AxiosError>;
66
+ }): Promise<IXCResponse>;
53
67
  }
package/dist/IXCClient.js CHANGED
@@ -20,12 +20,11 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  return t;
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- const axios_1 = require("axios");
24
23
  const request_1 = require("./request");
25
24
  const types_1 = require("./types");
25
+ const response_1 = require("./response");
26
26
  class IXCClient {
27
27
  /**
28
- *
29
28
  * @param table O nome da tabela correspondente ao banco de dados do seu servidor IXC
30
29
  * @see {@link https://wikiapiprovedor.ixcsoft.com.br/index.php}
31
30
  */
@@ -40,10 +39,12 @@ class IXCClient {
40
39
  };
41
40
  }
42
41
  /**
42
+ * Incrementa o array de parâmetros que serão trasformados no corpo de uma requisição
43
+ * e passados como filtro grid da API do IXC
43
44
  *
44
- * @param whereClauses Um array de strings, no formato [coluna, operador, valor]
45
- * Obs: se você passar um array no formato [coluna, valor] o operador será considerado como '='
46
- * Operadores válidos: =, !=, >, <, >=, <=, LIKE
45
+ * @param whereClauses Um array de strings, no formato [coluna, operador, valor]\
46
+ * `Obs`: se você passar um array no formato [coluna, valor] o operador será considerado como '='\
47
+ * Os operadores válidos são: =, !=, >, <, >=, <=, LIKE
47
48
  * @returns A própria instância
48
49
  */
49
50
  where(whereClauses) {
@@ -63,6 +64,7 @@ class IXCClient {
63
64
  return this;
64
65
  }
65
66
  /**
67
+ * Define como a API do IXC ordenará os dados retornados
66
68
  *
67
69
  * @param column A coluna que será usada para ordenar a busca
68
70
  * @param order A ordem da busca ('asc'ou 'desc')
@@ -74,27 +76,86 @@ class IXCClient {
74
76
  return this;
75
77
  }
76
78
  /**
79
+ * Envia uma requisição GET para a API do IXC, com o header `ixcsoft` definico como `listar`\
80
+ * A `query` dessa requisição não será enviada para o IXC com o parâmetro `grid_param`\
81
+ * Ou seja, esta requisição executa uma busca simples, em vez do filtro de grid
77
82
  *
78
- * @param pg O número da página que será solicitada ao IXC
79
- * @param rows A quantidade de linhas (registros) por página
80
- * @returns Promise<null | IXCResponse | AxiosError>
83
+ * @param id O identificador numérico do registro que será buscado no IXC
84
+ * @returns Promise<IXCResponse>
85
+ */
86
+ find(id) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ var _a, _b;
89
+ const params = {
90
+ TB: 'id',
91
+ OP: '=',
92
+ P: id
93
+ };
94
+ const opts = {
95
+ page: 1,
96
+ rowsPerPage: 1,
97
+ };
98
+ const axios = (0, request_1.createAxiosInstance)('GET');
99
+ const data = (0, request_1.createRequestPayload)(this.table, params, opts);
100
+ try {
101
+ const response = yield axios.get(this.table, { data });
102
+ if (response.status === 200) {
103
+ return response.data;
104
+ }
105
+ return (0, response_1.createResponse)({
106
+ error: true,
107
+ message: (_a = response.data) === null || _a === void 0 ? void 0 : _a.message
108
+ });
109
+ }
110
+ catch (error) {
111
+ console.error(error);
112
+ return (0, response_1.createResponse)({
113
+ error: true,
114
+ message: ((_b = error.response) === null || _b === void 0 ? void 0 : _b.statusText) || error.message || 'Erro desconhecido'
115
+ });
116
+ }
117
+ finally {
118
+ this.params = [];
119
+ this.options = {
120
+ page: 1,
121
+ rowsPerPage: 20,
122
+ sortName: 'id',
123
+ sortOrder: 'asc'
124
+ };
125
+ }
126
+ });
127
+ }
128
+ /**
129
+ * Envia uma requisição GET para a API do IXC, com o header `ixcsoft` definico como `listar`
130
+ * Preenche o corpo da requisição com os dados passados pela função `where` no formado JSON
131
+ *
132
+ * @param pg O número da página que será solicitada ao IXC `padão = 1`
133
+ * @param rows A quantidade de linhas (registros) por página `padrão = 20`
134
+ * @returns Promise<IXCResponse>
81
135
  */
82
136
  get(pg, rows) {
83
137
  return __awaiter(this, void 0, void 0, function* () {
84
- const _a = this.options, { page, rowsPerPage } = _a, rest = __rest(_a, ["page", "rowsPerPage"]);
138
+ var _a, _b;
139
+ const _c = this.options, { page, rowsPerPage } = _c, rest = __rest(_c, ["page", "rowsPerPage"]);
85
140
  const opts = Object.assign({ page: pg !== null && pg !== void 0 ? pg : page, rowsPerPage: rows !== null && rows !== void 0 ? rows : rowsPerPage }, rest);
86
141
  const axios = (0, request_1.createAxiosInstance)('GET');
87
- const payload = (0, request_1.createRequestPayload)(this.table, this.params, opts);
142
+ const data = (0, request_1.createRequestPayload)(this.table, this.params, opts);
88
143
  try {
89
- const response = yield axios.get(this.table, payload);
90
- return response.data;
144
+ const response = yield axios.get(this.table, { data });
145
+ if (response.status === 200) {
146
+ return response.data;
147
+ }
148
+ return (0, response_1.createResponse)({
149
+ error: true,
150
+ message: (_a = response.data) === null || _a === void 0 ? void 0 : _a.message
151
+ });
91
152
  }
92
153
  catch (error) {
93
154
  console.error(error);
94
- if (error instanceof axios_1.AxiosError) {
95
- return error;
96
- }
97
- return null;
155
+ return (0, response_1.createResponse)({
156
+ error: true,
157
+ message: ((_b = error.response) === null || _b === void 0 ? void 0 : _b.statusText) || error.message || 'Erro desconhecido'
158
+ });
98
159
  }
99
160
  finally {
100
161
  this.params = [];
@@ -108,24 +169,32 @@ class IXCClient {
108
169
  });
109
170
  }
110
171
  /**
172
+ * Envia uma requisição do tipo `POST` para a API do IXC, com o header `ixcsoft` vazio
111
173
  *
112
174
  * @param body Um objeto no formado "chave: valor" contendo as informações do novo registro
113
175
  * a ser inserido no banco de dados do seu servidor IXC
114
- * @returns Promise<null | IXCResponse | AxiosError>
176
+ * @returns Promise<IXCResponse>
115
177
  */
116
178
  post(body) {
117
179
  return __awaiter(this, void 0, void 0, function* () {
180
+ var _a, _b;
118
181
  const axios = (0, request_1.createAxiosInstance)('POST');
119
182
  try {
120
183
  const response = yield axios.post(this.table, { data: body });
121
- return response.data;
184
+ if (response.status === 200) {
185
+ return response.data;
186
+ }
187
+ return (0, response_1.createResponse)({
188
+ error: true,
189
+ message: (_a = response.data) === null || _a === void 0 ? void 0 : _a.message
190
+ });
122
191
  }
123
192
  catch (error) {
124
193
  console.error(error);
125
- if (error instanceof axios_1.AxiosError) {
126
- return error;
127
- }
128
- return null;
194
+ return (0, response_1.createResponse)({
195
+ error: true,
196
+ message: ((_b = error.response) === null || _b === void 0 ? void 0 : _b.statusText) || error.message || 'Erro desconhecido'
197
+ });
129
198
  }
130
199
  finally {
131
200
  this.params = [];
@@ -133,24 +202,32 @@ class IXCClient {
133
202
  });
134
203
  }
135
204
  /**
205
+ * Envia uma requisição do tipo `PUT` para a API do IXC, com o header `ixcsoft` vazio
136
206
  *
137
207
  * @param id O id do registro que será alterado
138
208
  * @param body Um objeto no formado "chave : valor" contendo as colunas que serão alteradas
139
- * @returns Promise<null | IXCResponse | AxiosError>
209
+ * @returns Promise<IXCResponse>
140
210
  */
141
211
  put(id, body) {
142
212
  return __awaiter(this, void 0, void 0, function* () {
213
+ var _a, _b;
143
214
  const axios = (0, request_1.createAxiosInstance)('PUT');
144
215
  try {
145
216
  const response = yield axios.put(`${this.table}/${id}`, { data: body });
146
- return response.data;
217
+ if (response.status === 200) {
218
+ return response.data;
219
+ }
220
+ return (0, response_1.createResponse)({
221
+ error: true,
222
+ message: (_a = response.data) === null || _a === void 0 ? void 0 : _a.message
223
+ });
147
224
  }
148
225
  catch (error) {
149
226
  console.error(error);
150
- if (error instanceof axios_1.AxiosError) {
151
- return error;
152
- }
153
- return null;
227
+ return (0, response_1.createResponse)({
228
+ error: true,
229
+ message: ((_b = error.response) === null || _b === void 0 ? void 0 : _b.statusText) || error.message || 'Erro desconhecido'
230
+ });
154
231
  }
155
232
  finally {
156
233
  this.params = [];
package/dist/request.d.ts CHANGED
@@ -1,16 +1,20 @@
1
- import { AxiosInstance, AxiosRequestConfig } from 'axios';
1
+ import { AxiosInstance } from 'axios';
2
2
  import { IXCOptions, IXCQuery, IXCRequest, IXCRequestMethods } from './types';
3
3
  /**
4
+ * Cria uma instância de um objeto AxiosInstance, pré-configurado com os cabeçalhos necessários
5
+ * para executar uma requisição para a API do IXC
4
6
  *
5
7
  * @param method GET | POST | PUT | DELETE
6
- * @returns A instância de um objeto do tipo AxiosInstance, pré-configurado com os cabeçalhos necessários
8
+ * @returns AxiosInstance
7
9
  */
8
10
  export declare function createAxiosInstance(method?: keyof typeof IXCRequestMethods): AxiosInstance;
9
11
  /**
12
+ * Cria um objeto `IXCRequest` configurado para ser utilizado como payload de uma requisição
13
+ * para a API do IXC
10
14
  *
11
15
  * @param table Nome da tabela do IXC onde será feita a busca, atualização, inserção ou remoção
12
16
  * @param params Parâmetros da busca (desconsiderados quando a ação for a de inserir novos registros)
13
17
  * @param options Parâmetros de formatação dos dados da responsta (página, ítens por página e ordenação)
14
- * @returns
18
+ * @returns IXCRequest
15
19
  */
16
- export declare function createRequestPayload(table: string, params: IXCQuery | IXCQuery[], options?: IXCOptions): AxiosRequestConfig<IXCRequest>;
20
+ export declare function createRequestPayload(table: string, params: IXCQuery | IXCQuery[], options?: IXCOptions): IXCRequest;
package/dist/request.js CHANGED
@@ -7,9 +7,11 @@ exports.createAxiosInstance = createAxiosInstance;
7
7
  exports.createRequestPayload = createRequestPayload;
8
8
  const axios_1 = __importDefault(require("axios"));
9
9
  /**
10
+ * Cria uma instância de um objeto AxiosInstance, pré-configurado com os cabeçalhos necessários
11
+ * para executar uma requisição para a API do IXC
10
12
  *
11
13
  * @param method GET | POST | PUT | DELETE
12
- * @returns A instância de um objeto do tipo AxiosInstance, pré-configurado com os cabeçalhos necessários
14
+ * @returns AxiosInstance
13
15
  */
14
16
  function createAxiosInstance(method = 'GET') {
15
17
  const host = process.env.IXC_HOST;
@@ -25,11 +27,13 @@ function createAxiosInstance(method = 'GET') {
25
27
  });
26
28
  }
27
29
  /**
30
+ * Cria um objeto `IXCRequest` configurado para ser utilizado como payload de uma requisição
31
+ * para a API do IXC
28
32
  *
29
33
  * @param table Nome da tabela do IXC onde será feita a busca, atualização, inserção ou remoção
30
34
  * @param params Parâmetros da busca (desconsiderados quando a ação for a de inserir novos registros)
31
35
  * @param options Parâmetros de formatação dos dados da responsta (página, ítens por página e ordenação)
32
- * @returns
36
+ * @returns IXCRequest
33
37
  */
34
38
  function createRequestPayload(table, params, options) {
35
39
  var _a, _b, _c, _d;
@@ -46,24 +50,24 @@ function createRequestPayload(table, params, options) {
46
50
  P: p.P
47
51
  });
48
52
  });
49
- return { data: {
50
- qtype: table,
51
- query: '',
52
- oper: '',
53
- page: page,
54
- rp: rowsPerPage,
55
- sortname: `${table}.${sortName}`,
56
- sortorder: sortOrder,
57
- grid_param: JSON.stringify(grid_param)
58
- } };
59
- }
60
- return { data: {
61
- qtype: `${table}.${params.TB}`,
62
- query: params.P,
63
- oper: params.OP || '=',
53
+ return {
54
+ qtype: table,
55
+ query: '',
56
+ oper: '',
64
57
  page: page,
65
58
  rp: rowsPerPage,
66
59
  sortname: `${table}.${sortName}`,
67
- sortorder: sortOrder
68
- } };
60
+ sortorder: sortOrder,
61
+ grid_param: JSON.stringify(grid_param)
62
+ };
63
+ }
64
+ return {
65
+ qtype: `${table}.${params.TB}`,
66
+ query: params.P,
67
+ oper: params.OP || '=',
68
+ page: page,
69
+ rp: rowsPerPage,
70
+ sortname: `${table}.${sortName}`,
71
+ sortorder: sortOrder
72
+ };
69
73
  }
package/dist/types.d.ts CHANGED
@@ -40,7 +40,7 @@ export interface IXCRequest {
40
40
  }
41
41
  export interface IXCResponse {
42
42
  error?: boolean | object;
43
- message?: string | null;
43
+ message?: string;
44
44
  id?: string | number;
45
45
  page: number | string;
46
46
  total: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ixc-orm",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",