Skip to content

Commit

Permalink
Merge pull request #3 from AlexandreBellas/develop
Browse files Browse the repository at this point in the history
Improve README, fix package's entrypoint, reinforce interface naming convention and add logic to boost perfomance
  • Loading branch information
vitor-san committed Oct 19, 2021
2 parents 842c108 + 4ec9211 commit e1e8e8f
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 57 deletions.
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,19 @@ package-lock.json

# TS build output
lib/

### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace

# Local History for Visual Studio Code
.history/

### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
36 changes: 18 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
[![install size](https://packagephobia.com/badge?p=bling-erp-api)](https://packagephobia.com/result?p=bling-erp-api)
[![code coverage](https://coveralls.io/repos/github/AlexandreBellas/bling-erp-api/badge.svg?branch=main)](https://coveralls.io/github/AlexandreBellas/bling-erp-api?branch=main)

Pacote de integração com a API do Bling ERP. O mais completo existente (e se não é, será).
Disponível também para Typescript.
Pacote de integração com a [API do ERP Bling](https://ajuda.bling.com.br/hc/pt-br/categories/360002186394-API-para-Desenvolvedores). O mais completo existente (e se não é, será).
Disponível também para **Typescript**.

Em desenvolvimento.

## Instalação

Para instalar, execute o comando
Para instalar, execute o comando:

```bash
npm i bling-erp-api
Expand All @@ -33,8 +33,8 @@ import Bling from 'bling-erp-api'

## Criação de uma nova conexão

É possível criar uma conexão ao serviço bastando instanciar o objeto com a API
key em seu construtor.
Para criar uma conexão ao serviço do Bling, basta instanciar o objeto com a [API
key](https://ajuda.bling.com.br/hc/pt-br/articles/360046937853-Introdu%C3%A7%C3%A3o-para-a-API-do-Bling-para-desenvolvedores-) em seu construtor.

```js
const apiKey = 'sua_api_key'
Expand All @@ -43,7 +43,7 @@ const blingConnection = new Bling(apiKey)

## Entidades disponíveis

As entidades atualmente permitidas para interação são somente
As entidades atualmente permitidas para interação são somente:

- Produtos
- Pedidos
Expand All @@ -52,21 +52,19 @@ Em breve serão adicionadas mais.

## Métodos permitidos

Os métodos permitidos são

- `all()`: retornam-se todos os registros da entidade
- `find()`: retorna-se a entidade desejada através de seu `id` ou `codigo`
- `findBy()`: retornam-se os registros da entidade que se adequem aos filtros
passados
- `create()`: cria-se um registro de uma entidade
- `update()`: atualiza-se um registro de uma entidade a partir de seu `id` ou
- `all()`: retorna todos os registros da entidade
- `find()`: retorna um registro da entidade desejada através de seu `id` ou `codigo`
- `findBy()`: retorna os registros da entidade **que se adequem aos filtros
passados**
- `create()`: cria um registro da entidade
- `update()`: atualiza um registro da entidade a partir de seu `id` ou
`codigo`
- `delete()`: remove-se um registro de uma entidade a partir de seu `id` ou
- `delete()`: remove um registro da entidade a partir de seu `id` ou
`codigo`

## Exemplo de uso

Para listar todos os produtos, basta-se executar
Para listar todos os produtos, basta executar:

```js
const Bling = require('bling-erp-api')
Expand All @@ -82,7 +80,9 @@ console.log(products)
## Autores do projeto

Os contribuidores principais, sem fins lucrativos, para a escolha das
tecnologias e estrutura do projeto são
tecnologias e estrutura do projeto são:

- Alexandre Batistella Bellas; [LinkedIn](https://linkedin.com/in/alebatistella/)
- Vitor Santana Cordeiro; [LikedIn](https://linkedin.com/in/vitorsanc)
- Vitor Santana Cordeiro; [LinkedIn](https://linkedin.com/in/vitorsanc)

No futuro, contribuições da comunidade serão extremamente apreciadas! Ainda não possuímos as *guidelines de contribuição* definidas (`CONTRIBUTING.md`), mas assim que as tivermos nós iremos apreciar fortemente a contribuição da comunidade, inclusive por meio da abertura de *issues* 😊
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "bling-erp-api",
"version": "1.0.2",
"description": "Pacote de interação com a REST API do serviço Bling ERP",
"main": "index.js",
"main": "src/bling.ts",
"directories": {
"test": "test"
},
Expand Down
17 changes: 12 additions & 5 deletions src/bling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import axios, { AxiosInstance } from 'axios'
import createError from './core/createError'

export default class Bling {
private api: AxiosInstance
#api: AxiosInstance
#products: Products | undefined
#orders: Orders | undefined

constructor (apiKey: string) {
if (!apiKey || typeof apiKey !== 'string') {
Expand All @@ -28,18 +30,23 @@ export default class Bling {
apikey: apiKey,
...config.params
}

return config
})

this.api = api
this.#api = api
}

public products () {
return new Products(this.api)
if (!this.#products) {
this.#products = new Products(this.#api)
}
return this.#products
}

public orders () {
return new Orders(this.api)
if (!this.#orders) {
this.#orders = new Orders(this.#api)
}
return this.#orders
}
}
2 changes: 1 addition & 1 deletion src/core/entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { AxiosInstance } from 'axios'
import * as qs from 'querystring'
import * as xml2js from 'xml2js'

export interface BlingBaseResponse<T> {
export interface IBlingBaseResponse<T> {
retorno: T
}

Expand Down
28 changes: 14 additions & 14 deletions src/entities/orders.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/* eslint-disable camelcase */
import BlingEntity, { BlingBaseResponse } from '../core/entity'
import { AxiosInstance } from 'axios'
import BlingEntity, { IBlingBaseResponse } from '../core/entity'
import { AxiosInstance as IAxiosInstance } from 'axios'

export interface Order {
export interface IOrder {
data?: Date
data_saida?: Date
data_prevista?: Date
Expand Down Expand Up @@ -88,34 +88,34 @@ export interface Order {
}
}

export interface OrderInfos {
export interface IOrderInfos {
historico: 'true' | 'false'
}

export interface OrderFilters {
export interface IOrderFilters {
dataEmissao: string
dataAlteracao: string
dataPrevista: string
idSituacao: string
idContato: string
}

export interface OrderResponse {
export interface IOrderResponse {
pedidos: {
pedido: Order
pedido: IOrder
}[]
}

export interface OrderError {}
export interface IOrderError {}

export default class Orders extends BlingEntity<
Order,
OrderFilters,
OrderInfos,
BlingBaseResponse<OrderResponse>,
OrderError
IOrder,
IOrderFilters,
IOrderInfos,
IBlingBaseResponse<IOrderResponse>,
IOrderError
> {
constructor (api: AxiosInstance) {
constructor (api: IAxiosInstance) {
super(api)

this.singularName = 'pedido'
Expand Down
30 changes: 15 additions & 15 deletions src/entities/products.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/* eslint-disable camelcase */
import BlingEntity, { BlingBaseResponse } from '../core/entity'
import { AxiosInstance } from 'axios'
import BlingEntity, { IBlingBaseResponse } from '../core/entity'
import { AxiosInstance as IAxiosInstance } from 'axios'

export interface Product {
export interface IProduct {
codigo?: string
codigoItem?: '06' | '21' | '22'
descricao: string
Expand Down Expand Up @@ -89,13 +89,13 @@ export interface Product {
}
}

export interface ProductInfos {
export interface IProductInfos {
estoque?: 'S'
loja?: string
imagem?: 'S'
}

export interface ProductFilters {
export interface IProductFilters {
dataInclusao?: string
dataAlteracao?: string
dataAlteracaoLoja?: string
Expand All @@ -104,13 +104,13 @@ export interface ProductFilters {
situacao?: 'A' | 'I'
}

export interface ProductResponse {
export interface IProductResponse {
produtos: {
produto: Product
produto: IProduct
}[]
}

export interface ProductError {
export interface IProductError {
code:
| '40'
| '41'
Expand All @@ -128,13 +128,13 @@ export interface ProductError {
}

export default class Products extends BlingEntity<
Product,
ProductFilters,
ProductInfos,
BlingBaseResponse<ProductResponse>,
ProductError
IProduct,
IProductFilters,
IProductInfos,
IBlingBaseResponse<IProductResponse>,
IProductError
> {
constructor (api: AxiosInstance) {
constructor (api: IAxiosInstance) {
super(api)

this.singularName = 'produto'
Expand All @@ -144,7 +144,7 @@ export default class Products extends BlingEntity<
async findBySupplierCode (
code: string,
supplierId: number,
params: ProductInfos
params: IProductInfos
) {
return await this._getOne(String(supplierId), `produto/${code}`, params)
}
Expand Down
11 changes: 8 additions & 3 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
{
"compilerOptions": {
"target": "es5",
"target": "es6",
"module": "commonjs",
"declaration": true,
"outDir": "./lib",
"strict": true,
"esModuleInterop": true,
"allowJs": true
},
"include": ["src"],
"exclude": ["node_modules", "test/*"]
"include": [
"src"
],
"exclude": [
"node_modules",
"test/*"
]
}

0 comments on commit e1e8e8f

Please sign in to comment.