https://github.com/lvleo21/fastapi-taskfy
É uma API para gerenciar uma lista de tarefas (to-do list), permitindo a criação, leitura, atualização e exclusão de tarefas (operações CRUD). Este projeto foi desenvolvido como parte de um desafio técnico, com o objetivo de demonstrar minhas habilidades de desenvolvimento backend utilizando Python e o framework FastAPI.
https://github.com/lvleo21/fastapi-taskfy
alembic api-rest docker fastapi flyio postgresql python redis sqlalchemy
Last synced: about 2 months ago
JSON representation
É uma API para gerenciar uma lista de tarefas (to-do list), permitindo a criação, leitura, atualização e exclusão de tarefas (operações CRUD). Este projeto foi desenvolvido como parte de um desafio técnico, com o objetivo de demonstrar minhas habilidades de desenvolvimento backend utilizando Python e o framework FastAPI.
- Host: GitHub
- URL: https://github.com/lvleo21/fastapi-taskfy
- Owner: lvleo21
- License: mit
- Created: 2024-09-02T21:36:58.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-09-08T19:20:50.000Z (8 months ago)
- Last Synced: 2025-02-12T02:09:52.202Z (3 months ago)
- Topics: alembic, api-rest, docker, fastapi, flyio, postgresql, python, redis, sqlalchemy
- Language: Python
- Homepage: https://fastapi-taskfy.fly.dev/
- Size: 230 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Taskfy
Taskfy é a solução perfeita para quem busca organizar tarefas e aumentar a produtividade de forma prática e eficiente. A API foi desenvolvida utilizando
FastAPI em conjunto com Docker, PostgreSQL, Redis e está hospedada no Fly.io.
Para acessar a aplicação basta acessar o link clicando aqui.## Como o projeto foi organizado e executado?
O projeto foi estruturado com base em um desáfio técnico e tinha como objetivo
avaliar as habilidades de desenvolvimento em backend com Python, utilizando o framework FastAPI. Para isso, é necessário a implementação de um microserviço para gerenciar uma lista de tarefas (to-do list), com as operações CRUD (Create, Read, Update, Delete) e alguns requisitos adicionais.### Requisitos
- [X] CRUD das tarefas
- [X] Persistência de dados com PostgreSQL
- [X] Otimização de consultas
- [X] Implementação de estrutura no padrão de microserviço
- [X] Implementação de testes unitários para as funcionalidades
- [X] Implementação de testes de integração
- [X] Implementação de cache de resultados com Redis
- [X] Utilizar Docker para containerizar o projeto
- [ ] Configurar o projeto para rodar em um ambiente Kubernetes
- [X] Realizar o deploy do microserviço em alguma infraestrutura### Github Projects

A partir dos requisitos, utilizei o *Github Projects* para gerenciar as tarefas do
projeto. Este projeto, seguiu a metodologia do kanban e incialmente as tarefas foram
inseridas no backlogo. Após a finalização do planejamento e estratégia de desenvolimento,
as tarefas foram alteradas para ready. Com decorrer dos dias, as tarefas foram sendo alteradas
de status a medida que eram executada (in progress, in review e por fim done).## Quais foram as tecnologias utilizadas?
- **FastAPI:** Um framework web rápido para construir APIs em Python, focado em alto desempenho e simplicidade.
- **Redis:** Um banco de dados em memória, rápido e escalável, usado para cache, filas e armazenamento de dados.
- **Docker:** Plataforma para criar, implantar e gerenciar contêineres, permitindo isolamento e portabilidade de aplicações.
- **Alembic:** Uma ferramenta de migração de banco de dados usada com SQLAlchemy, que facilita o versionamento de esquemas.
- **SQLAlchemy:** Um ORM (Object Relational Mapper) para Python que facilita a interação com bancos de dados relacionais.
- **PostgreSQL:** Um banco de dados relacional open-source, conhecido por sua robustez, extensibilidade e suporte a operações complexas e dados estruturados.
- **Fly.io:** Uma plataforma de hospedagem de aplicativos que permite o deploy em servidores globais próximos aos usuários.## Como rodar o projeto localmente?
### Com Docker
#### Pré-requisito
- Docker / Docker compose
- Github#### Passos
Para rodar o projeto com docker siga as seguintes passos:
1 - Clonar o repositório
```bash
git clone [email protected]:lvleo21/fastapi-taskfy.git
```2 - Abrir o repositório clonado em sua IDE de preferência
```bash
code fastapi-taskfy/ # 'code' para vscode
```3 - No terminal da IDE (ou em algum de sua preferência e acessando a pasta do repositório) rodar comando do makefile para buildar o projeto
```bash
# Com Makefile
make up-taskfy# Sem Makefile
docker compose -f docker-compose.yml up -d --build --force-recreate --remove-orphans
```4 - Em seu navegador acessar o `localhost`
```bash
http://localhost:8000/
```### Sem Docker
#### Pré-requisito
- Github
- Python 3.9+
- Pip
- PostgreSQL
- Redis
- Virtualenv (venv)#### Passos
Para rodar o projeto com docker siga as seguintes passos:
1 - Clonar o repositório
```bash
git clone [email protected]:lvleo21/fastapi-taskfy.git
```2 - Abrir o repositório clonado em sua IDE de preferência
```bash
code fastapi-taskfy/ # 'code' para vscode
```3 - No terminal da IDE (ou em algum de sua preferência e acessando a pasta do repositório) rodar comando para criar e ativar o ambiente virtual
"***venv** é uma ferramenta do Python para criar ambientes virtuais, permitindo isolar dependências e pacotes específicos para projetos diferentes. Um ambiente virtual ajuda a evitar conflitos entre bibliotecas e facilita a gestão das versões dos pacotes usados no projeto.*"
```bash
python3 -m venv venv
source venv/bin/activate
```4 - Agora é necessário instalar todas as dependências do projeto que estão registradas
no arquivo de `requirements.txt````bash
pip install --upgrade pip
pip install -r requirements.txt --no-cache-dir
```**Atenção:** antes de seguir para os próximos passos certifique-se que seu `postgres` e `redis` estejam rodando corretamente.
5 - Faça uma cópia do arquivo `.env-example` e renomei para `.env`
6 - Ainda em `.env` preencha o `DATABASE_URL` com as informações correspondentes
```text
DATABASE_URL=postgresql://:@:/
```7 - Para executar aplicação **Com Makefile**:
```bash
# Rodar as migrações
make migrate-taskfy# Executar aplicação
make start-taskfy
```8 - Para executar aplicação **Sem Makefile**:
```bash
# Executa as migrações do banco de dados
alembic upgrade head# Inicia a aplicação
uvicorn --host localhost --port 8000 main:app --reload
```9 - Aplicação estará disponível em `localhost:8000`
```bash
http://localhost:8000/
```**Extra:** Para rodar os testes execute **pytest**
```bash
pytest
```