O projeto segue os padrões definidos na documentação do Vue.js e Nuxt.js;
O projeto foi feito e testado com celular sempre ao lado, sendo recomendado seu teste e visualização em um aparelho celular.
As middlewares estão localizadas na pasta /middleware
- A Middleware
auth.jsredireciona o usuário para o login caso o mesmo tente acessar uma área protegida por login. - A Middleware
check-authé responsável por utilizar cookies e localStorage para realizar backup. - A Middleware
loginé utilizada na tela de login para redirecionar para perfil caso o usuário já esteja logado, combinado comcheck-auth, loga e redireciona.
A pasta de plugins contem um arquivo que é utilizado para setar as configs básicas do axios.
Todos os estados são gerenciados de maneira modular, assim sendo, a pasta store contem 3 arquivos:
index.js- Responsável por alguns getters de autenticação, sua principal função é permitir a utilização da função nuxtServerInit, que inicializa a loja já com os filmes populares.auth.js- Responsável pelas ações de login, salvar os dados na store, remover o usuário e recuperar os dados de Cookie e localStorage.movies.js- Responável por retornar os filmes favoritos, assim como enviar a requisição de favoritar/desfavoritar o filme.
Para exibir datas de maneira correta, utilizei o pacote @nuxtjs/moment, suas configurações podem ser encontradas na seção modules do nuxt.config.js.
O pacote incorpora moment através da diretiva $moment, ficando disponível junto com outros módulos padrão como $store e $axios. Para exemplo de utilização, acesse /components/Movie.vue.
Para testar em mais de um aparelho, utilizei da diretiva server no nuxt.config.js, permitindo publicar em rede local através do ip de rede local da máquina na porta 8000. Assim, ao utilizar o comando npm run dev, seu ip local aparecerá junto com a porta.
Esta configuração permite testar em celulares com os mesmos recursos de hot reloading.
# install dependencies
$ npm install
# serve with hot reload at your local server ip at port:8000
$ npm run dev
# build for production and launch server
$ npm run build
$ npm run start
# generate static project
$ npm run generate