React | React Native | Node JS | Elixir | Licença
O Projeto da Next Level Week desta semana foi criar um sistema onde os usuarios podem dizer suas espectativas para o evento chamado DoWhile feito pela @Rocketseat
- Da forma como foi criado por min, o mesmo servidor pode ser lidado para as chamadas web e as mobile, sendo mais eficiente que o servidor do evento, onde é necessário um servidor para cada plataforma!!
ctrl + shift + p > reload window.
Ao criar seu type personalizado, coloque a propiedade "typeRoots": ["./src/@types", "node_modules/@types"] no ts.config
- Node JS
- Typescript
- React
- React Native
- Expo cli
- Elixir
- Phoenix
- Postgres db
- Vite - Fast Refresh(ts, jsx, css, webpack);
- Gihub Oauth
- Web Sockets
- Sqlite db
- Prisma
Lembrando que para você executar as aplicação necessita ter o Node.js instalado em sua maquina!
é necessário criar 2 app no github auth, um para o mobile e outro para a web, mais o servidor é o mesmo entre os dois, pois eu configurei para que funcionasse como um 'cross-platform'
// Api .env
GITHUB_WEB_CLIENT_SECRET=...(private)
GITHUB_WEB_CLIENT_ID=...
GITHUB_MOBILE_CLIENT_SECRET=...(private)
GITHUB_MOBILE_CLIENT_ID=...
JWT_SECRET=_aleatory_key_md5(private)// Web .env
VITE_GITHUB_WEB_CLIENT_ID=...(public)// Mobile env.js
// Note que este é um arquivo .js pois a variavel será publica.
const CLIENT_ID = '...(public)'
module.exports = {
CLIENT_ID,
} - Abra 3 terminal.
ls- verifique as pastas.
cd api- Entra no diretorio.yarn install- Instala dependências.yarn prisma migrate dev- realizar migrações no banco de dados.yarn dev- Inicia.
cd web- Entra no diretorio .yarn install- Instala dependências.yarn dev- Inicia.
cd mobile- Entra no diretorio .- vá em
./src/services/api.tse mude para seu ipv4 localipconfigpara verificar o seu ipv4. yarn install- Instala dependências.expo start- Inicia.
A novidade desta aula para min foram os websockets, que permitem uma conecção de dados em tempo real com o servidor
yarn create vite web --template react-ts- cria o projeto vitecd web- entra no diretorio front-endyarn- instala os pacotesyarn add sass -D- instala o sassyarn add react-icons- adiciona icones no reactyarn add axios- cliente de requisições http (tipo express, cria e gerencia rotas)- redirecionar ocallback da aplicação para
http://localhost:300ao invés dehttp://localhost:4000/signin/callback yarn add socket.io-client- WebSockets (comunicação em tempo-real com backend)
- necessita de um emulador ou o expo instalado no celular.
- necessita de outro app no github, com o homepage URL e o callback URL iguals, sendo { https://auth.expo.io/@YOUR_NAME_IN_EXPO/APP_NAME_IN_APP_JSON }
- Precisa adicionar o 'scheme' no app.json com o mesmo nome da aplicação!
-
- Para configurar o Snippet que o Rodrigo usa durante a aula, dentro do VS Code aperte
Ctrl + Shift + P, digitesnippete escolha a opçãoPreferences: Configure User Snippets. - Nas próximas opções, clique em
New Global Snippets file...
- Para configurar o Snippet que o Rodrigo usa durante a aula, dentro do VS Code aperte
Android studio AWD Emulator ajuda no desenvolvimento... Para mudar o tamanho adicione mais uma tela e depois redimensione, a seguir retire a tela adicionada...
Extender tipagem está no Button/index.tsx
npm install --global expo-cli- instala o expo para apps mobile.expo init mobile- cria um projeto, mobile sendo o nome do projetocd mobile-expo start- inicia como no yarn devexpo install expo-font @expo-google-fonts/nome_da_fonte- instala uma fonte da googleexpo install expo-app-loading- para permitir o carregamento asyncrono das fontes
expo install react-native-svg- svg não funciona no react native, então precisa deste moduloexpo install expo-linear-gradient- usar linear gradientyarn add --dev react-native-svg-transformer- transformar svg em componenteyarn add react-native-iphone-x-helper- lida com os formatos dos celulares(aqueles chanfros no topo)yarn add moti- animações de forma declarativaexpo install react-native-reanimated- animações para o expo- babel . config precisa do plug-in
plugins: ['react-native-reanimated/plugin'] expo start -c- rodar apos fazer alterações (-cpara limpar o cache)
expo install expo-auth-session expo-random- lida com redirecionamento para a web e retorno ao aplicativo.expo login- para reconhecer o usuário (necessita estar logado para o auth)
yarn add axios- requisições httpexpo install @react-native-async-storage/async-storage- guardar insformações no dispositivo (tipo localStorage)yarn add socket.io-client- WebSockets receber mensagem em real-time
Preferi optar por não utilizar do insominia, pois estou estudando mais sobre o fetch então quis optar por fazer manualmente as requisições, deu super certo :D
- Entre em
http://localhost:4000/githubpara receber o _codigo_do_usuario
// Autenticar
fetch("http://localhost:4000/authenticate", {
method: "POST",
body: JSON.stringify({
code: "_codigo_do_usuario"
}),
headers: {
'Content-type': 'application/json; charset=UTF-8'
},
}).then((res) => res.json()).then(console.log);// Criar mensagem
fetch("http://localhost:4000/messages", {
method: "POST",
body: JSON.stringify({
message: "Alguma_mensagem_interessante"
}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
'authorization': 'Bearer _authToken'
},
}).then((res) => res.json()).then(console.log);// Perfil do usuário
fetch("http://localhost:4000/profile", {
method: "GET",
headers: {
'Content-type': 'application/json; charset=UTF-8',
'authorization': 'Bearer authToken'
},
}).then((res) => res.json()).then(console.log);// pegar 3 ultimas mensagens
fetch("http://localhost:4000/messages/last3", {
method: "GET",
headers: {
'Content-type': 'application/json; charset=UTF-8'
},
}).then((res) => res.json()).then(console.log);yarn init -y- Inicia o projeto com o package.jsonyarn add express- Instala o expressyarn add -D @types/express typescript ts-node-dev- Instala o typescript.yarn tsc --init- Configuração do typescript. (deixe o strict em false, es 2017).yarn add prisma -D- Instala o prisma.ioyarn prisma init- inicia o prisma.yarn add dotenv- para acessar aquivos de ambiente (.env)yarn add axios- instala o axios.yarn add @types/axios -D- typescript do axios.yarn add jsonwebtoken- token JWT.yarn add @types/jsonwebtoken -D- typescript do JWT.yarn add @prisma/client- instala o prisma.yarn prisma migrate dev- Atualizar o banco de dados, tipo umyarn installpara o arquivo schema.prismayarn dev- executa o script para iniciar o servidoryarn prisma studio- abre o gerenciador do banco de dados!yarn add socket.io- instala o websockets, gerenciamento de pacotes co coneção em tempo real?yarn add @types/socket.io -D- tipagem.yarn add cors- permite ou barra requisições na aplicação.yarn add @types/cors -D- tipagem.
- instalar o elixir na sua maquina. instalar elixir
- se já possuir o elixir desatualizado, desinstale:
choco uninstall elixir -y
// Primeira vez ao iniciar o elixir
fetch("http://localhost:4000/api/message", {
method: "POST",
body: JSON.stringify({
message: "Teste de mensagem",
username: "DinowSauron",
email: "[email protected]",
}),
headers: {
'Content-type': 'application/json; charset=UTF-8'
},
}).then((res) => res).then(console.log);// Quando usa api ser capaz de retornar json
// Envia uma mensagem no banco de dados!
fetch("http://localhost:4000/api/message", {
method: "POST",
body: JSON.stringify({
message: "Teste de mensagem",
username: "DinowSauron",
email: "[email protected]",
}),
headers: {
'Content-type': 'application/json; charset=UTF-8'
},
}).then((res) => res.json()).then(console.log);elixir -vverifique a versão do elixirErlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:6:6] [ds:6:6:10] [async-threads:1] [jit] Elixir 1.12.3 (compiled with Erlang/OTP 22)mix local.hex --force- força instalação?mix archive.install hex phx_new- phoenix(phx) com o .mix phx.new NameApp --no-html --no-assets- ColoqueYcd elixir_tags- entra no diretoriomix ecto.create- inicia o projeto (coloque a porta, e senha do seu postgress, e instale o postgress)$ mix ecto.create Compiling 11 files (.ex) Generated elixir_tags app The database for ElixirTags.Repo has been createdmix phx.server- rodar servidormix ecto.gen.migration migration_name- gera uma migração(arquivo que define como se altera e modifica o db)mix ecto.migrate- aplica a migração ao banco de dados (modifique o arquivopriv/repo/migrations/migration_nameantes!).
iex -S mix- elixir interativo /iex.batpara unbuntuiex(1)> %ElixirTags.Message{}- dentro do elixir interativo, verifica o schemaiex(2)> recompile- recompila o codigo que sofreu alteraçãoiex(3)> ElixirTags.Message.changeset(%{message: "uma mensagem", email: "[email protected]", username: "Dino"})- passa dentro da função criada os parâmetros (sem o %)iex(4)> h ElixirTags.Repo.insert- h = help depois do h coloque o comando para ver mais detalhes (ou entre na doc oficial)iex(5)> params = %{message: "mensgame bananosa", username: "anafabas", email: "[email protected]"}- cria um mapaiex(5)> params |> ElixirTags.Message.changeset() |> ElixirTags.Repo.insert()- coloca o mapa no banco de dados...
mix deps.get- baixa as dependencias, ou instala novas...
mix deps.getmix ecto.migratemix phx.server
- Todo dia enviar para os emails a nuvem de tags.
- Guardar o report n obanco de dados
Note que este projeto está sob a licensa MIT. Veja o arquivo para mais detalhes: LICENSE