An open API service indexing awesome lists of open source software.

https://github.com/techabraao/flash-cards-rest-api

RESTful API for flashcard management, built with Python, Flask, SQLAlchemy, MySQL, and Docker.
https://github.com/techabraao/flash-cards-rest-api

docker flask marshmallow mysql postman python sqlalchemy unittest

Last synced: 3 months ago
JSON representation

RESTful API for flashcard management, built with Python, Flask, SQLAlchemy, MySQL, and Docker.

Awesome Lists containing this project

README

          

# Flash Cards REST API

### Tecnologias

Static Badge
Static Badge
Static Badge
Static Badge
Static Badge
Static Badge
Static Badge
Static Badge
Static Badge

### Funcionalidades
- __Gerenciamento de Decks:__ criar, listar, atualizar, excluir e visualizar detalhes de decks de flashcards.
- __Gerenciamento de Flashcards:__ criar flashcards, associá-los a decks, buscar aleatoriamente ou individualmente, atualizar e remover flashcards.

## Instalação

```bash
# Clone o repositório já trazendo o submódulo templates
git clone --recurse-submodules https://github.com/TechAbraao/flash-cards-rest-api.git

# Acesse o diretório do projeto
cd flash-cards-rest-api

# (Opcional) Se esqueceu do --recurse-submodules, inicialize o submódulo manualmente
git submodule update --init --recursive

# Crie o ambiente virtual
python3 -m venv .venv

# Ative o ambiente virtual (Linux ou Mac)
source .venv/bin/activate

# Ou, se estiver no Windows
# .venv\Scripts\activate

# Instale as dependências do projeto
pip install -r src/requirements.txt

# Acesse a pasta de código-fonte
cd src

# Rode a aplicação Flask
flask run
```
## Atualizando o submódulo templates (quando houver alterações)
```bash
# Acesse a pasta do submódulo
cd src/app/templates

# Busque as últimas alterações do repositório de templates
git pull origin main # ou a branch correta

# Volte para o repositório principal
cd ../../../..

# Adicione e commite a atualização do submódulo
git add src/app/templates
git commit -m "Atualiza submódulo templates"
git push origin main
```

## Contrato e Definições da API
### Endpoints
#### Decks

| Método | URL | Descrição |
| ------ | --------------------- | ------------------------------- |
| GET | `/api/decks` | Listar todos os decks |
| POST | `/api/decks` | Criar um novo deck |
| GET | `/api/decks/` | Obter detalhes de um deck |
| PUT | `/api/decks/` | Atualizar informações de um deck |

##### Exemplo de Payload para Decks

```json
{
"title": "História - Revolução Francesa Atualizado",
"description": "Deck atualizado com mais flashcards sobre a Revolução Francesa.",
"tags": ["história", "revolução", "frança"]
}
```

#### Cards

| Método | URL | Descrição |
| ------ | ----------------------------------- | ----------------------------------- |
| POST | `/api/decks//cards` | Adicionar card ao deck |
| GET | `/api/decks//cards` | Buscar todos os cards de um deck |
| GET | `/api/decks//cards/random` | Buscar card aleatório do deck |
| GET | `/api/cards/` | Buscar card específico |
| PUT | `/api/cards/` | Atualizar card específico |
| DELETE| `/api/cards/` | Remover card |

#### Exemplo de Payload para Cards

```json
{
"question": "Quando ocorreu a Revolução Francesa?",
"answer": "Em 1789.",
"tags": ["história", "datas", "revolução"]
}
```

#### Formato das Respostas da API:
Todas as respostas da API seguem o seguinte padrão:

- Sucesso
```json
{
"success": true,
"message": "Mensagem descritiva da operação",
"data": { /* objeto ou lista retornada */ }
}
```

- Erro
```json
{
"success": false,
"message": "Mensagem de erro",
"error": { /* objeto ou lista de erros */ }
}
```
> **Observações:**
> - O campo `error` contém o objeto de erro ou lista de erros.
> - O campo `message` descreve o resultado da operação ou o motivo do erro.