Este projeto é uma API para gerenciamento de posts, construída utilizando Express e implementada com TypeScript. A arquitetura do projeto segue o padrão em camadas, semelhante ao framework NestJS, para facilitar a organização e manutenção do código.
Estrutura do Projeto
│
├── netlify/
│ └── functions/
│ └── api.ts
│
├── package.json
├── netlify.toml
├── tsconfig.json
├── node_modules/
├── app/
│ ├── controller/
│ │ └── post.controller.ts
│ ├── service/
│ │ └── post.service.ts
│ ├── database/
│ │ └── databaseHelper.ts
│ └── app.module.ts
├── dist/
└── index.ts
Descrição das Pastas e Arquivos
netlify/functions/api.ts: Configuração do servidor para ser utilizado com o Netlify Functions e Serverless.
app/app.module.ts: Módulo principal que registra todos os controladores e serviços.
app/controller/post.controller.ts: Controlador que trata as requisições HTTP para as rotas relacionadas aos posts.
app/service/post.service.ts: Serviço que contém a lógica de negócios para manipular os dados dos posts.
app/database/databaseHelper.ts: Helper para interação com o banco de dados Firebase.
index.ts: Ponto de entrada da aplicação, inicializa o servidor Express.
tsconfig.json: Configurações do TypeScript.
package.json: Configurações do npm e lista de dependências.
Configuração do Ambiente
Clone o repositório:
git clone https://github.com/marco0antonio0/API-Postage-Management
cd seu-repositorio
Instale as dependências:
npm install
Crie um arquivo .env na raiz do projeto com as seguintes variáveis de ambiente:
FIREBASE_API_KEY=your_firebase_api_key
FIREBASE_AUTH_DOMAIN=your_firebase_auth_domain
FIREBASE_DATABASE_URL=your_firebase_database_url
FIREBASE_PROJECT_ID=your_firebase_project_id
FIREBASE_STORAGE_BUCKET=your_firebase_storage_bucket
FIREBASE_MESSAGING_SENDER_ID=your_firebase_messaging_sender_id
FIREBASE_APP_ID=your_firebase_app_id
FIREBASE_MEASUREMENT_ID=your_firebase_measurement_id
Inicie o servidor de desenvolvimento:
npm run dev
Configure o Netlify:
– Configure o repositório do GitHub no Netlify.
– Adicione as variáveis de ambiente no painel de configurações do Netlify.
Utilização das Rotas
1. Recuperar todos os posts
Método: GET
URL: /api/posts
Exemplo de Resposta:
{
“id”: “post1”,
“title”: “First Post”,
“type”: “blog”,
“text”: “This is the content of the first post.”
},
{
“id”: “post2”,
“title”: “Second Post”,
“type”: “article”,
“text”: “This is the content of the second post.”
}
]
2. Recuperar um post específico pelo ID
Método: GET
URL: /api/posts/:id
Exemplo de Resposta:
“id”: “post1”,
“title”: “First Post”,
“type”: “blog”,
“text”: “This is the content of the first post.”
}
3. Criar um novo post
Método: POST
URL: /api/posts
Body (JSON):
“title”: “New Post”,
“type”: “blog”,
“text”: “This is the content of the new post.”
}
Exemplo de Resposta:
“id”: “newPostId”,
“title”: “New Post”,
“type”: “blog”,
“text”: “This is the content of the new post.”
}
4. Atualizar um post existente pelo ID
Método: PUT
URL: /api/posts/:id
Body (JSON):
“title”: “Updated Post Title”,
“type”: “blog”,
“text”: “This is the updated content of the post.”
}
Exemplo de Resposta:
“id”: “post1”,
“title”: “Updated Post Title”,
“type”: “blog”,
“text”: “This is the updated content of the post.”
}
5. Deletar um post existente pelo ID
Método: DELETE
URL: /api/posts/:id
Exemplo de Resposta:
Status Code: 204 No Content
Body: (nenhum)
Documentação Swagger
A documentação da API é gerada automaticamente pelo Swagger. Para acessar a documentação interativa da API, siga os passos abaixo:
Inicie o servidor de desenvolvimento (caso ainda não tenha feito):
npm run dev
Acesse a documentação do Swagger no navegador:
Abra seu navegador e acesse a URL http://localhost:3000/api-docs. A partir desta interface, você pode visualizar e testar todas as rotas da API.
Contribuição
Contribuições são bem-vindas! Por favor, siga os passos abaixo para contribuir:
Fork o repositório.
Crie uma nova branch (git checkout -b feature/nova-feature).
Commit suas alterações (git commit -am ‘Adiciona nova feature’).
Push para a branch (git push origin feature/nova-feature).
Crie um novo Pull Request.
Licença
Este projeto é licenciado sob a licença. Veja o arquivo LICENSE para mais detalhes.