Code Monkey home page Code Monkey logo

apistorevideo's Introduction

Api Store Video


Api Rest para locação de vídeos/filmes criada com NodeJs com endpoins de cadastro de vídeos (CRUD) e marcação de locação com listagem de filmes em atraso de devolução de filmes.

Summary


A organização do código foi baseada no MVC porem ultilizado o melhor forma de desacoplamento das funcionalidades, visando a simplicidade na hora de encontar as suas respectivas funções.

ORM para integração com o banco de dados Como ORM foi usado o Sequelize. Foi ponderado o Kenex(query builder) pelo o uso e melhor conpreenção da base de dados com query string, porem não o escolhi pois o gerenciamento mais completo do Sequelize nos deixa mas traquilo com a questão do gerenciamento da DB, ganhando assim mais performance na hora da criação.

Preparado para testes

Foi usado jest como framework para realizar essa tarefa. Tanto para os unitários como para os de integração, Testando o aquivo de logica das funções responsáveis por faze a alocação, passando todas as rotas.

CLI integration

Sequelize é uma mão na roda nesse contexto. migrações e seeders são feitos quase que sem nenhum problemas

Linter

Para code styling foi usado eslint.


Arquitetura


Banco de dados

Foi usado o banco de dados Sqlite tanto para a produção quanto para os testes.

Depois de criar um gitclone é só ultilizar o gerenciandor de pacotes de sua preverência.

npm install
yarn

Dessa forma ele irá instalar os pacotes necessários para qua a plicação funcione normalmete.

Obs: não é necessário fazer qualquer tipo de instação do banco de dados o Sqlite cria um arquivo dentro do projeto ultilizando o sequelize-cli(Explicarei a seguir..) Sequelize CLI

Será necessário ter o sequelize-cli de forma global o como dependencia de desenvolvemento.

npm install --save-dev sequelize-cli

Mais informações aqui

Teste

Como informado foi ultilizado o jest para os tests unitário e de integração. Para rodar os testes local será necessário criar um arquivo com o nome de envDatabase.js na raiz do projeto, contendo essas informações
const test = { dialect: "sqlite", storage: "config/database/testes/testes.sqlite" }; const prod = { dialect: "sqlite", storage: "config/database/database.sqlite" }; module.exports = { test, prod }
Em resumo...
Nome do Pacote Finalidade Link Documentação
Jest Testes Link
Eslint Irá olhar o seu código e vai te acusar os erros baseados na regra que você definir Link
Prettier O Prettier é um code formatter livre (MIT) e de código aberto, que tem por finalidade "forçar" um padrão de código. Link
@hapi/joi Joi: Esse pacote é usado para validar e retornar erros de validação de forma automatizada Link
Body-Parser O body-parser é um módulo capaz de converter o body da requisição para vários formatos. Um desses formatos é json Link
cors Cross-origin resource sharing (CORS ou compartilhamento de recursos de origem cruzada) é uma especificação de uma tecnologia de navegadores que define meios para um servidor permitir que seus recursos sejam acessados por uma página web de um domínio diferente Link
supertest Basicamente o Supertest é um módulo que forja requisições visando testar webservers em Node. js e verifica o retorno das mesmas para automatizar testes deste tipo de infraestrutura, principalmente web APIs Link
Express.js Express.js é um framework para aplicações web para Node.js, lançado como software livre e de código aberto sob a Licença MIT... Link

Obs: esses são os principais pacotes que foram ultilizados na construção do projeto e serão istalados automaticamente a partir do comando npm intall


EndPoints

Obs: A aplicação está disponível no heroku, dodos o endpoints podem ser testado aqui => https://apistorevideo.herokuapp.com

  • GET /movie - listar todos os filmes
  • GET /movie/{id} - listar um filme por ID
  • POST /movie - criar um filme
  • PUT /movie - atualizar um filme
  • DELETE /movie - excluir um filme
  • GET /rental - listar todas as locações
  • GET /rental/expire - listar locações com a data de devolução vencida
  • POST /rental - locar um filme
  • PUT /rental/devolve - devolver um filme

Rotas Movies

GET /movie

Retorna a lista dos filmes cadastrados

GET /movie{id}

Retorna o filme cadastrado passando a id como parâmetro

POST /movie

Cadastra o movie passando essas informações

Deve retornar essas informações

PUT /movie/{id}

Update dos filmes Obs: nessa rota você pode passar qualquer um dos campos que queira atualizar

Deve retornar essas informações

DELETE /movie/{id}

Deletar um filme passando o {id}

Deve retornar essas informações


Rotas Rental

POST /rental

Fazer um pedido de locação

Deve retornar essas informações

GET /rental

Retorna a lista de todas as locações criadas

Deve retornar essas informações

GET /rental/expire

Retorna a lista de todas as locações com a data de inpiração atrasada

Deve retornar essas informações

PUT /rental/devolve

Rota usada para devolver a locação passando o id com corpo da requisição Dessa forma

Caso a locação esteja em atraso retorna essa informação

Caso a locação NÃO esteja em atraso retorna essa informação


Crie na forma de função logica arquivo dentro da pasta api/rental/utils/logicFunction.js, esse arquivo é responsável pelo acoplamento das funções que são necessárias para :

Funções
deadLineReturn

Verifica a quantidade de filmes disponíveis, caso o numero de locação seja maior que a quantidade disponivel retorna um erro, caso esteja tudo ok elacria uma data de previsão de entrega em formato string para ser salva no banco

amountFunction

Verifica a quantidade de filmes disponíveis, caso o numero de locação seja maior que a quantidade disponivel retorna um erro, porem essa função subtrai a quantidade no banco de dados, ou seja caso tenha 10 ele queira fazer a locação de 2 no banco ele muda o valor de 10 para 8;

amountForRentalFunction

Retorna a quantidade de dias para devolver o filme, se o usuário locar de 1 retorna 1 caso 2 a 5 retorna 3 dias, caso 5 a 9 filmes ela retorna 5 dias caso 10 ou mais filmes ele retorna 10 dias

expiresFunction

Essa função é responsável para verificar o banco de dados e retornar as locações que estão em atraso, caso não tenha ele retorna uma mensagem

expiresOneFunction

Verifica se a locação esta ou não atrasada porem só lê uma entidade, é usada na rota put para retornar uma mensagem informando se a devolução está ou não em atraso.


arquivo .env.test

PORT=3000 DIALECT=sqlite STORAGE=config/database/testes/testes.sqlite NODE_ENV=test

arquivo .env

PORT=3000 PORT=3000 DIALECT=sqlite STORAGE=config/database/database.sqlite NODE_ENV=prod

apistorevideo's People

Contributors

wilkrhu avatar

Watchers

James Cloos avatar  avatar

apistorevideo's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.