Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cr-israel/find-a-friend-solid
Pet adoption API
https://github.com/cr-israel/find-a-friend-solid
ci docker docker-compose e2e-tests fastify fastify-cookie fastify-jwt jwt jwt-authentication nodejs postgresql prisma typescript unit-testing vitest zod zod-validation
Last synced: 26 days ago
JSON representation
Pet adoption API
- Host: GitHub
- URL: https://github.com/cr-israel/find-a-friend-solid
- Owner: Cr-Israel
- Created: 2024-07-11T18:38:35.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-08-08T13:25:23.000Z (3 months ago)
- Last Synced: 2024-10-11T02:42:13.168Z (26 days ago)
- Topics: ci, docker, docker-compose, e2e-tests, fastify, fastify-cookie, fastify-jwt, jwt, jwt-authentication, nodejs, postgresql, prisma, typescript, unit-testing, vitest, zod, zod-validation
- Language: TypeScript
- Homepage:
- Size: 117 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# API
Find a Friend é um sistema de adoção de animais.
Nela, conseguimos visualizar os animais disponíveis para adoção, uma vez cadastrados no sistema.O cadastro de pets é vinculado a uma organização. Ou seja, aqui temos uma relação de 1:N, onde uma organização pode cadastrar vários pets. Só que, um pet só está associado a somente uma única organização.
Para cadastrar um pet, é preciso primeiro cadastrar a organização responsável por aquele pet.
Para que seja possível ver todos os pets disponíveis, é preciso informa a cidade, para que todos os pets cadastros por uma ou várias organizações que residem nesta cidade, possam aparecer na busca. Existem outros filtros de busca, porém o único obrigatório é da cidade.
O contato com a organização é feito via WhatsApp, o interessado consegue essa informação pesquisando a organização mais próxima, através da sua localização.
O sistema conta também com autenticação de uma organização. Para ter acesso ao sistema como ADMIN, a organização precisa se autenticar.
O sistema conta também com uma estratégia de refresh token.A APi foi construída seguindo os princípios do SOLID, padrão Factory, Repository e In-Memory Test Database.
## Regras da aplicação
- 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## Stack utilizada
**Back-end:** TypeScript, Node.js, Fastify, Zod, Prisma, PostgreSQL, Docker, JWT e Vitest.
## Funcionalidades
- Cadastro de pet;
- Consulta de todos os pets cadastrados;
- Consulta com filtro de características do pet;
- Consulta de um único pet pelo ID.
- Cadastro de org;
- Autenticação de org;## Documentação da API
#### Cadastro de Organização
```http
POST /orgs
```| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :---------------------------------- |
| | | **Obrigatório**. Informações necessárias para cadastrar uma organização. |#### Autenticação de Organização
```http
POST /orgs/authenticate
```| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| | | **Obrigatório**. Enviar e-mail e senha, para autenticação |#### Busca por organizações mais próximas
```http
GET /orgs/nearby
```
| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| `localização do usuário` | `string` | **Obrigatório**. Enviar a localização do usuário. |#### Refresh Token
```http
PATCH /token/refresh
```
| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| | | **Obrigatório**. Enviar e-mail e senha, para geração de um novo token para o usuário. |#### Cadastro de Pet
```http
POST /orgs/pets
```| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| | | **Obrigatório**. Enviar as informações necessárias para cadastrar um pet. |#### Busca por todos os pets mais próximos
```http
GET /orgs/pets
```| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| | | **Obrigatório**. Enviar a localização do usuário. |#### Busca de um determinado pet
```http
GET /orgs/pets/:id
```| Parâmetro | Tipo | Descrição |
| :---------- | :--------- | :------------------------------------------ |
| `petId` | `string` | **Obrigatório**. Enviar o ID do pet. |## Aprendizados
Essa foi a primeira aplicação em que eu apliquei os conhecimentos de SOLID, padrão Factory e Repository em um projeto. De forma teórica, eu conhecia os princípios do SOLID, mas, na hora de aplica isso em um projeto, ficava travado.
Neste projeto eu pude aplicar passo a passo cada princípios do SOLID, além de utilizar alguns padrões. Foi uma experiência em tanto.
## Instalação
Instale a API com npm ou yarn
```bash
git clone [email protected]:Cr-Israel/find-a-friend-solid.git
npm/yarn install
npm run dev || yarn dev
docker compose up -d
```
## Variáveis de AmbientePara rodar esse projeto, você vai precisar adicionar as seguintes variáveis de ambiente no seu .env
`DATABASE_URL`
`NODE_ENV`
`JWT_SECRET`Com as suas devidas informações do banco de dados, ambiente de desenvolvimento e secret do JWT.
## Licença
[MIT](https://choosealicense.com/licenses/mit/)
## Autores
- [@Cr-Israel](https://www.github.com/Cr-Israel)
## Feedback
Feedbacks são sempre bem-vindos.
Se você tiver algum feedback, por favor me deixe saber: [email protected]