- 🧾 Sobre o projeto
- 🚀 Principais tecnologias utilizadas
- 🔽 Como baixar o projeto
- 💻 Como executar o projeto
- 👨🔧 Serviços
- 👌 Como usar o app
IG.NEWS é uma newsletter sobre o mundo React. Nela foram implementadas:
- Páginas que utilizam conceitos de SSR (Server Side Rendering) e SSG (Static Site Generation).
- Autenticação via Github (OAuth authentication) utilizando NextAuth
- Integração com o banco de dados NoSQL Fauna
- Integração com o serviço de pagamentos online Stripe
A aplicação também foi configurada para receber alguns webhooks disparados por esse serviço. Para ser mais específico, webhooks como: finalização de pagamento, atualização de assinatura e cancelamento de assinatura. - Integração com o headless CMS (Content Management System) Prismic.
(Você pode ver todas as dependências do projeto no arquivo package.json)
$ git clone https://github.com/victorbadaro/ignite-ignews
Os comandos abaixo utilizam o gerenciador de pacotes yarn. Execute-os no seu terminal.
-
Instale as dependências do projeto
$ yarn
-
A aplicação também depende de outros serviços para funcionar. São serviços de pagamento, autenticação, banco de dados e CMS. Todos eles devem ser configurados antes da execução do app. Veja a seção Serviços
-
A aplicação pode ser executada tanto no ambiente de produção como no ambiente de desenvolvimento:
-
Para executar a aplicação no ambiente de desenvolvimento:
$ yarn dev
-
Para executar a aplicação no ambiente de produção:
-
Gere o build da aplicação:
$ yarn build
-
Agora basta executar o projeto:
$ yarn start
-
-
Se tudo for executado corretamente, uma mensagem será apresentada no terminal informando que o servidor foi iniciado:
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
Agora basta abrir o navegador e acessar: http://localhost:3000/
✅ Pronto! Se você seguiu corretamente os passos acima o projejto já estará sendo executado localmente em tua máquina.
Antes de qualquer coisa, crie um arquivo na raíz do projeto com o nome .env.local
. Insira as seguintes variáveis dentro do arquivo criado:
# Stripe
STRIPE_API_KEY=
NEXT_PUBLIC_STRIPE_PUBLIC_KEY=
STRIPE_WEBHOOK_SECRET=
STRIPE_SUCCESS_URL=http://localhost:3000/posts
STRIPE_CANCEL_URL=http://localhost:3000
# FaunaDB
FAUNADB_KEY=
# Github
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
# Prismic CMS
PRISMIC_ENDPOINT=
PRISMIC_ACCESS_TOKEN=
-
Stripe
Crie uma conta no Stripe e cadastre um produto. Para criar um produto, basta clicar em Products e depois em Add product. Deixe selecionada a opção Recurring.Três chaves são necessárias para a integração correta com o serviço do Stripe.
No dashboard do Stripe, clique no menu Developers e em seguida em API Keys para obter tanto a Publishable key como a Secret key.
Copie as chaves para o arquivo.env.local
:
STRIPE_API_KEY=Secrect key
NEXT_PUBLIC_STRIPE_PUBLIC_KEY=Publishable keyPara obter a última chave do Stripe, baixe a CLI:
E execute os seguintes comandos no terminal:
# Acesse o diretório onde está a CLI baixada # Execute: ./stripe login # Após confirmar no navegador a autenticação execute: ./stripe listen --forward-to http://localhost:3000/api/webhooks
A chave irá aparecer na tela. Copie e cole ela dentro do arquivo
.env.local
na frente de STRIPE_WEBHOOK_SECRET=Este último comando deve estar sendo executado durante toda a execução do proejto.
-
FaunaDB Crie uma conta no Fauna e em seguida um Database.
Após dar um nome para o Database criado, crie duas Collections: subscriptions e users
Criadas as Collections, crie agora os Indexes abaixo seguindo o exemplo da imagem:
Index Name: user_by_email Source Collection: users Terms: data.email Unique Index Name: user_by_stripe_customer_id Source Collection: users Terms: data.stripe_customer_id Index Name: subscription_by_id Source Collection: subscriptions Terms: data.id Index Name: subscription_by_status Source Collection: subscriptions Terms: data.status Index Name: subscription_by_user_ref Source Collection: subscriptions Terms: data.userId
Agora, depois que a estrutura do banco já estiver pronta (com as Collections e Indexes), gere uma Secret key. Para isso basta acessar o menu Security e dar um nome para a nova key:
A chave aparecerá na tela logo em seguida:
Copie essa chave e cole dentro do arquivo
.env.local
na frente de FAUNADB_KEY. -
Github Crie uma conta no Github. Acesse as configurações da conta e clique em Developer settings.
Dentro de OAuth Apps, crie um novo OAuth App:
Preencha os campos que irão aparecer na tela para registrar a aplicação OAuth. Em Homepage URL e Authorization callback URL preencha seguindo o modelo abaixo:
Homepage URL = http://localhost:3000
Authorization callback URL = http://localhost:3000/api/auth/callbackApós ter registrado a aplicação OAuth já será possível obter o Client ID e o Client Secret. O Client Secret será gerado clicando no botão Generate a new client secret.
Copie o Client ID para dentro do arquivo.env.local
, na frente de GITHUB_CLIENT_ID e o Client Secret na frente de GITHUB_CLIENT_SECRET.
GITHUB_CLIENT_ID=Client ID
GITHUB_CLIENT_SECRET=Client Secret -
Prismic CMS Crie uma conta no Prismic e em seguida também um repositório:
Para iniciar a crição de posts no Prismic CMS você deve, antes, criar um type de nome post:
Arraste os três itens destacados na imagem abaixo (UID, Title e Rich Text) para o a página em branco na esqueda.
Preencha o campo API ID de cada item dessa forma: uid, title e content respectivamente.Com o type de post já criado acesse o menu Documents e cadastre os posts que irão aparecer na aplicação do IG.NEWS:
Os campos necessários para a crição de um post são o title e o content:
Após a edição do documento é só clicar em Save e Publish:
Agora que o conteúdo já está pronto, basta obter o Endpoint da API e o token de acesso do Prismic.
Copie o API Endpoint e coloque na frente de PRISMIC_ENDPOINT no arquivo.env.local
Copie o Permanent access token gerado (depois de clicar em Add token) e coloque na frente de PRISMIC_ACCESS_TOKEN no arquivo
.env.local
O uso do IG.NEWS é muito simples. Ele é uma Newsletter sobre o mundo React. Os posts nele disponibilizados podem ser visualizados por todos, mas somente os assinantes terão acesso aos textos completos dos artigos. Para ser assinante, deve-se ter uma conta no Github (para fazer a autenticação na plataforma do IG.NEWS) e realizar um pagamento mensal através do serviço de pagamentos online Stripe (valor informado na Homepage). Não se preocupe, para testar a aplicação você não precisará informar dados reais de algum cartão de crédito ou algo assim. Na tela de pagamentos do Stripe você pode utilizar o seguinte número de cartão de crédito:
4242 4242 4242 4242
Esse é um número de cartão de crédito pra testes do Stripe.
Veja abaixo o fluxo da aplicação:
Este projeto foi criado e desenvolvido com ❤ por Victor Badaró