Este foi meu primeiro projeto usando TypeScript e aproveitei tambem para poder praticar POO, SOLID e DDD. Neste projeto desenvolvi uma API para simular uma loja de itens medievais!
A aplicação foi desenvolvida em Node usando o framework express e o pacote mysql2 para fazer um CRUD no banco de dados;
A Api foi desenvolvida usando o Paradigma da Orientação a Objetos (POO), seguindo os principios SOLID e o design de software DDD (domain driven design)
Desenvolvi endpoints que estão conectados ao banco de dados seguindo os princípios do REST;
- TypeScript;
- Docker;
- Express;
- Node;
- Mysql2;
Clone o projeto
git clone git@github.com:yuryss98/project-trybesmith.git
Vá para o diretório do projeto:
cd POO-SOLID-DDD-Api
Execute os seguintes comandos:
docker-compose up -d
docker exec -it trybesmith bash
npm install
npm run build
npm start
Depois de executar todos os comandos, ja teremos uma aplicação rodando na porta 3000, agora basta usar as query mysql no arquivo Trybesmith.sql para gerar o banco de dados da aplicação e popula-lo. A senha para se conectar com o banco de dados do container docker é "password";
Endpoints: todos os endpoints são acessiveis a partir da rota http://localhost:3000
GET /products
-- O método GET em /products é usado para listar todos os produtos da aplicação;GET /orders
-- O método GET em /orders é usado para listar todos os pedidos da aplicação juntamente com o usuario que o solicitou;POST /users
-- O método POST em /users é usado para criar um usuario, quando criado com sucesso retorna um token, token esse que é usado para poder acessar outras rotas da api, aceita 4 campos, sendo eles:
-- username: campo do tipo texto -CAMPO OBRIGATORIO;
-- password: campo do tipo texto - CAMPO OBRIGATORIO;
-- vocation: campo do tipo texto - CAMPO OBRIGATORIO;
-- level: campo do tipo number - CAMPO OBRIGATORIO;
EXEMPLO:
{
"username": "teste",
"vocation": "beserker",
"level": 100,
"password": "123456789"
}
POST /login
-- O método POST em /login é usado para fazer login em uma conta ja existente, quando usado corretamente retorna um token, token esse que é usado para poder acessar outras rotas da api, aceita 2 campos, sendo eles: -- username: campo do tipo texto -CAMPO OBRIGATORIO;
-- password: campo do tipo texto -CAMPO OBRIGATORIO;
EXEMPLO:
{
"username": "teste",
"password": "123456789"
}
POST /products
-- O método POST em /products é usado para fazer criar um novo produto, ele aceita 2 campos sendo eles: -- name: campo do tipo texto -CAMPO OBRIGATORIO;
-- amount: campo do tipo texto -CAMPO OBRIGATORIO;
EXEMPLO:
{
"name": "Espada de aço valirian",
"amount": "100 peças de ouro"
}
👉 ## O proximo endpoint necessita do token para funcionar, então lembre-se de salvar o token quando fizer login ou criar um usuario, use o token no header da requisição com a chave "Authorization", lembrando que cada token gerado expira em no máximo 5 horas!
POST /orders
-- O método POST em /orders é usado para fazer um novo pedido aceita 1 campo, sendo ele: -- productsIds: campo do tipo lista -CAMPO OBRIGATORIO, nesse campo você passará os ids dos produtos a qual quer fazer o pedido;
EXEMPLO:
{
"productsIds": [1, 2]
}