https://github.com/guilopes15/tcc_madr
Tcc do curso Fast Zero,"Meu Acervo Digital de Romances".
https://github.com/guilopes15/tcc_madr
Last synced: 2 months ago
JSON representation
Tcc do curso Fast Zero,"Meu Acervo Digital de Romances".
- Host: GitHub
- URL: https://github.com/guilopes15/tcc_madr
- Owner: guilopes15
- License: gpl-3.0
- Created: 2024-08-12T21:16:17.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-08-28T17:24:51.000Z (9 months ago)
- Last Synced: 2024-08-28T19:12:05.915Z (9 months ago)
- Language: Python
- Size: 215 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# O que é o MADR?
Madr ou Meu Acervo Digital de Romances é uma **API** para gestão de livros. Este projeto surgiu como tcc do curso [FastZero](https://fastapidozero.dunossauro.com/#pre-requisitos), disponibilizado pelo [Dunossauro](https://github.com/dunossauro).
#### Observações iniciais
Neste projeto decidi utilizar a mesma estrutura do curso fastzero, por ser o meu primeiro projeto com o framework [FastAPI](https://fastapi.tiangolo.com/). Também pensei em usar o [FastAPIUsers](https://fastapi-users.github.io/fastapi-users/latest/) mas achei que não daria tempo de aprender até o fim de agosto.
#### Bibliotecas fora do escopo do curso
* Utilizei o **psycopg2** porque tive um problema com o "psycopg[binary]" ao aplicar a migração dentro do conteiner do flyio.
`TypeError: cannot use a string pattern on a bytes-like object.````bash
poetry add psycopg2-binary
```* Para sanitizar os nomes usei o **python-slugify**, esta biblioteca limpa os caracteres especiais, letras maiusculas e os acentos.
```bash
poetry add python-slugify
```### Como utilizar?
Antes de tudo instale o [python](https://www.python.org/downloads/) e o [docker](https://docs.docker.com/engine/install/) na máquina.É preciso também criar um arquivo **`.env`** na raiz do projeto(pasta onde fica o pyproject.toml) com as seguintes variaveis:
```plaintext
DATABASE_URL="postgresql+psycopg2://app_user:app_password@localhost:5432/app_db"
SECRET_KEY="your-secret-key"
ALGORITHM="HS256"
ACCESS_TOKEN_EXPIRE_MINUTES=60
```Depois execute:
```bash
docker compose up --build
```
Com isso a **API** já esta rodando localmente dentro de um conteiner docker.#### Swagger
Utilize o swagger para testar todas as rotas e verificar os schemas.Acesse:
>localhost:8000/docs#### Login
Alguns endpoints é necessario estar logado para acessar, e este projeto não possui uma tela de login, então utilize o swagger para isso.
Os endpoints com *login required* é necessario passar informações no header da requisição.
```
hearders={'Authorization': 'Bearer {token}'}
```### Rotas
#### Auth
* ***Token JWT***É preciso ter o token jwt do tipo Bearer para realizar a autentificação, então faça um post no seguinte endpoint:
> POST /auth/token
```
{
'username': '[email protected]',
'password': 'password'
}
```
* ***Refresh Token*** - *login required*O token expira em 60 minutos, então faça um post no endpoint abaixo antes do tempo expirar, para permanecer utilizando a aplicação:
>POST /auth/refresh_token'#### Users
* ***Criar usuario***
> POST /users/conta
```
{
'username': 'testusername',
'email': '[email protected]',
'password': 'password'
}
```
* ***Deletar usuario*** - *login required*
> DELETE /users/conta/`{user.id}`* ***Atualizar usuario*** - *login required*
> UPDATE /users/conta/`{user.id}`
```
{
'id': 1,
'username': 'test2',
'email': '[email protected]',
'password': 'password'
}
```
#### Romancista* ***Criar Romancista*** - *login required*
> POST /romancista
```
{
'nome': 'test'
}
```* ***Deletar Romancista*** - *login required*
> DELETE /romancista/`{romancista.id}`* ***Atualizar romancista*** - *login required*
> PATCH /romancista/`{romancista.id}`
```
{
'nome': 'testtest'
}
```* ***Listar Romancista por id***
> GET /romancista/`{romancista.id}`* ***Listar Romancista por queryparam***
> GET /romancista/?nome=t#### Livro
* ***Criar livro*** - *login required*
> POST /livro
```
{
'ano': 1999,
'titulo': 'café da manhã dos campeões',
'romancista_id': 1
}
```
* ***Deletar livro*** - *login required*
> DELETE /livro/`{livro.id}`
* ***Atualizar livro*** - *login required*
> PATCH /livro/`{livro.id}`
```
{
'ano': 1958,
'titulo': 'testnomelivro'
}
```
* ***Listar livro por id***
>GET /livro/`{livro.id}`* ***Listar livro por queryparam***
>GET /livro/?ano=1999&titulo=cafe