carvalhoviniciusluiz / mkplace-tecnology-challenge

Technical test

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

## mkplace-tecnology-challenge

“O amor é apenas uma reação química.”!

challenge Made by Vinicius Carvalho License

Configurações   |    Sobre o projeto   |    API   |    Licença

Run in Insomnia

Este projeto foi construido utilizando Clean Architecture. Existem vários aspectos que podem ser melhorados no entanto ele consegue passar de modo satisfatório uma visão bem abrangente da arquitetura.

Configurações

Dotenv (click to show)

O serviço depende do arquivo .env que pode ser criado a partir do existente .env.sample presente na raiz do projeto.

cp .env.sample .env
Scripts (click to show)

Somente os principais scripts estão documentados nessa sessão, para executalos faça:

npm run start:dev

SCRIPTS

Nome Descrição
build:swc Compila o projeto usando a biblioteca SWC da Vercel
start:dev Sobe o serviço com hot-reload
start:bff-products Sobe o serviço de cadastro de produtos
start:bff-sellers Sobe o serviço de cadastro de vendedores
test Roda os testes
Docker 🐳 (click to show)

O Docker é um recurso importante neste projeto pôs é nele que subimos serviços auxiliares como banco de dados, você deve te-lo instalado no seu ambiente para poder usa-lo.

Na raiz do projeto existe um arquivo docker-compose.yml responsável pelos serviços de suporte responsáveis pelo bom funcionamento do programa, todas as variáveis ambientes estão presentes em .env.

# Subir os serviços e manter o term travado
docker-compose up

# Subir os serviços em segundo plano
# docker-compose up -d

Sobre o projeto

O QUE VAMOS ENCONTRAR (click to show)
  • Padrões de Projeto
    • Clean Arch
    • Hexagonal Arch
    • Factory
    • Repository
    • Strategy
    • Dependency Inversion
    • Backend For Frontend (BFF)
    • Command and Query Responsibility Segregation (CQRS)
  • Boa Práticas
    • SOLID
    • DDD
  • Miscelânea
    • Nestjs
    • Express
    • Cache
    • Swagger
    • TypeORM
    • MikroORM
    • Docker
  • Banco de Dados
    • Postgres
    • MongoDB
    • SQLite3

IMPORTANTE 1: O projeto apresenta um arquivo de importação para as suas APIs de modo a facilitar os testes, como requisito é necessário possuir o programa insomnia instalado no ambiente. A importação das rotas para o insomnia é feito usando o botão roxo Run In Insomnia presente no topo da página.

IMPORTANTE 2: O Suporte do docker contempla somente a parte de serviços necessários para o projeto funcionar isso por que se trata de configuração para desenvolvimento e não produção.

IMPORTANTE 3: Existe dois recursos de BFF presentes para exemplificar o funcionamento de serviços em paralelo consimundo do mesmo core, usecases e repositories. Esses serviços funcionam independentes uns dos outros e alimentam a mesma base de dados bruta (relacional), no entanto, a API principal também alimenta uma base de dados de log (nosql) que é acessível a nível de BFF. Vale resaltar que a estratégia de log vem para da força a estratégia de cache nas concultas, os BFFs tem acesso aos mesmos dados só que vindos do banco de dados bruta.

Requisitos:

Instalação:

No terminal faça:

npm install

Rodando o Projeto:

Suba os serviços auxiliares do projeto com docker:

docker-compose up

Execute os serviços principais do projeto:

npm run start:dev

# não é requisito rodar os BFFs
npm run start:bff-products
npm run start:bff-sellers

Tests:

É necessário que o docker esteja levantado, no terminal faça:

npm test

API:

BFF: Sellers

  • #GET http://localhost:3331/sellers - Consulta de vendedores, é possível utilizar um filtro code como parametro da consulta;
  • #POST http://localhost:3331/sellers - Rota para cadastrar novos vendedores;
{
  "seller": {
    "name": "anna"
  }
}

OBS: No caso do cadastro para sellers é possível informar o parametro code manualmente, entretanto, na ausencia o mesmo é criado automaticamente.

BFF: Products

  • #GET http://localhost:3332/products - Consulta produtos, deve-se informar price intervalo separado por virgula (e.g 5.9,9.9), ou, slug referente a um produto cadastradol
  • #POST http://localhost:3332/products - Rota para cadastrar novos produtos;
{
  "product": {
    "brand": "Esporte Fino",
    "name": "Calça",
    "price": 59.9
  }
}

API Principal: Products

  • #GET http://localhost:3333/products - Permite recuperar todos os produtos cadastrados.
  • #GET http://localhost:3333/products/:slug - Permite recuperar um produto especifico pelo slug.
  • #POST http://localhost:3333/products - Rota de cadastro para novos produtos.
{
  "brand": "Moda Praia",
  "name": "Biquine",
  "price": 9.9
}

API Principal: Sale Products

  • #GET http://localhost:3333/sale-products - Rota para consultar vendas, por ela é possível saber o vendedor e o produto de uma venda.

IMPORTANTE: Essa API possui a maior quantidade de filtros de consulta sendo possível intercalar um e outro para obter melhores resultados, segue exemplo com query_string

http://localhost:3333/sale-products?
  productName=Shirt&
  productPrice=50,60&
  productBrand=fine%20knit&
  productSlug=fine-knit_shirt&
  sellerCode=6443&
  sellerName=vini2
  • #POST http://localhost:3333/sale-products - Rota para cadastrar uma venda, por ela deve informar o código do vendedor eo slug do produto.
{
  "seller_code": 3768,
  "product_slug": "moda-praia_biquine"
}

License

MIT

Copyright (c) 2023-present

About

Technical test

License:MIT License


Languages

Language:TypeScript 99.5%Language:JavaScript 0.5%