Como criar micro serviços - Nível fácil parte 3
Jean Carlos Molossi
Posted on June 29, 2022
Como já dito nos artigos anteriores, criar um sistema baseado em micro serviços não é difícil. Vamos passo a passo e ao final dessa série, você verá que de fato é simples.
Users API
Aqui, vamos criar uma simples API Rest Http. Isso não deve ser um mistério. Ter uma Controller com as rotas, uma camada de Services, 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.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 domain && touch domain/user.ts
Com isso vamos ter nossa entidade de user
. Antes de começar com a construção do nosso user
vamos configurar o jest
como nosso runtime para testes.
Execute:
yarn add -D jest @types/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 like to use Jest when running “test” script in “package.json”? (y/N)
- Pressione “n”
- ✔ Would you like to use Typescript for the configuration file? (y/N)
- Pressione “y”
- ✔ Choose the test environment that will be used for testing
- Selecione “node”
- ✔ Do you want Jest to add coverage reports? (y/N)
- Pressione “y”
- ✔ Which provider should be used to instrument code for coverage?
- Selecione “v8”
- ✔ Automatically clear mock calls, instances, contexts and results before every test? (y/N)
- Pressione “y”;
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
// ... Logo depois de export default
export default {
// ... Aqui abaixo.
transform: {
"^.+\\.tsx?$": "ts-jest",
},
// ...
Vamos criar nosso primeiro teste para saber se está tudo correto.
Crie o arquivo user.spec.ts
(ou execute touch domain/user.spec.ts
) junto com o arquivo user.ts
Dentro do arquivo de teste (user.spec.ts
) vamos digitar o seguinte código:
// user.spec.ts
describe("Domínio de usuário", () => {
it("deve funcionar", function () {
expect(true).toBe(true);
});
});
Antes de testar, vamos ajustar nosso package.json
. Vamos adicionar um script. O package.json
deve ficar assim:
// package.json
{
"name": "users-api",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"start": "node index.js",
"test": "jest"
},
"devDependencies": {
"@types/jest": "^28.1.3",
"jest": "^28.1.1",
"ts-jest": "^28.0.5",
"ts-node": "^10.8.1",
"typescript": "^4.7.4"
}
}
Note 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 test
Esperamos que tudo dê certo. Se aparecer 1 passed
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 data em que ocorreu.
Sabendo disso, nosso teste de user
deve ficar assim:
// user.spec.ts
import { User } from "./user";
describe("Domínio de usuário", () => {
it("deve fornecer um e-mail e senha em User", function () {
expect(
new User(
"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 User", function () {
expect(() => {
new User(
"id-fake",
// Email vazio
"",
"password-fake",
"created_at-fake",
"updated_at-fake"
);
}).toThrowError("É obrigatório informar um e-mail");
expect(() => {
new User(
"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 test
deve falhar. Mas agora vamos criar nossa classe de usuário para resolver isso.
// user.ts
export class User {
private _user_id: string;
private _email: string;
private _password: string;
private _created_at: string;
private _updated_at: string;
constructor(
user_id: string,
email: string,
password: string,
created_at: string,
updated_at: string
) {
this._user_id = user_id;
this._email = email;
this._password = password;
this._created_at = created_at;
this._updated_at = updated_at;
this.validate();
}
private 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.
Acompanhe pelo vídeo
Em breve
Posted on June 29, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 14, 2024