Skip to content

FelipeLopes/starwars

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

O projeto solicitado exige uma stack bem grande de bibliotecas para funcionar e foi implementado na linguagem Scala.

Na execução dele, optou-se pela maior simplicidade possível nas especificações para deixar o código fácil de entender, sem nenhuma lógica
muito complexa.

A API REST foi implementada da seguinte forma:

GET /list-planets -> Retorna a lista completa de planetas no banco de dados
GET /planet-id/numero -> Retorna o planeta cujo id é especificado no número
GET /planet-name/cadeia -> Retorna o planeta cujo nome é o especificado na cadeia
POST /add-planet -> Lê o conteúdo no body da requisição, do tipo application-json, que contém o nome, clima, terreno, e número de filmes que apareceu, e insere no banco de dados
DELETE /delete-planet-id/numero -> Remove o planeta cujo id é especificado no número

Os testes foram feitos no firefox usando a extensão RESTED: https://addons.mozilla.org/pt-BR/firefox/addon/rested/

Para adicionar um planeta, o JSON enviado no post deve conter os campos "name", "climate", "terrain", e "numFilms".

O banco de dados foi implementado no PostgreSQL, com os parâmetros típicos. Ele responde no localhost, na porta 5432, o nome
do database é "postgres", o usuário e a senha também são "postgres", tal informação pode ser obtida lendo o arquivo application.conf

O banco de dados possui apenas uma tabela com as informações dos planetas: seu id, que é a chave primária, seu nome, clima, terreno, e
número de aparições nos filmes. As queries de SQL usadas para criar e popular o banco de dados estão nos arquivos creation.sql e
populate.sql

As dependências do projeto podem ser vistas em build.sbt, elas são, essencialmente:

* Akka-Http e suas dependências, akka-actor e akka-stream, necessário para rodar um servidor Http
* Akka-Spray-Json, para fazer o marshalling, que converte os dados no formato reconhecido da linguagem Scala para o JSON, que é transmitido nas requisições HTTP.
* Slick, bem como HikariCP, biblioteca de conexões, e SL4J, de log, embora usamos SL4J-nop, que não faz nenhum logging. O Slick é necessário para executar queries SQL no banco de dados.
* PostgreSQL-JDBC, o driver do postgres para JDBC, que faz queries especificamente no PostgreSQL.

O código pode ser executado pela linha de comando:

$ sbt update
$ sbt compile
$ sbt run

O comando update baixa as dependências necessárias para o projeto, enquanto o compile compila o código, e o run o executa. Ao executar, um servidor HTTP irá responder requisições em localhost:8080 até o usuário apertar a tecla ENTER no terminal que invocou o servidor.

A forma mais simples de criar requisições e observar as respostas é com a extensão RESTED, do Firefox.

O código em Server.scala possui diversas case classes para conter os dados das requisições, além de funções para executar queries SQL. Ele também usa uma DSL (Domain Specific Language) para fazer o matching das URLs que devem ser respondidas. Preceitos de Engenharia de Software recomendam que essas funções fossem implementadas em arquivos separados. Porém, considerando que o programa inteiro tem menos de 150 linhas, consideramos a separação em vários arquivos um preciosismo desnecessário.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published