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.ts
e mude para seu ipv4 localipconfig
para 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:300
ao 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
, digitesnippet
e 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 (-c
para 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/github
para 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 install
para 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: "example@email.com",
}),
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: "example@email.com",
}),
headers: {
'Content-type': 'application/json; charset=UTF-8'
},
}).then((res) => res.json()).then(console.log);
elixir -v
verifique 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
- ColoqueY
cd 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 created
mix 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_name
antes!).
iex -S mix
- elixir interativo /iex.bat
para 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: "exemplo@inutil.com", 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: "minhoca@gmail.com"}
- 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.get
mix ecto.migrate
mix 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