https://github.com/brandaoplaster/films-api
Consuming a Movie API
https://github.com/brandaoplaster/films-api
rspec ruby ruby-on-rails
Last synced: about 2 months ago
JSON representation
Consuming a Movie API
- Host: GitHub
- URL: https://github.com/brandaoplaster/films-api
- Owner: brandaoplaster
- License: mit
- Created: 2020-10-19T11:38:54.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-07-19T13:05:05.000Z (almost 5 years ago)
- Last Synced: 2025-08-17T14:51:47.144Z (10 months ago)
- Topics: rspec, ruby, ruby-on-rails
- Language: Ruby
- Homepage:
- Size: 69.3 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Films API :film_strip:
Uma API de Filmes
## Para roda o projeto
Para colocar o aplicativo em execução, execute os seguintes comandos:
- Build container
```
docker-compose build
```
- Instalando as gems
```
docker-compose run --rm webservice bundle install
```
- Criando o banco de dados
```
docker-compose run --rm webservice bundle exec rails db:create
```
- Gerando migrate
```
docker-compose run --rm webservice bundle exec rails db:migrate
```
> configuando master key.
> Caso necessario remova os seguintes arquivos.
```
config/master.key
config/credentials.yml.enc
```
- Acesse o container webservice
```
docker-compose run --rm webservice bash
```
- Para gerar a **secret_key_base** execute o seguinte comando
```
docker-compose run --rm webservice bundle exec rails secret
```
- Cole este trecho de codigo quando abrir o editor no proximo passo.
```
test:
secret_key_base:
omdb_api_key:
omdb_api_url: http://www.omdbapi.com/
development:
secret_key_base:
omdb_api_key:
omdb_api_url: http://www.omdbapi.com/
production:
secret_key_base:
omdb_api_key: 2e9eefb7
omdb_api_url: http://www.omdbapi.com/
```
- Abrindo o editor
```
EDITOR=nano bundle exec rails credentials:edit
```
- Execute os testes
```
docker-compose run --rm webservice bundle exec rspec
```
- Up service
```
docker-compose up
```
## Payload
```
{
"movie": [
{
"title": "Captain Marvel"
},
{
"title": "Frozen"
},
{
"title": "Click"
},
{
"title": "Airplane!"
},
{
"title": "Doctor Strange"
},
{
"title": "A Clockwork Orange"
},
{
"title": "Rosemary's Baby"
},
{
"title": "Once Upon a Time in Hollywood"
},
{
"title": "taxi driver"
},
{
"title": "the hateful eight"
}
]
}
```
## Solução
Existe dois endpoint um para listar os filmes processados e o outro para enviar uma lista de títulos de filmes para processo, pode se observar na imagem abaixo.
Quando Uma lista de títulos de filmes é enviada, a mesma chega no MoviesController
O controlador é o responsável por chamar o MovieJob, então é executado o perform_later, que irá executar assim que possível.
A lista de títulos de filmes vai ser enfileirada no redis, assim que esta lista for executada o service OmdbService. O Service OmdbService é responsável por realizar as chamadas para a API OMDbAPI. Então é passado um título de filme de cada vez para o service buscar.
Assim que essa busca por feita o resultado é retornado para o MovieJob, pois é nele que é chamado o model Movie que vai persistir esta busca no banco de dados.
A partir deste momento é possível acessar o endpoint index para lista os filmes já processados e cadastrados no banco de dados.
Todo esse processo pode ser visto na imagem abaixo seguindo o fluxo como foi descrito acima.

## Stack
- Ruby on Rails
- Postgres
- Redis
- Docker
- Docker compose
## Authors
- [brandaoplaster](https://github.com/brandaoplaster)
## License
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details