Projeto Frame Circle API para o desafio técnico da empresa Avantsoft. Todo o projeto foi desenvolvido na framework Ruby on Rails, que disponibiliza uma API seguindo um padr'ao RESTFul.
A API fornece recursos para a criação e gerenciamento de quadros e círculos dentro do mesmo.
Versão: 1.0.0 Link para Execução: localhost:3000
O projeto pode ser instalado a partir do Docker Compose.
- Para construir as imagens dos containers:
docker compose build- Para iniciar os containers:
docker compose upOpcionalmente, use a opção -d para iniciar em segundo plano.
Com isso, dois containers serão iniciados:
frame_circle_api-dbframe_circle_api-api
- Para criação e migração do banco de dados, caso ainda não tenha feito:
docker compose exec frame_circle_api-api bin/rails db:create db:migrateCom isso a API já poderá ser acessada pela sua URL padrão:
localhost:3000Todos os endpoints da API estão documentados e podem ser executados pelo Swagger/OpenAPI.
Para gerar a documentação da API (Swagger/OpenAPI):
docker compose exec frame_circle_api-api bundle exec rake rswag:specs:swaggerizeCom a documentação gerada, acessar:
http://localhost:3000/api-docs/index.html
E a página será exibida com todos os endpoints da API disponíveis para requisição e consulta da documentação
A API possui testes automatizados para todas as Models e para todas as Controllers, com testes de Controller integrados com o Swagger/OpenAPI.
Para rodar os testes do RSpec:
Rodando todos os testes do projeto:
docker compose exec frame_circle_api-api rspecRodando os testes de um arquivo específico:
docker compose exec frame_circle_api-api rspec NOME_DO_ARQUIVO_DE_TESTERodando os testes de um arquivo específico a partir de uma linha específica:
docker compose exec frame_circle_api-api rspec NOME_DO_ARQUIVO_DE_TESTE:NUMERO_DA_LINHANa modelagem da aplicação foram criadas os seguintes modelos:
- center_x: Campo com o valor no eixo X para o centro de um Quadro (Frame)
- center_y: Campo com o valor no eixo Y para o centro de um Quadro (Frame)
- width: Campo com o valor da largura do Quadro (Frame)
- height: Campo com o valor da altura do Quadro (Frame)
- center_x: Campo com o valor no eixo X para o centro de um Círculo (Circle)
- center_y: Campo com o valor no eixo Y para o centro de um Círculo (Circle)
- diameter: Campo com o valor do diametro do Círculo (Circle)
- frame_id: Campo com o ID do Quadro (Frame) que o Círculo (Circle) pertence
A API possui endpoints para os recursos de Frame e Circle.
Endpoint que cria um novo quadro, recebendo a posição, a altura e a largura. Pode receber vários círculos para serem criados juntos em um mesmo quadro.
- Em caso de sucesso retorna o status
201 CREATED. - Em caso de falha retorna o status
422 UNPROCESSABLE ENTITY.
Endpoint que retorna detalhes de um quadro e seus círculos, como posição X, posição Y, total de círculo dentro do quadro, posição círculo que está na posição mais alta, na posição mais baixa, na posição mais à esquerda e na posição mais à direita.
- Em caso de sucesso retorna o status
200 OK. - Em caso de não encontrar o recurso retorna o status
404 NOT FOUND.
Endpoint que remove um quadro. Só remove o quadro caso ele não possua círculos dentro.
- Em caso de sucesso retorna o status
204 NO CONTENT. - Em caso de não encontrar o recurso retorna o status
404 NOT FOUND. - Em caso de falha retorna o status
422 UNPROCESSABLE ENTITY.
Endpoint que adiciona um novo círculo a um quadro específico.
- Em caso de sucesso retorna o status
201 CREATED. - Em caso de não encontrar o recurso retorna o status
404 NOT FOUND. - Em caso de falha retorna o status
422 UNPROCESSABLE ENTITY.
Endpoint que atualiza a posição de um círculo existente.
- Em caso de sucesso retorna o status
200 OK. - Em caso de não encontrar o recurso retorna o status
404 NOT FOUND. - Em caso de falha retorna o status
422 UNPROCESSABLE ENTITY.
Endpoint que lista todos os círculos completamente dentro de um raio especificado a partir do ponto central informado. Pode também filtrar opcionalmente por Frames.
- Em caso de sucesso retorna o status
200 OK.
- center_x (number)
- center_y (number)
- radius (number)
- frame_id (integer)
Endpoint que remove um círculo.
- Em caso de sucesso retorna o status
204 NO CONTENT. - Em caso de não encontrar o recurso retorna o status
404 NOT FOUND.