Como já dito nos artigos anteriores, criar um sistema baseado em micro serviços não é difícil. Vamos passo a passo e ao closing dessa série, você verá que de fato é simples.
Aqui, vamos criar uma simples API Relaxation Http. Isso não deve ser um mistério. Ter uma Controller com as rotas, uma camada de Companies, conexão com base de dados, tudo muito simples.
Domínio
Vamos iniciar pela camada de domínio. Isso vai garantir que foquemos em regras de negócio e depois nos preocupamos em implementar as rotas e regras de aplicação, que não são pertinentes ao domínio.
Primeiro vamos iniciar nosso projeto.
mkdir users-api && cd users-api
yarn init -y
Isso já deve gerar nossa pasta e iniciar o package deal.json
. Vamos configurar o typescript
agora, no terminal execute:
yarn add -D typescript &&
yarn tsc --init
Isso resolve nossa configuração inicial do typescript
. Agora vamos começar com nosso domínio.
mkdir area && contact area/consumer.ts
Com isso vamos ter nossa entidade de consumer
. Antes de começar com a construção do nosso consumer
vamos configurar o jest
como nosso runtime para testes.
Execute:
yarn add -D jest @sorts/jest ts-jest ts-node
Após o comando acima, teremos o jest instalado, agora vamos configurá-lo:
yarn jest --init
Com esse comando o jest
inicia o processo de configuração, com isso seu terminal fará algumas perguntas. Vamos às respostas:
- ✔ Would you want to make use of Jest when working “check” script in “package deal.json”? (y/N)
- ✔ Would you want to make use of Typescript for the configuration file? (y/N)
- ✔ Select the check atmosphere that might be used for testing
- ✔ Would you like Jest so as to add protection experiences? (y/N)
- ✔ Which supplier needs to be used to instrument code for protection?
- ✔ Robotically clear mock calls, cases, contexts and outcomes earlier than each check? (y/N)
Agora você pode ver que foi criado um arquivo jest.config.ts
. Esse é o arquivo de configuração do jest. Porém, você precisa adicionar uma última configuração:
// tsconfig.json
// ... Emblem depois de export default
export default {
// ... Aqui abaixo.
rework: {
"^.+.tsx?$": "ts-jest",
},
// ...
Vamos criar nosso primeiro teste para saber se está tudo correto.
Crie o arquivo consumer.spec.ts
(ou execute contact area/consumer.spec.ts
) junto com o arquivo consumer.ts
Dentro do arquivo de teste (consumer.spec.ts
) vamos digitar o seguinte código:
// consumer.spec.ts
describe("Domínio de usuário", () => {
it("deve funcionar", perform () {
count on(true).toBe(true);
});
});
Antes de testar, vamos ajustar nosso package deal.json
. Vamos adicionar um script. O package deal.json
deve ficar assim:
// package deal.json
{
"identify": "users-api",
"model": "1.0.0",
"principal": "index.js",
"license": "MIT",
"scripts": {
"begin": "node index.js",
"check": "jest"
},
"devDependencies": {
"@sorts/jest": "^28.1.3",
"jest": "^28.1.1",
"ts-jest": "^28.0.5",
"ts-node": "^10.8.1",
"typescript": "^4.7.4"
}
}
Word que adicionamos uma chave scripts
e nela temos dois (2) scripts. Um para iniciar a aplicação e outro para testar.
Agora no terminal, executamos:
yarn check
Esperamos que tudo dê certo. Se aparecer 1 handed
em verde, significa que tudo está bem configurado.
A partir de agora, vou explicar o que faremos e o resultado.
Vamos relembrar. Nossas regras de negócio nos dizem que:
Todo usuário deve fornecer um e-mail e uma senha para poder se cadastrar.
Toda atualização do usuário registra a knowledge em que ocorreu.
Sabendo disso, nosso teste de consumer
deve ficar assim:
// consumer.spec.ts
import { Consumer } from "./consumer";
describe("Domínio de usuário", () => {
it("deve fornecer um e-mail e senha em Consumer", perform () {
count on(
new Consumer(
"id-fake",
"email-fake",
"password-fake",
"created_at-fake",
"updated_at-fake"
)
).toBeTruthy();
});
it("deve dar erro se não fornecer e-mail ou senha em Consumer", perform () {
count on(() => {
new Consumer(
"id-fake",
// Electronic mail vazio
"",
"password-fake",
"created_at-fake",
"updated_at-fake"
);
}).toThrowError("É obrigatório informar um e-mail");
count on(() => {
new Consumer(
"id-fake",
"email-fake",
// Senha vazia
"",
"created_at-fake",
"updated_at-fake"
);
}).toThrowError("É obrigatório informar uma senha");
});
});
Se você tentar executar os testes yarn check
deve falhar. Mas agora vamos criar nossa classe de usuário para resolver isso.
// consumer.ts
export class Consumer {
non-public _user_id: string;
non-public _email: string;
non-public _password: string;
non-public _created_at: string;
non-public _updated_at: string;
constructor(
user_id: string,
e-mail: string,
password: string,
created_at: string,
updated_at: string
) {
this._user_id = user_id;
this._email = e-mail;
this._password = password;
this._created_at = created_at;
this._updated_at = updated_at;
this.validate();
}
non-public validate() {
if (!this._email) {
throw new Error("É obrigatório informar um e-mail");
}
if (!this._password) {
throw new Error("É obrigatório informar uma senha");
}
}
}
A partir de agora, acompanhe por vídeo. Este artigo ficará imenso caso eu explique tudo. O essencial já está aqui. O que terá no vídeo é a prática do desenvolvimento e insigths.
Em breve