Giter VIP home page Giter VIP logo

find-a-friend-app-desafio-rocketseat's Introduction

FindAFriend API - Desafio Rocketseat

Typescript Badge NodeJS Badge Fastify Badge

Nesse desafio desenvolveremos uma API para a adoção de animais, a FindAFriend API, utilizando SOLID e testes.

Confira o enunciado do desafio no Notion.

Setup em desenvolvimento

Para rodar este server em desenvolvimento, certifique-se de ter as seguintes dependências instaladas no seu computador:

  • git - permite realizar versionamento de código e a comunicação com o github.

  • docker - permite a conteinerização, que é criar e disponibilizar micro máquinas virtuais com somente os recursos necessários para que o serviço escolhido funcione. Neste caso, o docker será utilizado para subir o banco de dados postgreSQL em desenvolvimento.

  • nodeJS - permite executar javaScript em um ambiente de servidor

Após verificar que todos os requisitos acima estão disponíveis, faça o clone do meu repositório hospedado no github e rode o projeto.

Sequência de comandos

Primeiro inicie o git

git init

Clone o repositório

git clone https://github.com/bruno-valero/find-a-friend-app-desafio-rocketseat

Entre na pasta do projeto

cd find-a-friend-app-desafio-rocketseat

Certifique-se que o docker está ativo, então execute o comando

npm run dev:new-setup

Observe os logs que aparacerão no terminal. Quando aparecer app running on 3000, você já pode começar a realizar as requisições http

Ver alterações no postgreSQL

Quando você começar a fazer as requisições, novos dados serão inseridos, trocados ou retirados do banco de dados. para consultar essas mudanças, abra outro terminal dentro da pasta do projeto, ou seja, dentro de caminho/ate/find-a-friend-app-desafio-rocketseat. Quando o terminal estiver aberto dentro desta pasta, execute o comando:

npm run db

O comando acima abrirá uma janela no eu navegador, mostrando as tabela do banco de dados e seu conteúdo.

Futuros testes na mesma pasta

Agora que você já executou npm run dev:new-setup, caso vá rodar o servidor futuramente na mesma pasta, não há necessidade de usar o mesmo comando. Em vez disso execute:

npm run dev

Fazendo requisições http

Se você tiver a extensão do vscode REST Client, pode usar o arquivo ./client.http, ele já tem todas as possíveis rotas disponíveis. Basta trocar os dados que serão enviados para testar.

Ou você pode usar um programa como o Insomnia, um aplicativo desktop multiplataforma que permite fazer solicitações HTTP e testar APIs.

Construção do Projeto

A seguir estarão disponíveis as informações relacionadas ao desenvolvimento do projeto, como requisitos funcionais, regras de negócio, requisitos não funcionais e a estrutura proveniente da metodologia DDD (Domain-Driven Design)

Requisitos Funcionais

  • Deve ser possível cadastrar um pet
  • Deve ser possível listar todos os pets disponíveis para adoção em uma cidade
  • Deve ser possível filtrar pets por suas características
  • Deve ser possível visualizar detalhes de um pet para adoção
  • Deve ser possível se cadastrar como uma ORG
  • Deve ser possível realizar login como uma ORG

Regras de Negócio

  • Para listar os pets, obrigatoriamente precisamos informar a cidade
  • Uma ORG precisa ter um endereço e um número de WhatsApp
  • Um pet deve estar ligado a uma ORG
  • O usuário que quer adotar, entrará em contato com a ORG via WhatsApp
  • Todos os filtros, além da cidade, são opcionais
  • Para uma ORG acessar a aplicação como admin, ela precisa estar logada

Requisitos Não Funcionais

  • Os dados deverão ser persistidos num banco de dados postgreSQL
  • O Banco de dados em desenvolvimento deve ser usado através de um container do Docker
  • Devem haver testes unitários e testes e2e para validar os requisitos e as regras de negócio
  • Deve ser implementado o CI (Continuous Integration)
  • CI - ao realizar um push para o github, todos os tests unitários devem ser executados
  • CI - ao realizar um pull request para o github, todos os tests e2e devem ser executados
  • O projeto dev seguir a metodologia DDD (Domain-Driven Design)

Metodologia Domain-Driven Design

  • domains:
    • find a friend:
      • application:
        • repositories:
          • pets repository
          • users repository
        • use cases:
          • register org
          • authenticate org
          • register pet
          • fetch all adoptable pet
          • find pet
          • want to adopt
      • enterprise:
        • entities:
          • org
          • pet

find-a-friend-app-desafio-rocketseat's People

Contributors

bruno-valero avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.