Skip to content

Commit 00e86e2

Browse files
committed
Merge branch 'develop'
2 parents a08f0aa + c88a266 commit 00e86e2

File tree

93 files changed

+4170
-647
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+4170
-647
lines changed

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ git clone https://github.com/DP6/penguin-adinfo.git
7979
{
8080
company: "NOME_EMPRESA" (string)
8181
permission: "owner"(string)
82+
email: "email_do_usuario" (string)
83+
password: "senha_criptografada" (string)
8284
}
8385
```
8486

@@ -106,6 +108,8 @@ Para a configuração inicial do Firestore, são necessárias duas coleções.
106108
{
107109
company: "NOME_EMPRESA" (string)
108110
permission: "owner"(string)
111+
email: "email_do_usuario" (string)
112+
password: "senha_criptografada" (string)
109113
}
110114
```
111115

@@ -115,11 +119,17 @@ Para a configuração inicial do Firestore, são necessárias duas coleções.
115119

116120
Para utilizar a API, é necessário criar um documento de configuração no Firestore dentro da coleção: companies > [nome_empresa] > config. O nome do documento deve ser **config_1** e ele deve conter os campos: **csvSeparator**, **separator**, **spaceSeparator**, **columns** e um campo para a ferramenta de analytics, sendo esse o valor de **ga** ou **adobe**.
117121

122+
Todos estes campos serão utilizados para realizar a parametrização do arquivo CSV que a API irá receber.
123+
124+
Aqui a API disponibiliza a funcionalidade de definirmos no campo **csvSeparator** uma lista contendo a prioridade de todos os possíveis caracteres que poderão ser utilizados como separadores no arquivo CSV pelos usuários. Com isso, a aplicação irá consultar essa fonte e utilizar o devido separador para parametrizar o arquivo submetido.
125+
126+
Entretanto, este campo no arquivo de configuração não é obrigatório. Caso o campo não seja preenchido, a aplicação irá tentar verificar se o arquivo submetido está utilizando _vírgula_ ou _ponto e vírgula_ como separador e utilizar o separador identificado para a parametrização. Caso não encontre nenhum dos dois caracteres, a API irá utilizar a vírgula como separador.
127+
118128
Abaixo segue uma explicação e um exemplo de todos os campos das configurações.
119129

120130
| Chave | Tipo | Descrição | Obrigatório |
121131
| --------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
122-
| csvSeparator | String | Separador de colunas do arquivo CSV. | Sim |
132+
| csvSeparator | Array | Array que irá conter todos os separadores de colunas que os arquivos CSV poderão conter. | Não |
123133
| separator | String | String que será utilizada na concatenação dos campos. | Sim |
124134
| spaceSeparator | String | String que substituirá o espaço na URL, caso alguma campo tenha preenchido com mais de uma palavra. | Sim |
125135
| columns | Objeto | Objeto contendo as colunas do CSV e seus valores de aceitação. | Sim |
@@ -133,6 +143,7 @@ Abaixo segue uma explicação e um exemplo de todos os campos das configuraçõe
133143
{
134144
"separator": ":",
135145
"spaceSeparator": "_",
146+
"csvSeparator": [",", ";", "|"],
136147
"columns": {
137148
//Colunas que aparecerão no CSV
138149
//A chave representa a coluna do CSV e o vetor de valores

Routes.md

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,76 @@
22

33
## Dicionário de Parâmetros
44

5-
| Parâmetro | Header/Body | Tipo | Descrição |
6-
| ---------- | ----------- | ------ | ---------------------------------------------------------------------------- |
7-
| token | Header | String | Token de permissão do usuário |
8-
| agency | Header | String | Agência do usuário |
9-
| company | Header | String | Empresa proprietária do adinfo |
10-
| permission | Header | String | Nível de permissão do usuário, podendo ser: **user**, **admin** ou **owner** |
11-
| data | Body | File | Arquivo CSV |
12-
| file | Header | String | Nome do arquivo salvo no banco de arquivos (não informar a extensão) |
13-
| config | Body | String | String correspondente ao JSON de configuração |
14-
| campaign | Header | String | Nome da campanha |
5+
| Parâmetro | Header/Body | Tipo | Descrição |
6+
| ----------- | ----------- | ------ | ---------------------------------------------------------------------------- |
7+
| token | Header | String | Token de permissão do usuário |
8+
| agency | Header | String | Agência do usuário |
9+
| company | Header | String | Empresa proprietária do adinfo |
10+
| permission | Header | String | Nível de permissão do usuário, podendo ser: **user**, **admin** ou **owner** |
11+
| data | Body | File | Arquivo CSV |
12+
| file | Header | String | Nome do arquivo salvo no banco de arquivos (não informar a extensão) |
13+
| config | Body | String | String correspondente ao JSON de configuração |
14+
| campaign | Header | String | Nome da campanha |
15+
| email | Body | String | Email do usuário |
16+
| password | Body | String | Senha do usuário |
17+
| newPassword | Body | String | Nova senha do usuário |
1518

1619
## Rotas
1720

21+
### (POST) /login
22+
23+
**Parâmetros**: email, password
24+
25+
**Descrição**: Realiza o login na aplicação e retorna um token de autenticação.
26+
27+
### (POST) /logout
28+
29+
**Parâmetros**: token
30+
31+
**Descrição**: Realiza o logout da aplicação.
32+
1833
### (GET) /user
1934

2035
**Parâmetros**: token
2136

2237
**Descrição**: Recupera os dados do usuários(agência, nível de permissão e empresa) por meio do token informado.
2338

39+
### (GET) /users
40+
41+
**Parâmetros**: token
42+
43+
**Descrição**: Recupera todos os dados do usuários(agência, nível de permissão, empresa e status).
44+
45+
### (POST) /user/changepass
46+
47+
**Parâmetros**: token, password, newpassword
48+
49+
**Descrição**: Altera a senha do usuário que está realizando a requisição.
50+
51+
### (POST) /user/:id/deactivate
52+
53+
**Parâmetros**: token
54+
55+
**Descrição**: Desativa o usuário com o ID enviado.
56+
57+
### (POST) /user/:id/reactivate
58+
59+
**Parâmetros**: token
60+
61+
**Descrição**: Re-ativa o usuário com o ID enviado.
62+
2463
### (GET) /template
2564

2665
**Parâmetros**: token
2766

2867
**Descrição**: Retorna um CSV com as colunas a serem preenchidas, baseando-se no campo **columns** (colunas) da configuração.
2968

69+
### (GET) /template/excel
70+
71+
**Parâmetros**: token
72+
73+
**Descrição**: Retorna um arquivo Excel (xlsx) com as colunas a serem preenchidas, baseando-se no campo **columns** (colunas) da configuração e as regras de validação.
74+
3075
### (POST) /register
3176

3277
**Parâmetros**: token, agency, permission, company, email.

dist/Errors/StringEmptyError.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
exports.StringEmptyError = void 0;
4+
class StringEmptyError {
5+
constructor(msg) {
6+
const error = new Error(msg);
7+
Object.defineProperty(error, 'message', {
8+
get() {
9+
return msg;
10+
},
11+
});
12+
Object.defineProperty(error, 'name', {
13+
get() {
14+
return 'StringEmptyError';
15+
},
16+
});
17+
Error.captureStackTrace(error, StringEmptyError);
18+
return error;
19+
}
20+
}
21+
exports.StringEmptyError = StringEmptyError;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
exports.ValidateColumnExistsError = void 0;
4+
class ValidateColumnExistsError {
5+
constructor(msg) {
6+
const error = new Error(msg);
7+
Object.defineProperty(error, 'message', {
8+
get() {
9+
return msg;
10+
},
11+
});
12+
Object.defineProperty(error, 'name', {
13+
get() {
14+
return 'ValidateColumnExistsError';
15+
},
16+
});
17+
Error.captureStackTrace(error, ValidateColumnExistsError);
18+
return error;
19+
}
20+
}
21+
exports.ValidateColumnExistsError = ValidateColumnExistsError;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
exports.ValidateFieldDependencyError = void 0;
4+
class ValidateFieldDependencyError {
5+
constructor(msg) {
6+
const error = new Error(msg);
7+
Object.defineProperty(error, 'message', {
8+
get() {
9+
return msg;
10+
},
11+
});
12+
Object.defineProperty(error, 'name', {
13+
get() {
14+
return 'ValidateFieldDependencyError';
15+
},
16+
});
17+
Error.captureStackTrace(error, ValidateFieldDependencyError);
18+
return error;
19+
}
20+
}
21+
exports.ValidateFieldDependencyError = ValidateFieldDependencyError;

dist/Errors/ValidateFieldError.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
exports.ValidateFieldError = void 0;
4+
class ValidateFieldError {
5+
constructor(msg) {
6+
const error = new Error(msg);
7+
Object.defineProperty(error, 'message', {
8+
get() {
9+
return msg;
10+
},
11+
});
12+
Object.defineProperty(error, 'name', {
13+
get() {
14+
return 'ValidateFieldError';
15+
},
16+
});
17+
Error.captureStackTrace(error, ValidateFieldError);
18+
return error;
19+
}
20+
}
21+
exports.ValidateFieldError = ValidateFieldError;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
exports.ValidateRulesForColumnError = void 0;
4+
class ValidateRulesForColumnError {
5+
constructor(msg) {
6+
const error = new Error(msg);
7+
Object.defineProperty(error, 'message', {
8+
get() {
9+
return msg;
10+
},
11+
});
12+
Object.defineProperty(error, 'name', {
13+
get() {
14+
return 'ValidateRulesForColumnError';
15+
},
16+
});
17+
Error.captureStackTrace(error, ValidateRulesForColumnError);
18+
return error;
19+
}
20+
}
21+
exports.ValidateRulesForColumnError = ValidateRulesForColumnError;

dist/Handlers/AbstractHandler.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
exports.AbstractHandler = void 0;
4+
class AbstractHandler {
5+
setNext(handler) {
6+
this.nextHandler = handler;
7+
return handler;
8+
}
9+
handle(request) {
10+
if (this.nextHandler) {
11+
return this.nextHandler.handle(request);
12+
}
13+
return true;
14+
}
15+
}
16+
exports.AbstractHandler = AbstractHandler;

dist/Handlers/Handler.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
'use strict';
2+
Object.defineProperty(exports, '__esModule', { value: true });
3+
exports.StringEmptyHandler = void 0;
4+
const StringUtils_1 = require('../utils/StringUtils');
5+
const AbstractHandler_1 = require('./AbstractHandler');
6+
const StringEmptyError_1 = require('../Errors/StringEmptyError');
7+
class StringEmptyHandler extends AbstractHandler_1.AbstractHandler {
8+
handle(request) {
9+
if (StringUtils_1.StringUtils.isEmpty(request)) {
10+
throw new StringEmptyError_1.StringEmptyError(`String vazia detectada!`);
11+
}
12+
return super.handle(request);
13+
}
14+
}
15+
exports.StringEmptyHandler = StringEmptyHandler;

0 commit comments

Comments
 (0)