From b6cc2ae595fa470c172d68fe3f16f4f3459d7be9 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Wed, 30 Nov 2022 18:06:03 -0300
Subject: [PATCH 01/19] fazendo testes com jtest

---
 front-end/src/App.js                          |  3 ++
 .../src/pages/Curso/Componentes/Modulos.js    |  2 +-
 front-end/src/pages/Curso/Materiais.js        | 45 ++++--------------
 front-end/src/pages/Curso/Materiais.test.js   | 13 +++++
 front-end/src/pages/Curso/ObterDados.js       | 47 +++++++++++++++++++
 front-end/src/services/firebase.js            |  6 ++-
 6 files changed, 76 insertions(+), 40 deletions(-)
 create mode 100644 front-end/src/pages/Curso/Materiais.test.js
 create mode 100644 front-end/src/pages/Curso/ObterDados.js

diff --git a/front-end/src/App.js b/front-end/src/App.js
index 8cb9333..3475f08 100644
--- a/front-end/src/App.js
+++ b/front-end/src/App.js
@@ -10,6 +10,8 @@ import Duvidas from "./pages/Duvidas/Duvidas";
 import Cadastro from "./pages/Cadastrar/Cadastrar";
 import Perfil from "./pages/Perfil/Perfil";
 import PaginaDaDuvida from "./pages/Duvidas/Componentes/PaginaDaDuvida";
+import { ObterDados } from "./pages/Curso/ObterDados";
+import { useAuth } from "./context/AuthContext";
 
 function App() {
   return (
@@ -19,6 +21,7 @@ function App() {
           <Route path="/" element={<Login />} />
           <Route exact path="/duvidas" element={<RotaPrivada> <Duvidas /> </RotaPrivada>} />
           <Route exact path="/curso/materiais" element={<RotaPrivada> <Materiais /> </RotaPrivada>} />
+          <Route exact path="/curso/dados" element={<RotaPrivada> <ObterDados /> </RotaPrivada>} />
           <Route exact path="/perfil" element={<RotaPrivada> <Perfil /> </RotaPrivada>} />
           <Route exact path="/curso" element={<RotaPrivada> <Curso /> </RotaPrivada>} />
           <Route exact path="/home" element={<RotaPrivada> <Home /> </RotaPrivada>} />
diff --git a/front-end/src/pages/Curso/Componentes/Modulos.js b/front-end/src/pages/Curso/Componentes/Modulos.js
index b2591b3..ebc51ca 100644
--- a/front-end/src/pages/Curso/Componentes/Modulos.js
+++ b/front-end/src/pages/Curso/Componentes/Modulos.js
@@ -11,7 +11,7 @@ function VerModulos({modulo, concluido}){
 
             </div>
             <div className="modulo-button">
-                <Button component={Link} to="/curso/materiais" state={{ numero: modulo, concluido: concluido }} variant="contained">Ver Materiais</Button>
+                <Button component={Link} to="/curso/dados" state={{ numero: modulo, concluido: concluido }} variant="contained">Ver Materiais</Button>
             </div>
         </div>
     )
diff --git a/front-end/src/pages/Curso/Materiais.js b/front-end/src/pages/Curso/Materiais.js
index b06ede2..c22a7aa 100644
--- a/front-end/src/pages/Curso/Materiais.js
+++ b/front-end/src/pages/Curso/Materiais.js
@@ -1,5 +1,5 @@
 import React from "react";
-import {db, auth, storage, ref, uploadBytesResumable, getDownloadURL } from '../../services/firebase';
+//import {db, auth, storage, ref, uploadBytesResumable, getDownloadURL } from '../../services/firebase';
 import './Materiais.css'
 import {useState, useEffect} from 'react';
 import Button from '@mui/material/Button';
@@ -12,20 +12,22 @@ import Typography from '@mui/material/Typography';
 import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
 import uploadFile from "../../util/uploadFile.js";
 import { async } from "@firebase/util";
+import { ObterDados } from "./ObterDados";
 
-function Materiais() {
+function Materiais({aulas, numero, concluido}) {
 
 	const [arquivo, setArquivo] = useState(null);
-	const [aulas, setAulas] = useState([])
 
-	async function EnviarAtividade(id_aula, numero_aula){
+	/*async function EnviarAtividade(id_aula, numero_aula){
 		var nomeColecao = "Modulo"+numero.toString();
 		var tipo_arquivo = arquivo.name.split(".")[1];
 		var caminho_arquivo = `atividades/${nomeColecao}/aula${numero_aula}/${uid}.${tipo_arquivo}`
 		const urlFile = await uploadFile(arquivo, caminho_arquivo, storage, ref, uploadBytesResumable, getDownloadURL, auth);
 		db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao)
 		.collection("aulas").doc(id_aula).update({caminhoTarefaEnviada: urlFile})
-	}
+	}*/
+
+	async function EnviarAtividade(id_aula, numero_aula){}
 
 	async function onFileChange(e) {
         const arquivo = e.target.files[0];
@@ -39,40 +41,9 @@ function Materiais() {
       setExpanded(isExpanded ? panel : false);
     };
 
-	const uid = auth.currentUser.uid;
+	//const uid = auth.currentUser.uid;
 	const dataAtual = new Date().getTime() / 1000;
 
-
-
-	const location = useLocation()
-    const { numero, concluido } = location.state
-
-	useEffect(()=>{
-		let tudoCorrigido = true;
-		var nomeColecao = "Modulo"+numero.toString();
-		db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao).collection("aulas").onSnapshot((docs)=>{
-		let temp = [];
-			docs.forEach(doc => {
-					let foraDoPrazo = false;
-					let id_aula = doc.id;
-					let dataObjeto = new Date(doc.data().prazo.seconds*1000)
-					let dataString = `${dataObjeto.getDate()}/${dataObjeto.getMonth()+1}/${dataObjeto.getFullYear()}`
-					if(dataAtual>doc.data().prazo.seconds){
-						foraDoPrazo = true
-					}
-					let doc_temp = {...doc.data(), foraDoPrazo: foraDoPrazo, id_aula: id_aula, dataString: dataString}
-					temp.push(doc_temp)
-					if(!doc.data().atividadeCorrigida){
-						tudoCorrigido = false;
-					}
-			});
-		setAulas(temp)
-		if(tudoCorrigido && !concluido){
-			db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao).update({concluido: true})
-		}
-        })
-    },[uid])
-
 	return (
 
 		<div className="App">
diff --git a/front-end/src/pages/Curso/Materiais.test.js b/front-end/src/pages/Curso/Materiais.test.js
new file mode 100644
index 0000000..6624da4
--- /dev/null
+++ b/front-end/src/pages/Curso/Materiais.test.js
@@ -0,0 +1,13 @@
+import Materiais from './Materiais.js';
+import TestRenderer from 'react-test-renderer'; // ES6
+import {shallow} from 'enzyme';
+
+it("Aula fora do prazo", () => {
+    const aulasMock = [{prazo: new Date("2022-12-25").getTime() / 1000, num: 1, caminhosMateriais: ["link1","link2"]}]
+    //const wrapper = shallow(<Materiais aulas={aulasMock} />);
+    //expect(wrapper.getElementById("teste")).toBeDisable();
+    const testRenderer = TestRenderer.create(<Materiais aulas={aulasMock} numero={2} concluido={true} />);
+    const testInstance = testRenderer.root;
+    expect(testInstance.findByType('button').props.disabled).toBe(true);
+
+});
\ No newline at end of file
diff --git a/front-end/src/pages/Curso/ObterDados.js b/front-end/src/pages/Curso/ObterDados.js
new file mode 100644
index 0000000..79d86b9
--- /dev/null
+++ b/front-end/src/pages/Curso/ObterDados.js
@@ -0,0 +1,47 @@
+import {db, auth} from '../../services/firebase';
+import {useState, useEffect} from 'react';
+import Materiais from './Materiais';
+import { useLocation } from 'react-router-dom'
+
+export function ObterDados()
+{
+
+const location = useLocation()
+const { numero, concluido } = location.state
+const dataAtual = new Date().getTime() / 1000;
+
+console.log("Função chamada")
+
+const [aulas, setAulas] = useState([])
+const uid = auth.currentUser.uid;
+
+
+useEffect(()=>{
+    let tudoCorrigido = true;
+    var nomeColecao = "Modulo"+numero.toString();
+    db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao).collection("aulas").onSnapshot((docs)=>{
+    let temp = [];
+        docs.forEach(doc => {
+                let foraDoPrazo = false;
+                let id_aula = doc.id;
+                let dataObjeto = new Date(doc.data().prazo.seconds*1000)
+                let dataString = `${dataObjeto.getDate()}/${dataObjeto.getMonth()+1}/${dataObjeto.getFullYear()}`
+                if(dataAtual>doc.data().prazo.seconds){
+                    foraDoPrazo = true
+                }
+                let doc_temp = {...doc.data(), foraDoPrazo: foraDoPrazo, id_aula: id_aula, dataString: dataString}
+                temp.push(doc_temp)
+                if(!doc.data().atividadeCorrigida){
+                    tudoCorrigido = false;
+                }
+        });
+    setAulas(temp)
+    if(tudoCorrigido && !concluido){
+        db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao).update({concluido: true})
+    }
+    })
+},[uid])
+
+return <Materiais aulas={aulas}/>;
+
+}
\ No newline at end of file
diff --git a/front-end/src/services/firebase.js b/front-end/src/services/firebase.js
index 023b6d7..c94a599 100644
--- a/front-end/src/services/firebase.js
+++ b/front-end/src/services/firebase.js
@@ -1,7 +1,8 @@
 import firebase from 'firebase/compat/app';
 import { getStorage, ref, getDownloadURL, uploadBytesResumable } from "firebase/storage";
-import 'firebase/compat/auth';
+//import 'firebase/compat/auth';
 import 'firebase/compat/firestore';
+import { getAuth,signInWithPopup } from 'firebase/auth'; 
 
 const firebaseConfig = {
   apiKey: "AIzaSyCHO-rE3b7dWh3yUL7tfSvSAKGE50iLVZk",
@@ -16,6 +17,7 @@ const firebaseApp = firebase.initializeApp(firebaseConfig);
 
 const db = firebaseApp.firestore();
 const storage = getStorage(firebaseApp);
-const auth = firebase.auth();
+//const auth = firebase.auth();
+const auth = getAuth();
 
 export { auth, db, storage, ref, uploadBytesResumable, getDownloadURL };
\ No newline at end of file
-- 
GitLab


From 15dddbcba5384dbc09c49c1dca4bee4ddff22d68 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Thu, 1 Dec 2022 17:15:14 -0300
Subject: [PATCH 02/19] Finalizando os testes com materiais

---
 front-end/src/pages/Curso/Materiais.test.js | 35 ++++++++++++++++++---
 1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/front-end/src/pages/Curso/Materiais.test.js b/front-end/src/pages/Curso/Materiais.test.js
index 6624da4..d8c5904 100644
--- a/front-end/src/pages/Curso/Materiais.test.js
+++ b/front-end/src/pages/Curso/Materiais.test.js
@@ -2,12 +2,39 @@ import Materiais from './Materiais.js';
 import TestRenderer from 'react-test-renderer'; // ES6
 import {shallow} from 'enzyme';
 
-it("Aula fora do prazo", () => {
-    const aulasMock = [{prazo: new Date("2022-12-25").getTime() / 1000, num: 1, caminhosMateriais: ["link1","link2"]}]
-    //const wrapper = shallow(<Materiais aulas={aulasMock} />);
-    //expect(wrapper.getElementById("teste")).toBeDisable();
+it("Enviar tarefa depois do prazo", () => {
+    const aulasMock = [
+        {prazo: new Date("2021-12-25").getTime() / 1000, 
+        num: 1, 
+        caminhosMateriais: ["link1","link2"], 
+        foraDoPrazo: true}
+    ]
     const testRenderer = TestRenderer.create(<Materiais aulas={aulasMock} numero={2} concluido={true} />);
     const testInstance = testRenderer.root;
     expect(testInstance.findByType('button').props.disabled).toBe(true);
 
+});
+
+it("Enviar tarefa antes do prazo", () => {
+    const aulasMock = [
+        {prazo: new Date("2023-12-25").getTime() / 1000, 
+        num: 1, 
+        caminhosMateriais: ["link1","link2"], 
+        foraDoPrazo: false}
+    ]
+    const testRenderer = TestRenderer.create(<Materiais aulas={aulasMock} numero={2} concluido={true} />);
+    const testInstance = testRenderer.root;
+    expect(testInstance.findByType('button').props.disabled).toBe(false);
+});
+
+it("Enviar tarefa no dia do prazo", () => {
+    const aulasMock = [
+        {prazo: new Date().getTime() / 1000, 
+        num: 1, 
+        caminhosMateriais: ["link1","link2"], 
+        foraDoPrazo: false}
+    ]
+    const testRenderer = TestRenderer.create(<Materiais aulas={aulasMock} numero={2} concluido={true} />);
+    const testInstance = testRenderer.root;
+    expect(testInstance.findByType('button').props.disabled).toBe(false);
 });
\ No newline at end of file
-- 
GitLab


From 6439074095502cb0bf6fea4c3f1f39e5cff474f4 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Thu, 1 Dec 2022 17:15:48 -0300
Subject: [PATCH 03/19] =?UTF-8?q?Tentando=20realizar=20testes=20com=20camp?=
 =?UTF-8?q?os=20de=20valida=C3=A7=C3=A3o=20do=20perfil?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/pages/Perfil/Perfil.test.js | 11 +++++++++
 front-end/src/pages/Perfil/PerfilUtils.js | 27 +++++++++++++++++++++++
 2 files changed, 38 insertions(+)
 create mode 100644 front-end/src/pages/Perfil/Perfil.test.js
 create mode 100644 front-end/src/pages/Perfil/PerfilUtils.js

diff --git a/front-end/src/pages/Perfil/Perfil.test.js b/front-end/src/pages/Perfil/Perfil.test.js
new file mode 100644
index 0000000..f0c5c52
--- /dev/null
+++ b/front-end/src/pages/Perfil/Perfil.test.js
@@ -0,0 +1,11 @@
+const minha_funcao = require('./PerfilUtils.js');
+
+it('testar validação do cep', () => {
+    let endereco_esperado = {
+        rua: 'Praça Nossa Senhora das Graças',
+        bairro: 'Vila Nossa Senhora das Graças',
+        cidade: 'Taubaté',
+        uf: 'SP'
+    }
+    expect(minha_funcao.consultarCep('12060590')===endereco_esperado).toBe(true);
+  });
\ No newline at end of file
diff --git a/front-end/src/pages/Perfil/PerfilUtils.js b/front-end/src/pages/Perfil/PerfilUtils.js
new file mode 100644
index 0000000..7d7e755
--- /dev/null
+++ b/front-end/src/pages/Perfil/PerfilUtils.js
@@ -0,0 +1,27 @@
+const minha_funcao = {consultarCEP: (cep) => {
+    
+    const cepFinal = cep.replace(/[^0-9]/g, "");
+
+    if (cepFinal?.length !== 8) {
+      return false;
+    }
+    
+    /*fetch(`https://viacep.com.br/ws/${cepFinal}/json/`)
+      .then((res) => res.json())
+      .then((data) => {
+        let dados = {}
+        dados = {...dados, rua: data.logradouro}
+        dados = {...dadosUsuario, bairro: data.bairro}
+        dados = {...dadosUsuario, cidade: data.cidade}
+        dados = {...dadosUsuario, uf: data.uf}
+        return dados;
+      })
+      .catch(erro => { 
+        console.log(erro)
+        return false;
+    })*/
+    return true;
+  }
+}
+
+  module.exports = minha_funcao
\ No newline at end of file
-- 
GitLab


From 8de37a47cd9a06e768e8aa45e9ddb4102875eaa9 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sat, 3 Dec 2022 17:24:07 -0300
Subject: [PATCH 04/19] =?UTF-8?q?Tentando=20v=C3=A1rias=20coisas?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/App.js                          |  8 ++-
 front-end/src/context/AuthContext.js          |  3 +
 .../src/pages/Perfil/ControllerPerfil.js      |  0
 front-end/src/pages/Perfil/Perfil.js          | 56 ++++++++++++++-----
 front-end/src/pages/Perfil/Perfil.test.js     | 37 +++++++++++-
 front-end/src/pages/Perfil/PerfilUtils.js     | 43 +++++++-------
 6 files changed, 105 insertions(+), 42 deletions(-)
 create mode 100644 front-end/src/pages/Perfil/ControllerPerfil.js

diff --git a/front-end/src/App.js b/front-end/src/App.js
index 3475f08..23abacd 100644
--- a/front-end/src/App.js
+++ b/front-end/src/App.js
@@ -13,9 +13,11 @@ import PaginaDaDuvida from "./pages/Duvidas/Componentes/PaginaDaDuvida";
 import { ObterDados } from "./pages/Curso/ObterDados";
 import { useAuth } from "./context/AuthContext";
 
+
 function App() {
   return (
-    <AuthProvider>
+    <AuthProvider.Consumer>
+      {value=>
       <Router>
         <Routes>
           <Route path="/" element={<Login />} />
@@ -28,8 +30,8 @@ function App() {
           <Route exact path="/cadastro" element={<RotaPrivada> <Cadastro /> </RotaPrivada>} />
           <Route exact path="/doc" element={<RotaPrivada> <PaginaDaDuvida/> </RotaPrivada>} />
         </Routes>
-       </Router>
-    </AuthProvider>
+       </Router>}
+    </AuthProvider.Consumer>
   );
 }
 
diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index f8dee16..d0d31e5 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -4,6 +4,7 @@ import { signInWithEmailAndPassword, signOut, createUserWithEmailAndPassword, up
 import {doc, setDoc} from 'firebase/firestore'
 import {auth, db} from "../services/firebase";
 
+
 const AuthContext = createContext();
 
 export function useAuth() {
@@ -11,6 +12,7 @@ export function useAuth() {
   }
   
   export function AuthProvider({ children }) {
+    console.log(children);
     const [usuario, setUsuario] = useState();
     const [loading, setLoading] = useState(true);
     const [erro, setErro] = useState("");
@@ -61,6 +63,7 @@ export function useAuth() {
   
     return (
       <AuthContext.Provider value={value}>
+        {console.log(value)}
         {!loading && children}
       </AuthContext.Provider>
     );
diff --git a/front-end/src/pages/Perfil/ControllerPerfil.js b/front-end/src/pages/Perfil/ControllerPerfil.js
new file mode 100644
index 0000000..e69de29
diff --git a/front-end/src/pages/Perfil/Perfil.js b/front-end/src/pages/Perfil/Perfil.js
index b18211a..da2a8e6 100644
--- a/front-end/src/pages/Perfil/Perfil.js
+++ b/front-end/src/pages/Perfil/Perfil.js
@@ -11,9 +11,10 @@ import TextFieldPerfil from "./Componentes/TextFieldPerfil";
 import PhotoCamera from '@mui/icons-material/PhotoCamera';
 
 function Perfil() {
-
-    const uid = auth.currentUser.uid;
-    const [foto, setFoto] = useState(auth.currentUser.photoURL);
+    //const uid = 'abc'
+    //const uid = auth.currentUser.uid;
+    //const [foto, setFoto] = useState(auth.currentUser.photoURL);
+    const [foto, setFoto] = useState('lala');
     const [arquivo, setArquivo] = useState(null);
     const [cepValidado, setCepValidado] = useState(true);
     const [dadosUsuario, setDadosUsuarios] = useState({
@@ -40,7 +41,7 @@ function Perfil() {
         telefoneResponsavel:"",
     })
 
-    useEffect(()=>{
+    /*useEffect(()=>{
         console.log("alo")
         db.collection("usuarios").doc(uid).onSnapshot((doc)=>{
             setDadosUsuarios(doc.data())
@@ -48,7 +49,7 @@ function Perfil() {
         auth.onAuthStateChanged((user) => {
             setFoto(user.photoURL)
           });
-    },[uid, auth])
+    },[uid, auth])*/
 
 
     async function onFileChange(e) {
@@ -56,7 +57,7 @@ function Perfil() {
         setArquivo(arquivo);
     }
 
-    async function consultarCEP() {
+    /*async function consultarCEP(cep) {
     
         const cepFinal = dadosUsuario.cep.replace(/[^0-9]/g, "");
 
@@ -79,10 +80,35 @@ function Perfil() {
             console.log(erro)
             setCepValidado(false)
         })
+      }*/
+
+      async function consultarCEP() {
+    
+        /*const cepFinal = dadosUsuario.cep.replace(/[^0-9]/g, "");
+      
+        if (cepFinal?.length !== 8) {
+          return false;
+        }
+        
+        fetch(`https://viacep.com.br/ws/${cepFinal}/json/`)
+          .then((res) => res.json())
+          .then((data) => {
+            console.log("CEP", data);
+            end = {...end, rua: data.logradouro}
+            end = {...end, bairro: data.bairro}
+            end = {...end, cidade: data.cidade}
+            end = {...end, uf: data.uf}
+            return end;
+          })
+          .catch(erro => { 
+            console.log(erro)
+            return false;
+        })*/
       }
 
     async function editarInfos(){
-		var tipo_arquivo = arquivo.name.split(".")[1];
+      /*Manda tudo para firebase*/
+		/*var tipo_arquivo = arquivo.name.split(".")[1];
 		var caminho_arquivo = `imagens/perfil/${uid}.${tipo_arquivo}`
         const urlImagem = await uploadFile(arquivo, caminho_arquivo, storage, ref, uploadBytesResumable, getDownloadURL, auth);
         auth.currentUser.updateProfile({
@@ -96,11 +122,11 @@ function Perfil() {
             console.log("Dados atualizados com sucesso!")
         }, function(error){
             console.log("Erro ao atualizar os adados!"+error);
-        });
+        });*/
     }
 
     async function atualizarCampos(novoTexto, campo){
-        setDadosUsuarios({...dadosUsuario, [campo]: novoTexto})
+        /*setDadosUsuarios({...dadosUsuario, [campo]: novoTexto})*/
     }
     return (
         <div className="App">
@@ -122,9 +148,9 @@ function Perfil() {
                 </div>
 
                 <div className="linha">
-                    {ItensMinhasInformacoes.map((item) => {
+                    {ItensMinhasInformacoes.map((item, key) => {
                         return (
-                        <div>
+                        <div key={key}>
                             <TextFieldPerfil item={item} valor={dadosUsuario[item.value]} atualizar={atualizarCampos} />
                             {item.botao &&
                                 <Button onClick={(e)=>{consultarCEP()}}>{item.botao.nomeBotao}</Button>
@@ -137,8 +163,8 @@ function Perfil() {
                     <h2 className="titulo">Informações do Responsável</h2>
                 </div>
                 <div className="linha">
-                    {ItensInformacoesDoResponsavel.map((item) => {
-                            return <TextFieldPerfil item={item} valor={dadosUsuario[item.value]} atualizar={atualizarCampos} />   
+                    {ItensInformacoesDoResponsavel.map((item, key) => {
+                            return <div key={key}><TextFieldPerfil item={item} valor={dadosUsuario[item.value]} atualizar={atualizarCampos} /></div>   
                     })}
                 </div>
 
@@ -146,8 +172,8 @@ function Perfil() {
                     <h2 className="titulo">Minha Senha</h2>
                 </div> 
                 <div className="linha">
-                    {ItensMinhaSenha.map((item) => {
-                            return <TextFieldPerfil item={item} valor={dadosUsuario[item.value]} atualizar={atualizarCampos} />   
+                    {ItensMinhaSenha.map((item, key) => {
+                            return <div key={key}><TextFieldPerfil item={item} valor={dadosUsuario[item.value]} atualizar={atualizarCampos} /></div> 
                     })}
                 </div>
                 <div className="salvar-button">
diff --git a/front-end/src/pages/Perfil/Perfil.test.js b/front-end/src/pages/Perfil/Perfil.test.js
index f0c5c52..7c29446 100644
--- a/front-end/src/pages/Perfil/Perfil.test.js
+++ b/front-end/src/pages/Perfil/Perfil.test.js
@@ -1,4 +1,6 @@
-const minha_funcao = require('./PerfilUtils.js');
+import Perfil from './Perfil.js';
+import TestRenderer from 'react-test-renderer'; // ES6
+import renderer from 'react-test-renderer';
 
 it('testar validação do cep', () => {
     let endereco_esperado = {
@@ -7,5 +9,36 @@ it('testar validação do cep', () => {
         cidade: 'Taubaté',
         uf: 'SP'
     }
-    expect(minha_funcao.consultarCep('12060590')===endereco_esperado).toBe(true);
+    let dados = {
+        email:"", 
+        bairro: "",
+        celular: "",
+        cep: "12060590",
+        complemento: "",
+        cpfAluno: "",
+        cpfResponsavel:" ",
+        dataNacimento: "",
+        escola: "",
+        nome: "",
+        nomeResponsavel: "",
+        numero: "",
+        parentesco: "",
+        rua: "",
+        serie: "",
+        senha: "",
+        estado: "",
+        cidade:"",
+        rgResponsavel:"",
+        emailResponsavel:"",
+        telefoneResponsavel:""
+    }
+
+    const wrapper = renderer.create(<Perfil dadosUsuario={dados} />);
+    const inst = wrapper.root;
+    console.log(wrapper.root.consultarCep);
+    expect(inst.consultarCep('12060590')===endereco_esperado).toBe(true);
+    console.log(inst);
+    /*const testRenderer = TestRenderer.create(<Perfil dadosUsuario={dados} />);
+    const testInstance = testRenderer.root;
+    expect(testInstance.consultarCep('12060590')===endereco_esperado).toBe(true);*/
   });
\ No newline at end of file
diff --git a/front-end/src/pages/Perfil/PerfilUtils.js b/front-end/src/pages/Perfil/PerfilUtils.js
index 7d7e755..6859754 100644
--- a/front-end/src/pages/Perfil/PerfilUtils.js
+++ b/front-end/src/pages/Perfil/PerfilUtils.js
@@ -1,27 +1,26 @@
-const minha_funcao = {consultarCEP: (cep) => {
+async function consultarCEP() {
     
-    const cepFinal = cep.replace(/[^0-9]/g, "");
+  const cepFinal = dadosUsuario.cep.replace(/[^0-9]/g, "");
 
-    if (cepFinal?.length !== 8) {
-      return false;
-    }
-    
-    /*fetch(`https://viacep.com.br/ws/${cepFinal}/json/`)
-      .then((res) => res.json())
-      .then((data) => {
-        let dados = {}
-        dados = {...dados, rua: data.logradouro}
-        dados = {...dadosUsuario, bairro: data.bairro}
-        dados = {...dadosUsuario, cidade: data.cidade}
-        dados = {...dadosUsuario, uf: data.uf}
-        return dados;
-      })
-      .catch(erro => { 
-        console.log(erro)
-        return false;
-    })*/
-    return true;
+  if (cepFinal?.length !== 8) {
+    setCepValidado(false);
+    return;
   }
+  
+  fetch(`https://viacep.com.br/ws/${cepFinal}/json/`)
+    .then((res) => res.json())
+    .then((data) => {
+      console.log("CEP", data);
+      setDadosUsuarios({...dadosUsuario, rua: data.logradouro})
+      setDadosUsuarios({...dadosUsuario, bairro: data.bairro})
+      setDadosUsuarios({...dadosUsuario, cidade: data.cidade})
+      setDadosUsuarios({...dadosUsuario, uf: data.uf})
+      setCepValidado(true)
+    })
+    .catch(erro => { 
+      console.log(erro)
+      setCepValidado(false)
+  })
 }
 
-  module.exports = minha_funcao
\ No newline at end of file
+export {consultarCEP}
\ No newline at end of file
-- 
GitLab


From 28f66dd9841d10d5c675a26aad6a7bfd4356a405 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sat, 3 Dec 2022 18:49:58 -0300
Subject: [PATCH 05/19] =?UTF-8?q?mudan=C3=A7a=20na=20arquitetura=20do=20pe?=
 =?UTF-8?q?rfil?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/context/AuthContext.js   |  33 ++++++--
 front-end/src/pages/Curso/Materiais.js |   6 +-
 front-end/src/pages/Perfil/Perfil.js   | 100 +++++++++----------------
 front-end/src/util/uploadFile.js       |   4 +-
 4 files changed, 69 insertions(+), 74 deletions(-)

diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index d0d31e5..80506c3 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -3,6 +3,7 @@ import { createContext, useContext, useEffect, useState } from "react";
 import { signInWithEmailAndPassword, signOut, createUserWithEmailAndPassword, updateProfile, getAuth } from 'firebase/auth'
 import {doc, setDoc} from 'firebase/firestore'
 import {auth, db} from "../services/firebase";
+import uploadFile from "../util/uploadFile";
 
 
 const AuthContext = createContext();
@@ -16,6 +17,7 @@ export function useAuth() {
     const [usuario, setUsuario] = useState();
     const [loading, setLoading] = useState(true);
     const [erro, setErro] = useState("");
+    const [dadosUsuario, setDadosUsuario] = useState({});
   
     async function cadastrar(email, senha, tipo) {
       createUserWithEmailAndPassword(auth, email, senha).then(async (usuario)=>{
@@ -34,18 +36,36 @@ export function useAuth() {
       });
     }
   
-    function login(email, senha) {
-      return signInWithEmailAndPassword(auth, email, senha).then((e) => console.log(e)).catch((a) => console.log(a));
-    }
-  
     function logout() {
       return signOut(auth);
     }
-  
+
+    async function editarInfos(uid, arquivo, dadosAlterados){
+      if(arquivo!=null){
+        var tipo_arquivo = arquivo.name.split(".")[1];
+      var caminho_arquivo = `imagens/perfil/${uid}.${tipo_arquivo}`
+          const urlImagem = await uploadFile(arquivo, caminho_arquivo);
+          auth.currentUser.updateProfile({
+              photoURL: urlImagem
+            }).then(function() {
+              window.alert("Foto atualizada. Recarregue a página!")
+            }, function(error) {
+              console.log("Erro ao atualizar a foto!"+error)
+          });
+      }
+          db.collection("usuarios").doc(uid).update(dadosAlterados).then(function(){
+              console.log("Dados atualizados com sucesso!")
+          }, function(error){
+              console.log("Erro ao atualizar os adados!"+error);
+          });
+      }
   
     useEffect(() => {
       const unsubscribe = auth.onAuthStateChanged((user) => {
         setUsuario(user);
+        db.collection('usuarios').doc(user.uid).onSnapshot((doc)=>{
+          setDadosUsuario(doc.data())
+        })
         setLoading(false);
       });
   
@@ -56,9 +76,10 @@ export function useAuth() {
       usuario,
       erro,
       setErro,
-      login,
       cadastrar,
       logout,
+      dadosUsuario,
+      editarInfos,
     };
   
     return (
diff --git a/front-end/src/pages/Curso/Materiais.js b/front-end/src/pages/Curso/Materiais.js
index c22a7aa..0cb7fe7 100644
--- a/front-end/src/pages/Curso/Materiais.js
+++ b/front-end/src/pages/Curso/Materiais.js
@@ -12,13 +12,15 @@ import Typography from '@mui/material/Typography';
 import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
 import uploadFile from "../../util/uploadFile.js";
 import { async } from "@firebase/util";
-import { ObterDados } from "./ObterDados";
+import { useAuth } from "../../context/AuthContext";
 
 function Materiais({aulas, numero, concluido}) {
 
 	const [arquivo, setArquivo] = useState(null);
 
-	/*async function EnviarAtividade(id_aula, numero_aula){
+	console.log(useAuth())
+
+	async function EnviarAtividade(id_aula, numero_aula){
 		var nomeColecao = "Modulo"+numero.toString();
 		var tipo_arquivo = arquivo.name.split(".")[1];
 		var caminho_arquivo = `atividades/${nomeColecao}/aula${numero_aula}/${uid}.${tipo_arquivo}`
diff --git a/front-end/src/pages/Perfil/Perfil.js b/front-end/src/pages/Perfil/Perfil.js
index da2a8e6..b76cb0c 100644
--- a/front-end/src/pages/Perfil/Perfil.js
+++ b/front-end/src/pages/Perfil/Perfil.js
@@ -1,56 +1,34 @@
 import React from "react";
-import TextField from '@mui/material/TextField';
-import {db, auth, storage, ref, uploadBytesResumable, getDownloadURL } from '../../services/firebase';
 import {useState, useEffect} from 'react';
 import './Perfil.css';
 import Button from '@mui/material/Button'
 import Avatar from '@mui/material/Avatar';
-import uploadFile from "../../util/uploadFile";
 import { ItensInformacoesDoResponsavel, ItensMinhaSenha, ItensMinhasInformacoes } from "./Componentes/ItensPerfil";
 import TextFieldPerfil from "./Componentes/TextFieldPerfil";
-import PhotoCamera from '@mui/icons-material/PhotoCamera';
+import { useAuth } from "../../context/AuthContext";
 
 function Perfil() {
-    //const uid = 'abc'
-    //const uid = auth.currentUser.uid;
-    //const [foto, setFoto] = useState(auth.currentUser.photoURL);
-    const [foto, setFoto] = useState('lala');
-    const [arquivo, setArquivo] = useState(null);
+
+    /* Informações e funções que mexem com banco de dados 
+    são passadas por contexto */
+    const uid = useAuth().usuario.uid;
+    const foto = useAuth().usuario.photoURL;
+    const {dadosUsuario} = useAuth();
+    const {editarInfos} = useAuth();
+
+    /* Variáveis usuadas localmente */
+    const [dadosAlterados, setDadosAlterados] = useState(dadosUsuario) //variável temporária
+    const [arquivo, setArquivo] = useState(null);                        //que pega mudanças do usuário
     const [cepValidado, setCepValidado] = useState(true);
-    const [dadosUsuario, setDadosUsuarios] = useState({
-        email:"", 
-        bairro: "",
-        celular: "",
-        cep: "",
-        complemento: "",
-        cpfAluno: "",
-        cpfResponsavel:" ",
-        dataNacimento: "",
-        escola: "",
-        nome: "",
-        nomeResponsavel: "",
-        numero: "",
-        parentesco: "",
-        rua: "",
-        serie: "",
-        senha: "",
-        estado: "",
-        cidade:"",
-        rgResponsavel:"",
-        emailResponsavel:"",
-        telefoneResponsavel:"",
-    })
-
-    /*useEffect(()=>{
-        console.log("alo")
-        db.collection("usuarios").doc(uid).onSnapshot((doc)=>{
-            setDadosUsuarios(doc.data())
-        })
-        auth.onAuthStateChanged((user) => {
-            setFoto(user.photoURL)
-          });
-    },[uid, auth])*/
+    const [status, setStatus] = useState(undefined);
 
+    /* Atualiza variável local com banco de dados */
+    useEffect(()=>{
+        setDadosAlterados(dadosUsuario)
+    },[dadosUsuario])
+
+    /* Funções locais para validar dados e atualizar 
+    estado de variáveis (textos e imagens alteradas) */
 
     async function onFileChange(e) {
         const arquivo = e.target.files[0];
@@ -59,7 +37,7 @@ function Perfil() {
 
     /*async function consultarCEP(cep) {
     
-        const cepFinal = dadosUsuario.cep.replace(/[^0-9]/g, "");
+        const cepFinal = dadosAlterados.cep.replace(/[^0-9]/g, "");
 
         if (cepFinal?.length !== 8) {
           setCepValidado(false);
@@ -70,10 +48,10 @@ function Perfil() {
           .then((res) => res.json())
           .then((data) => {
             console.log("CEP", data);
-            setDadosUsuarios({...dadosUsuario, rua: data.logradouro})
-            setDadosUsuarios({...dadosUsuario, bairro: data.bairro})
-            setDadosUsuarios({...dadosUsuario, cidade: data.cidade})
-            setDadosUsuarios({...dadosUsuario, uf: data.uf})
+            setDadosAlterados({...dadosAlterados, rua: data.logradouro})
+            setDadosAlterados({...dadosAlterados, bairro: data.bairro})
+            setDadosAlterados({...dadosAlterados, cidade: data.cidade})
+            setDadosAlterados({...dadosAlterados, uf: data.uf})
             setCepValidado(true)
           })
           .catch(erro => { 
@@ -106,28 +84,20 @@ function Perfil() {
         })*/
       }
 
-    async function editarInfos(){
-      /*Manda tudo para firebase*/
-		/*var tipo_arquivo = arquivo.name.split(".")[1];
-		var caminho_arquivo = `imagens/perfil/${uid}.${tipo_arquivo}`
-        const urlImagem = await uploadFile(arquivo, caminho_arquivo, storage, ref, uploadBytesResumable, getDownloadURL, auth);
-        auth.currentUser.updateProfile({
-            photoURL: urlImagem
-          }).then(function() {
-            window.alert("Foto atualizada. Recarregue a página!")
-          }, function(error) {
-            console.log("Erro ao atualizar a foto!"+error)
-        });
-        db.collection("usuarios").doc(uid).update(dadosUsuario).then(function(){
-            console.log("Dados atualizados com sucesso!")
-        }, function(error){
-            console.log("Erro ao atualizar os adados!"+error);
-        });*/
+    async function validarInfos(){
+        let validacao = false;
+        if(validacao){
+            //editarInfos(uid, arquivo, dadosAlterados)
+            setStatus({ type: 'successo' });
+        } else {
+            setStatus({ type: 'fracasso' });
+        }
     }
 
     async function atualizarCampos(novoTexto, campo){
-        /*setDadosUsuarios({...dadosUsuario, [campo]: novoTexto})*/
+        setDadosAlterados({...dadosAlterados, [campo]: novoTexto})
     }
+
     return (
         <div className="App">
             <div className="logo-menu">
diff --git a/front-end/src/util/uploadFile.js b/front-end/src/util/uploadFile.js
index 2f0b227..f36eb95 100644
--- a/front-end/src/util/uploadFile.js
+++ b/front-end/src/util/uploadFile.js
@@ -1,4 +1,6 @@
-async function uploadFile(file, path, storage, ref, uploadBytesResumable, getDownloadURL, db, auth) {
+import {storage, ref, uploadBytesResumable, getDownloadURL } from '../services/firebase';
+
+async function uploadFile(file, path) {
   return new Promise(function(resolve, reject) {  
   var metadata = {
       contentType: "image/jpeg",
-- 
GitLab


From 4138333acbac38c7bbd8479bca18d1889ea564de Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sat, 3 Dec 2022 20:24:31 -0300
Subject: [PATCH 06/19] =?UTF-8?q?Obter=20d=C3=BAvidas=20refatorado=20para?=
 =?UTF-8?q?=20receber=20dados=20do=20useAuth?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/context/AuthContext.js          |  5 ++++
 .../src/pages/Duvidas/ObterDadosDuvidas.js    | 27 ++++++++++---------
 2 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index 80506c3..d060ce8 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -18,6 +18,7 @@ export function useAuth() {
     const [loading, setLoading] = useState(true);
     const [erro, setErro] = useState("");
     const [dadosUsuario, setDadosUsuario] = useState({});
+    const [queryDuvidas, setQueryDuvidas] = useState(undefined);
   
     async function cadastrar(email, senha, tipo) {
       createUserWithEmailAndPassword(auth, email, senha).then(async (usuario)=>{
@@ -66,6 +67,9 @@ export function useAuth() {
         db.collection('usuarios').doc(user.uid).onSnapshot((doc)=>{
           setDadosUsuario(doc.data())
         })
+        db.collection("forum").onSnapshot((docs)=>{
+          setQueryDuvidas(docs)
+      })
         setLoading(false);
       });
   
@@ -80,6 +84,7 @@ export function useAuth() {
       logout,
       dadosUsuario,
       editarInfos,
+      queryDuvidas,
     };
   
     return (
diff --git a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
index 78b25e0..32a7799 100644
--- a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
+++ b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
@@ -1,22 +1,23 @@
-import {db} from '../../services/firebase';
 import {useState, useEffect} from 'react';
 import Duvidas from './Duvidas';
+import { useAuth } from '../../context/AuthContext';
 
 export function ObterDadosDuvidas() {
-    const [duvidas, setDuvidas] = useState([])
 
+    /*Obtém o query da coleção de dúvidas por contexto*/
+    const {queryDuvidas} = useAuth();
+    const [duvidas, setDuvidas] = useState([])
+     
+    /*Faz alterações normal, mas não obtém o query diretamente do firabase*/
     useEffect(()=>{
-        db.collection("forum").get().then((docs)=>{
-            let temp = [];
-            docs.forEach(doc => {
-                    let id_aula = doc.id;
-                    let doc_temp = {...doc.data(),  id: id_aula}
-                    temp.push(doc_temp)
-            });
-            setDuvidas(temp)
-        })
-    },[])
-    console.log(duvidas)
+        let temp = [];
+        docs.forEach(doc => {
+            let id_aula = doc.id;
+            let doc_temp = {...doc.data(),  id: id_aula}
+            temp.push(doc_temp)
+        });
+        setDuvidas(temp)
+    },[queryDuvidas])
 
 return <Duvidas listaDeDuvidas={duvidas}/>;
 
-- 
GitLab


From 5b329b3a4222fc163ed8af11ff54d4871756203a Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sat, 3 Dec 2022 21:02:04 -0300
Subject: [PATCH 07/19] =?UTF-8?q?Refatorando=20a=20p=C3=A1gina=20de=20d?=
 =?UTF-8?q?=C3=BAvidas?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/App.js                          |  5 ++-
 front-end/src/context/AuthContext.js          | 22 +++++++++++
 .../pages/Duvidas/Componentes/CardUsuario.js  | 10 ++---
 front-end/src/pages/Duvidas/Duvidas.js        | 39 +++++--------------
 .../src/pages/Duvidas/ObterDadosDuvidas.js    |  4 +-
 5 files changed, 42 insertions(+), 38 deletions(-)

diff --git a/front-end/src/App.js b/front-end/src/App.js
index 23abacd..62cadb8 100644
--- a/front-end/src/App.js
+++ b/front-end/src/App.js
@@ -9,8 +9,9 @@ import Materiais from "./pages/Curso/Materiais";
 import Duvidas from "./pages/Duvidas/Duvidas";
 import Cadastro from "./pages/Cadastrar/Cadastrar";
 import Perfil from "./pages/Perfil/Perfil";
-import PaginaDaDuvida from "./pages/Duvidas/Componentes/PaginaDaDuvida";
 import { ObterDados } from "./pages/Curso/ObterDados";
+import { ObterDadosDuvidas } from "./pages/Duvidas/ObterDadosDuvidas";
+import PaginaDaDuvida from "./pages/Duvidas/Componentes/PaginaDaDuvida";
 import { useAuth } from "./context/AuthContext";
 
 
@@ -21,7 +22,7 @@ function App() {
       <Router>
         <Routes>
           <Route path="/" element={<Login />} />
-          <Route exact path="/duvidas" element={<RotaPrivada> <Duvidas /> </RotaPrivada>} />
+          <Route exact path="/duvidas" element={<RotaPrivada> <ObterDadosDuvidas /> </RotaPrivada>} />
           <Route exact path="/curso/materiais" element={<RotaPrivada> <Materiais /> </RotaPrivada>} />
           <Route exact path="/curso/dados" element={<RotaPrivada> <ObterDados /> </RotaPrivada>} />
           <Route exact path="/perfil" element={<RotaPrivada> <Perfil /> </RotaPrivada>} />
diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index d060ce8..b3ba1f6 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -41,6 +41,19 @@ export function useAuth() {
       return signOut(auth);
     }
 
+    async function publicarPergunta(titulo, mensagem, uid) {
+      await db.collection("forum").add({
+        Data: new Date(),
+        Mensagem: mensagem,
+        Titulo: titulo,
+        criador: uid,
+      }).then((novoDocumento) => {
+        db.collection("forum").doc(novoDocumento.id).update({
+          id: novoDocumento.id
+        })
+      })
+    }
+
     async function editarInfos(uid, arquivo, dadosAlterados){
       if(arquivo!=null){
         var tipo_arquivo = arquivo.name.split(".")[1];
@@ -60,6 +73,13 @@ export function useAuth() {
               console.log("Erro ao atualizar os adados!"+error);
           });
       }
+
+    async function obterDadosPorUID(uid){
+        const dadosUsuario = await db.collection("usuarios").doc(uid).get().then((doc)=>{
+            return doc.data();
+        })
+        return dadosUsuario
+    }
   
     useEffect(() => {
       const unsubscribe = auth.onAuthStateChanged((user) => {
@@ -85,6 +105,8 @@ export function useAuth() {
       dadosUsuario,
       editarInfos,
       queryDuvidas,
+      publicarPergunta,
+      obterDadosPorUID
     };
   
     return (
diff --git a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
index 0048c2a..b2d0cad 100644
--- a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
+++ b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
@@ -1,12 +1,12 @@
-import TextField from '@mui/material/TextField';
 import { useEffect, useState } from 'react';
-import { obterDadosPorUID } from '../../../util/obterDadosPorUID';
-import {auth} from '../../../services/firebase';
 import Avatar from '@mui/material/Avatar';
+import { useAuth } from '../../../context/AuthContext';
+
+function CardUsuario({uid}){
+
+    const {obterDadosPorUID} = useAuth();
 
-function CardUsuario(props){
     const [dadosUsuario, setDadosUsuario] = useState("")
-    const uid = props.uid
 
     useEffect(()=>{
         const obterDados = async () => {
diff --git a/front-end/src/pages/Duvidas/Duvidas.js b/front-end/src/pages/Duvidas/Duvidas.js
index 35c0b89..0611c5c 100644
--- a/front-end/src/pages/Duvidas/Duvidas.js
+++ b/front-end/src/pages/Duvidas/Duvidas.js
@@ -1,6 +1,5 @@
 import React, { useEffect, useState } from "react";
 import {useNavigate} from 'react-router-dom'
-import {db, auth} from '../../services/firebase';
 import { converterSegundosEmData } from "../../util/converterSegundosEmData";
 import CardUsuario from "./Componentes/CardUsuario";
 import "./Duvidas.css";
@@ -11,48 +10,27 @@ import Button from '@mui/material/Button';
 import CardDuvida from "./Componentes/CardDuvida";
 import { TextField } from "@mui/material";
 import PublicarTexto from "./Componentes/PublicarTexto";
+import { useAuth } from '../../context/AuthContext.js';
 
-function Duvidas() {
-	const [todasDuvidas, setTodasDuvidas] = useState([])
+function Duvidas({listaDeDuvidas}) {
+	
+	const publicarPergunta = useAuth();
+	const uid = useAuth().usuario.uid;
+	
 	const [titulo, setTitulo] = useState("")
 	const [duvida, setDuvida] = useState("")
+
   	let nav = useNavigate();
 	const irPaginaDuvida = (duvida) => {
 		nav('/doc', {state: duvida});
 	}
 
-	const publicarPergunta = async (titulo, mensagem) => {
-		await db.collection("forum").add({
-			Data: new Date(),
-			Mensagem: mensagem,
-			Titulo: titulo,
-			Criador: auth.currentUser.uid
-		}).then((novoDocumento) => {
-			db.collection("forum").doc(novoDocumento.id).update({
-				id: novoDocumento.id
-			})
-		})
-	}
-
-    useEffect(() => {
-        const obterDuvidas = async () => {
-			db.collection("forum").onSnapshot((querySnapshot) => {
-				const document =[];
-				querySnapshot.forEach(async (doc) => {
-					document.push({...doc.data(), id: doc.id});
-				});
-				setTodasDuvidas(document);
-			})
-        }
-        return obterDuvidas;
-    }, []);
-
 	return (
 		<div className="App">
 			<div className="page-duvidas">
 				<h1> Dúvidas </h1>
 				<div className="duvidas">
-					{todasDuvidas.map((duvida) => {
+					{listaDeDuvidas.map((duvida) => {
 						return (
 							<div className="caixa">
 								<CardDuvida duvida={duvida} navegacao={irPaginaDuvida} />
@@ -60,6 +38,7 @@ function Duvidas() {
 						)
 					})}
 				</div>
+				<button onClick={(e)=>{publicarPergunta(titulo, texto, uid)}} >Publicar Dúvida</button>
 			</div>
 
 			<div className="enviar-duvida">
diff --git a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
index 32a7799..6bbb57c 100644
--- a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
+++ b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
@@ -11,7 +11,7 @@ export function ObterDadosDuvidas() {
     /*Faz alterações normal, mas não obtém o query diretamente do firabase*/
     useEffect(()=>{
         let temp = [];
-        docs.forEach(doc => {
+        queryDuvidas?.forEach(doc => {
             let id_aula = doc.id;
             let doc_temp = {...doc.data(),  id: id_aula}
             temp.push(doc_temp)
@@ -19,6 +19,8 @@ export function ObterDadosDuvidas() {
         setDuvidas(temp)
     },[queryDuvidas])
 
+    console.log(duvidas)
+
 return <Duvidas listaDeDuvidas={duvidas}/>;
 
 }
\ No newline at end of file
-- 
GitLab


From 2c2656b4e090726e4b6952690098fab1d63867a5 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sun, 4 Dec 2022 22:06:01 -0300
Subject: [PATCH 08/19] =?UTF-8?q?Refatorando=20arquitetura=20de=20d=C3=BAv?=
 =?UTF-8?q?idas?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Duvidas/Componentes/PaginaDaDuvida.js     | 19 +++++++++-----
 front-end/src/pages/Duvidas/Duvidas.js        | 25 ++++++++++++++++---
 .../src/pages/Duvidas/ObterDadosDuvidas.js    |  4 +--
 3 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
index 2891aae..b916cd2 100644
--- a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
@@ -10,13 +10,15 @@ import CardDuvida from './CardDuvida';
 import { obterDadosPorUID } from '../../../util/obterDadosPorUID';
 import { TextField } from '@mui/material';
 import PublicarTexto from './PublicarTexto';
+import {useAuth} from '../../../context/AuthContext';
 
 function PaginaDaDuvida(props){
     const {state} = useLocation();
+    /*const uid = useAuth().usuario.uid;*/
     const [todasRespostas, setTodasRespostas] = useState([])
     
 
-    const publicarResposta = async (mensagem) => {
+    /*const publicarResposta = async (mensagem) => {
 		await db.collection("forum").doc(state.id).collection("respostas").add({
 			Data: new Date(),
 			Mensagem: mensagem,
@@ -27,7 +29,9 @@ function PaginaDaDuvida(props){
 				id: novoDocumento.id
 			})
 		})
-	}
+	}*/
+    /*const {publicarResposta} = useAuth();*/
+    const {obterRespostas} = useAuth();
 
     let nav = useNavigate();
 	const voltarParaDuvidas = (duvida) => {
@@ -35,7 +39,7 @@ function PaginaDaDuvida(props){
 	}
 
     useEffect(() => {
-        const obterRespostas = async () => {
+        /*const obterRespostas = async () => {
 			await db.collection("forum").doc(state.id).collection("respostas").onSnapshot((querySnapshot) => {
 				const document =[];
 				querySnapshot.forEach(async (doc) => {
@@ -45,11 +49,14 @@ function PaginaDaDuvida(props){
 					});
 				});
 				setTodasRespostas(document);
-			})
+			})*/
+        const respostas = async () => {
+			let todasRespostasTemp = await obterRespostas(state);
+            setTodasRespostas(todasRespostasTemp);
         }
-        return obterRespostas;
+        return respostas;
     }, [state]);
-    console.log(todasRespostas)
+    
     return(
         <div className="App">
             <div className="page-perguntas">
diff --git a/front-end/src/pages/Duvidas/Duvidas.js b/front-end/src/pages/Duvidas/Duvidas.js
index 0611c5c..66741e6 100644
--- a/front-end/src/pages/Duvidas/Duvidas.js
+++ b/front-end/src/pages/Duvidas/Duvidas.js
@@ -16,7 +16,7 @@ function Duvidas({listaDeDuvidas}) {
 	
 	const publicarPergunta = useAuth();
 	const uid = useAuth().usuario.uid;
-	
+
 	const [titulo, setTitulo] = useState("")
 	const [duvida, setDuvida] = useState("")
 
@@ -30,14 +30,31 @@ function Duvidas({listaDeDuvidas}) {
 			<div className="page-duvidas">
 				<h1> Dúvidas </h1>
 				<div className="duvidas">
-					{listaDeDuvidas.map((duvida) => {
+					{listaDeDuvidas.map((duvida, key) => {
+						console.log(converterSegundosEmData(duvida.Data.seconds))
 						return (
-							<div className="caixa">
-								<CardDuvida duvida={duvida} navegacao={irPaginaDuvida} />
+							<div key={key} className="caixa" onClick={() => irPaginaDuvida(duvida.id)}> 
+								<h2> {duvida.Titulo} </h2>
+								<div className="foto">
+									<CardUsuario uid={duvida.Criador} />
+								</div>
+								<p className="data">Em {converterSegundosEmData(duvida.Data.seconds)}</p>
+								<div className="like">
+									<IconButton aria-label="delete">
+										<ThumbUpIcon color="success" fontSize="large" />
+									</IconButton>
+								</div>
+
+								<div className="dislike">
+									<IconButton aria-label="delete">
+										<ThumbDownAltIcon sx={{ color: 'red' }} fontSize="large" />
+									</IconButton>
+								</div>
 							</div>
 						)
 					})}
 				</div>
+				<p>je</p>
 				<button onClick={(e)=>{publicarPergunta(titulo, texto, uid)}} >Publicar Dúvida</button>
 			</div>
 
diff --git a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
index 6bbb57c..a14567b 100644
--- a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
+++ b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
@@ -19,8 +19,6 @@ export function ObterDadosDuvidas() {
         setDuvidas(temp)
     },[queryDuvidas])
 
-    console.log(duvidas)
-
-return <Duvidas listaDeDuvidas={duvidas}/>;
+return <><p>je</p><Duvidas listaDeDuvidas={duvidas}/></>;
 
 }
\ No newline at end of file
-- 
GitLab


From 56d465bbe97e3a91292de10f7f1a56839af6172e Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sun, 4 Dec 2022 22:06:27 -0300
Subject: [PATCH 09/19] =?UTF-8?q?fazendo=20testes=20para=20d=C3=BAvidas?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/pages/Duvidas/Duvidas.test.js | 234 ++++----------------
 1 file changed, 49 insertions(+), 185 deletions(-)

diff --git a/front-end/src/pages/Duvidas/Duvidas.test.js b/front-end/src/pages/Duvidas/Duvidas.test.js
index 434f95a..d642891 100644
--- a/front-end/src/pages/Duvidas/Duvidas.test.js
+++ b/front-end/src/pages/Duvidas/Duvidas.test.js
@@ -1,189 +1,53 @@
-/* eslint-disable jest/no-conditional-expect */
-import React, { useEffect, useState } from "react";
 import TestRenderer from 'react-test-renderer'; // ES6
-import {expect, jest, test} from '@jest/globals';
-import ShallowRenderer from "react-test-renderer/shallow"
-import firebase from 'firebase/compat';
-import {configure, shallow} from 'enzyme';
-import Duvidas from './Duvidas.js';
-import { auth, db } from '../../services/firebase.js';
-import FirestoreMock, { firestore } from '../../setupTests.js';
-import { AuthContext, AuthProvider } from '../../context/AuthContext.js';
-import { signInWithEmailAndPassword } from 'firebase/auth';
-import Adapter from 'enzyme-adapter-react-16';
-
-/* it("Teste Duvidas", () => {
-    firebase.mockReturnValueOnce({
-        currentUser: { email: 'example@gmail.com', uid: 1, photoUrl: "https://firebasestorage.googleapis.com/v0/b/mc426-olamundos.appspot.com/o/imagens%2Fperfil%2FwRvT9vHkSNYhX9LWtTNa2fBfiZA2.jpg?alt=media&token=7b6bcc23-9b38-4267-8949-a3ff098f4147", emailVerified: true },
-    });
-    const duvidasMock = [{Criador: "wRvT9vHkSNYhX9LWtTNa2fBfiZA2", Data: { seconds: 545116}, Mensagem: "mensagemMock", Titulo: "tituloMock", id: "o61G72a4MWPOjK54MdEM"}]
-    const testRenderer = TestRenderer.create(<Duvidas listaDeDuvidas={duvidasMock} />);
-    const testInstance = testRenderer.root;
-    expect(true).toBe(true)
-});
- */
-configure({adapter: new Adapter()});
-const mockNavigateToProfile = jest.fn()
-jest.mock('firebase/app', () => {
-    return {
-      auth: mockNavigateToProfile.mockReturnThis(),
+import renderer from 'react-test-renderer';
+import { ObterProvider } from '../../context/AuthContext.js'
+import { screen, fireEvent, render } from '@testing-library/react'
+import Duvidas from './Duvidas.js'
+import PaginaDaDuvida from './Componentes/PaginaDaDuvida.js';
+import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
+
+  test("Testando página de dúvidas", () => {
+    const AuthContext = ObterProvider();
+    function publicarPergunta(){
+        return true;
+    }
+    function obterDadosPorUID(){
+        return true;
+    }
+    function publicarResposta(){
+        return true;
+    }
+    function obterRespostas(){
+        return true;
+    }
+    
+    const listaDeDuvidas = [{
+        Criador: "wRvT9vHkSNYhX9LWtTNa2fBfiZA2",
+        Data: {seconds: 1669298215, nanoseconds: 305000000},
+        Mensagem: "Teste Teste Teste Teste Teste Teste",
+        Titulo: "Teste",
+        id: "o61G72a4MWPOjK54MdEM"
+    }]
+    const usuario = {uid: "abdc1234", photoURL: "urlFakeFoto"}
+    const dadosUsuario = {nome:"Jéssica da Silva de Oliveira"};
+    const value = {
+        usuario,
+        dadosUsuario,
+        publicarPergunta,
+        obterDadosPorUID,
+        publicarResposta,
+        obterRespostas,
     };
-  });
-
-let realUseContext;
-let useContextMock;
-// Setup mock
-beforeEach(() => {
-    realUseContext = React.useContext;
-    useContextMock = React.useContext = mockNavigateToProfile;
-});
-// Cleanup mock
-afterEach(() => {
-    React.useContext = realUseContext;
-});
-
-  
-it("Aula fora do prazo", () => {
-    const duvidasMock = [{Criador: "wRvT9vHkSNYhX9LWtTNa2fBfiZA2", Data: { seconds: 545116}, Mensagem: "mensagemMock", Titulo: "tituloMock", id: "o61G72a4MWPOjK54MdEM"}]
-/*     const testRenderer = TestRenderer.create(<Duvidas listaDeDuvidas={duvidasMock} numero={2} concluido={true} />);*/
-    const usuario = { name: "Giorgio" };
-    /* const testRenderer = TestRenderer.create(
-        <AuthProvider>
-            <Duvidas listaDeDuvidas={duvidasMock}/>
-        </AuthProvider>
-    ); */
-    const wrapper = shallow((
-        <AuthProvider>
-            <Duvidas listaDeDuvidas={duvidasMock}/>
-        </AuthProvider>
-    ));
-    console.log(wrapper.children());
-    const autoContextWrapper = wrapper.find(0)
-   /*  const TestComponent = () => (
-        <NameContext.Provider value="Provided Value">
-            <MyComponent />
-        </NameContext.Provider>
+    render(
+      <AuthContext.Provider value={value}>
+        <Router>
+            <Routes>
+            <Route exact path="/" element={<Duvidas listaDeDuvidas={listaDeDuvidas} />} />
+            <Route exact path="/doc" element={<PaginaDaDuvida/>} />
+        </Routes>
+        </Router>
+      </AuthContext.Provider>
     );
-    const element = shallow(<TestComponent />);
-    expect(element.find(MyComponent).dive().text()).toBe("Provided Value"); */
-    
-    /* const testRenderer = TestRenderer.create(
-            <Duvidas listaDeDuvidas={duvidasMock}/>
-    ); */
-    /* const testInstance = testRenderer.root; */
-    expect(true).toBe(true)
-
-});
-
-describe('<Hello />', () => {
-    test('it should mock the context', () => {
-        const duvidasMock = [{Criador: "wRvT9vHkSNYhX9LWtTNa2fBfiZA2", Data: { seconds: 545116}, Mensagem: "mensagemMock", Titulo: "tituloMock", id: "o61G72a4MWPOjK54MdEM"}]
-        
-        const contextValues = { usuario: 'Salve' };
-        const component = shallow(<AuthContext />);
-        jest.spyOn(component.instance(), 'useAuth').mockImplementation(() => contextValues);
-        const wrapper = shallow(<Duvidas listaDeDuvidas={duvidasMock}/>);
-        
-    
-        expect(true).toBe(true)
-    });
-    test('aaa', () => {
-        const component = shallow(<AuthContext />);
-        const sumSpy = jest.spyOn(component.instance(), 'sum')
-        sumSpy.mockReturnValue(20);
-
-        expect(AuthContext.sum(5, 5)).toBe(20)
-    })
+    expect(screen.getByText('Enviado por')).toBeInTheDocument(1);
+    expect(screen.getByText('Em 24/10/2022 às 10:56')).toBeInTheDocument(1);
   });
-
-
-/* const mockNavigateToProfile = jest.fn()
-
-jest.mock('firebase/app', () => {
-  const mockFirebase = {
-    auth: mockNavigateToProfile(() => {
-      return {
-        currentUser: {
-          email: 'test',
-          uid: '123',
-          emailVerified: true
-        },
-
-        signInWithEmailAndPassword: mockNavigateToProfile.mockImplementation()
-      }
-    }),
-    initializeApp: mockNavigateToProfile
-  }
-  return mockFirebase
-})
- */
-/* describe('Test for authenticate ()', () => {
-    it('signInWithEmailAndPassword ()', () => {
-      const email = 'test'
-      const password = 'mypassword'
-      const spy = jest.spyOn(video, 'play');
-      signInWithEmailAndPassword(auth, email, password)
-      expect(signInWithEmailAndPassword).toHaveBeenCalled()
-    })
-  }) */
-
- /*  describe('61358076', () => {
-    afterEach(() => {
-      jest.restoreAllMocks();
-    });
-    it('should pass', async () => {
-      const firestoreMock = {
-        collection: jest.fn().mockReturnThis(),
-        doc: jest.fn().mockReturnThis(),
-        set: jest.fn().mockResolvedValueOnce(),
-      };
-      const clearFieldsSpy = jest.spyOn(Duvidas.prototype, 'clearFields');
-      jest.spyOn(firebase, 'firestore').mockImplementationOnce(() => firestoreMock);
-      const wrapper = shallow(<Duvidas></Duvidas>);
-      await wrapper.instance().saveToFirebase();
-      expect(firestoreMock.collection).toBeCalledWith('messages');
-      expect(firestoreMock.doc).toBeCalledWith('mock@example.com');
-      expect(firestoreMock.set).toBeCalledWith({ email: 'mock@example.com' });
-      expect(clearFieldsSpy).toBeCalledWith('Your Message have been submitted successfully.');
-    });
-  }); */
-
-/* describe("setDocData", () => {
-    const mockData = { fake: "data" };
-    beforeEach(() => {
-      jest.clearAllMocks();
-      db.collection("fakeDocID").add(mockData);
-    });
-  
-    it("writes the correct doc", () => {
-      expect(db.doc()).toHaveBeenCalledWith("docs/fakeDocID");
-    });
-  
-    it("adds a timestamp, and writes it to the doc", () => {
-      expect(firestore().doc().set).toHaveBeenCalledWith({
-        created: "MOCK_TIME",
-        fake: "data"
-      });
-    });
-  });
-
-describe('The Agreement model', () => {
-    const firestoreMock = new FirestoreMock()
-    beforeEach(() => {
-        firebase.firestore = firestoreMock
-        firestoreMock.reset()
-    })
-
-    it('does something', (done) => {
-        firestoreMock.mockAddReturn = { id: 'test-id' }
-        console.log("AAAAAAAAAAAAAAAAa")
-        console.log(firestoreMock.mockAddReturn)
-        db.collection('foobar').add({foo: 'bar'}).then(res => {
-            console.log("BBBBBBBBBBBBBBBBB")
-            expect(firestoreMock.mockCollection).toBeCalledWith('foobar')
-            expect(firestoreMock.mockAdd).toBeCalledWith({foo: 'bar'})
-            expect(res.id).toEqual('test-id')
-            done()
-        }).catch(done)
-    })
-}) */
\ No newline at end of file
-- 
GitLab


From 0c8ac0f71176772cd89680305044610683f7d146 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sun, 4 Dec 2022 22:08:06 -0300
Subject: [PATCH 10/19] =?UTF-8?q?excluindo=20arquivo=20de=20teste=20n?=
 =?UTF-8?q?=C3=A3o=20testado?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/App.test.js | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 front-end/src/App.test.js

diff --git a/front-end/src/App.test.js b/front-end/src/App.test.js
deleted file mode 100644
index 8b13789..0000000
--- a/front-end/src/App.test.js
+++ /dev/null
@@ -1 +0,0 @@
-
-- 
GitLab


From 02ae94c18600cf06dee9047995b6d3089913693c Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Sun, 4 Dec 2022 22:08:42 -0300
Subject: [PATCH 11/19] refatorando materiais

---
 front-end/src/context/AuthContext.js   | 31 +++++++++++++++++++++++++-
 front-end/src/pages/Curso/Materiais.js | 14 ++++--------
 2 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index b3ba1f6..3f51313 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -80,6 +80,33 @@ export function useAuth() {
         })
         return dadosUsuario
     }
+
+    async function publicarResposta(mensagem, uid_pergunta, uid_user_logado){
+      await db.collection("forum").doc(uid_pergunta).collection("respostas").add({
+        Data: new Date(),
+        Mensagem: mensagem,
+              Likes: 0,
+        Criador: uid_user_logado
+      }).then((novoDocumento) => {
+        db.collection("forum").doc(uid_pergunta).collection("respostas").doc(novoDocumento.id).update({
+          id: novoDocumento.id
+        })
+      })
+    }
+
+    async function obterRespostas(uid_pergunta){
+			let respostas = await db.collection("forum").doc(uid_pergunta).collection("respostas").get().then((querySnapshot) => {
+				const document =[];
+				querySnapshot.forEach((doc) => {
+					document.push({
+					...doc.data(),
+					id: doc.id
+					});
+				});
+				return document;
+			})
+      return respostas;
+    }
   
     useEffect(() => {
       const unsubscribe = auth.onAuthStateChanged((user) => {
@@ -106,7 +133,9 @@ export function useAuth() {
       editarInfos,
       queryDuvidas,
       publicarPergunta,
-      obterDadosPorUID
+      obterDadosPorUID,
+      publicarResposta,
+      obterRespostas,
     };
   
     return (
diff --git a/front-end/src/pages/Curso/Materiais.js b/front-end/src/pages/Curso/Materiais.js
index 0cb7fe7..3e096a6 100644
--- a/front-end/src/pages/Curso/Materiais.js
+++ b/front-end/src/pages/Curso/Materiais.js
@@ -55,8 +55,8 @@ function Materiais({aulas, numero, concluido}) {
 				</div>
 				<h1>Módulo 1</h1>             
 			</div>
-			{aulas.map((aula)=>(
-				<div className="aulas">
+			{aulas.map((aula, key)=>(
+				<div key={key} className="aulas">
 
 				<div className="Aula-titulo">
 					<h2>{"Aula "+aula.numeroAula}</h2>
@@ -80,16 +80,10 @@ function Materiais({aulas, numero, concluido}) {
         </AccordionSummary>
         <AccordionDetails>
 			<ul className="material-list">
-				<li>
+				<li key={aula.numero}>
 					<a className="link-aula" href={aula.linkAula} target="_blank" >Aula Gravada</a>
 				</li>
-				{aula.caminhosMateriais.map((mat,i)=>(
-					<Typography>
-						<li>
-							<a className="link-material" href={mat} target="_blank">{`Material ${i+1}`}</a>
-						</li>
-					</Typography>
-				))}
+				
 			</ul>
         </AccordionDetails>
       </Accordion>
-- 
GitLab


From 304e165a727640edcc6ad2bb72597da0acb873b0 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 15:25:39 -0300
Subject: [PATCH 12/19] corrigindo problema do perfil

---
 front-end/src/context/AuthContext.js          |  4 +-
 .../src/pages/Duvidas/ObterDadosDuvidas.js    |  2 +-
 front-end/src/pages/Perfil/Perfil.js          | 53 ++++++++++++++++---
 3 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index 3f51313..82c3320 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -75,10 +75,10 @@ export function useAuth() {
       }
 
     async function obterDadosPorUID(uid){
-        const dadosUsuario = await db.collection("usuarios").doc(uid).get().then((doc)=>{
+        const dadosUsuarioExterno = await db.collection("usuarios").doc(uid).get().then((doc)=>{
             return doc.data();
         })
-        return dadosUsuario
+        return dadosUsuarioExterno
     }
 
     async function publicarResposta(mensagem, uid_pergunta, uid_user_logado){
diff --git a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
index a14567b..ceff92f 100644
--- a/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
+++ b/front-end/src/pages/Duvidas/ObterDadosDuvidas.js
@@ -19,6 +19,6 @@ export function ObterDadosDuvidas() {
         setDuvidas(temp)
     },[queryDuvidas])
 
-return <><p>je</p><Duvidas listaDeDuvidas={duvidas}/></>;
+return <><Duvidas listaDeDuvidas={duvidas}/></>;
 
 }
\ No newline at end of file
diff --git a/front-end/src/pages/Perfil/Perfil.js b/front-end/src/pages/Perfil/Perfil.js
index b76cb0c..32c5e7c 100644
--- a/front-end/src/pages/Perfil/Perfil.js
+++ b/front-end/src/pages/Perfil/Perfil.js
@@ -17,14 +17,38 @@ function Perfil() {
     const {editarInfos} = useAuth();
 
     /* Variáveis usuadas localmente */
-    const [dadosAlterados, setDadosAlterados] = useState(dadosUsuario) //variável temporária
-    const [arquivo, setArquivo] = useState(null);                        //que pega mudanças do usuário
+    const [dadosAlterados, setDadosAlterados] = useState({
+        email:"", 
+        bairro: "",
+        celular: "",
+        cep: "",
+        complemento: "",
+        cpfAluno: "",
+        cpfResponsavel:" ",
+        dataNacimento: "",
+        escola: "",
+        nome: "",
+        nomeResponsavel: "",
+        numero: "",
+        parentesco: "",
+        rua: "",
+        serie: "",
+        senha: "",
+        estado: "",
+        cidade:"",
+        rgResponsavel:"",
+        emailResponsavel:"",
+        telefoneResponsavel:"",
+    }) 
+    const [arquivo, setArquivo] = useState(null);                        
     const [cepValidado, setCepValidado] = useState(true);
     const [status, setStatus] = useState(undefined);
 
     /* Atualiza variável local com banco de dados */
     useEffect(()=>{
-        setDadosAlterados(dadosUsuario)
+        if(dadosUsuario!=undefined){
+            setDadosAlterados(dadosUsuario)
+        }
     },[dadosUsuario])
 
     /* Funções locais para validar dados e atualizar 
@@ -47,7 +71,6 @@ function Perfil() {
         fetch(`https://viacep.com.br/ws/${cepFinal}/json/`)
           .then((res) => res.json())
           .then((data) => {
-            console.log("CEP", data);
             setDadosAlterados({...dadosAlterados, rua: data.logradouro})
             setDadosAlterados({...dadosAlterados, bairro: data.bairro})
             setDadosAlterados({...dadosAlterados, cidade: data.cidade})
@@ -85,10 +108,21 @@ function Perfil() {
       }
 
     async function validarInfos(){
-        let validacao = false;
+        let validacao = true;
+        if(dadosAlterados.cep.length != 8){
+            validacao = false;
+        }
+        if(dadosAlterados.cpfAluno.length != 11){
+            validacao = false;
+        }
         if(validacao){
+<<<<<<< HEAD
             //editarInfos(uid, arquivo, dadosAlterados)
             setStatus({ type: 'successo' });
+=======
+            editarInfos(uid, arquivo, dadosAlterados)
+            setStatus({ type: 'sucesso' });
+>>>>>>> corrigindo problema do perfil
         } else {
             setStatus({ type: 'fracasso' });
         }
@@ -146,8 +180,13 @@ function Perfil() {
                             return <div key={key}><TextFieldPerfil item={item} valor={dadosUsuario[item.value]} atualizar={atualizarCampos} /></div> 
                     })}
                 </div>
-                <div className="salvar-button">
-                    <Button onClick={(e)=>{editarInfos()}} variant="contained" size="large">Salvar Informações</Button>
+                <div>
+                    <Button onClick={(e)=>{validarInfos()}} variant="contained" size="large">Salvar Informações</Button>
+                    <>
+                    {status?.type === 'sucesso' && <p>Alterações Realizadas</p>}
+                    {status?.type === 'fracasso' && <p>Problema ao salvar alterações</p>}
+                    </>
+                </div>
                 </div>
         </div>
 	);
-- 
GitLab


From aa02d8d608b3ab0003ead238071a34a8ae5dfda8 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 15:49:04 -0300
Subject: [PATCH 13/19] fazendo rebase da develop na arquitetura

---
 front-end/src/pages/Curso/Materiais.js | 6 ++----
 front-end/src/pages/Perfil/Perfil.js   | 6 +-----
 2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/front-end/src/pages/Curso/Materiais.js b/front-end/src/pages/Curso/Materiais.js
index 3e096a6..af4ecda 100644
--- a/front-end/src/pages/Curso/Materiais.js
+++ b/front-end/src/pages/Curso/Materiais.js
@@ -18,8 +18,6 @@ function Materiais({aulas, numero, concluido}) {
 
 	const [arquivo, setArquivo] = useState(null);
 
-	console.log(useAuth())
-
 	async function EnviarAtividade(id_aula, numero_aula){
 		var nomeColecao = "Modulo"+numero.toString();
 		var tipo_arquivo = arquivo.name.split(".")[1];
@@ -27,9 +25,9 @@ function Materiais({aulas, numero, concluido}) {
 		const urlFile = await uploadFile(arquivo, caminho_arquivo, storage, ref, uploadBytesResumable, getDownloadURL, auth);
 		db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao)
 		.collection("aulas").doc(id_aula).update({caminhoTarefaEnviada: urlFile})
-	}*/
+	}
 
-	async function EnviarAtividade(id_aula, numero_aula){}
+	/*async function EnviarAtividade(id_aula, numero_aula){}*/
 
 	async function onFileChange(e) {
         const arquivo = e.target.files[0];
diff --git a/front-end/src/pages/Perfil/Perfil.js b/front-end/src/pages/Perfil/Perfil.js
index 32c5e7c..600dd62 100644
--- a/front-end/src/pages/Perfil/Perfil.js
+++ b/front-end/src/pages/Perfil/Perfil.js
@@ -116,13 +116,8 @@ function Perfil() {
             validacao = false;
         }
         if(validacao){
-<<<<<<< HEAD
-            //editarInfos(uid, arquivo, dadosAlterados)
-            setStatus({ type: 'successo' });
-=======
             editarInfos(uid, arquivo, dadosAlterados)
             setStatus({ type: 'sucesso' });
->>>>>>> corrigindo problema do perfil
         } else {
             setStatus({ type: 'fracasso' });
         }
@@ -133,6 +128,7 @@ function Perfil() {
     }
 
     return (
+        <div>
         <div className="App">
             <div className="logo-menu">
                 <Avatar
-- 
GitLab


From 382ad3e1e47e39584e895800b164550d2182d8e6 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 19:01:17 -0300
Subject: [PATCH 14/19] corrigindo erro de materiais

---
 front-end/src/pages/Curso/Materiais.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/front-end/src/pages/Curso/Materiais.js b/front-end/src/pages/Curso/Materiais.js
index af4ecda..09fc6db 100644
--- a/front-end/src/pages/Curso/Materiais.js
+++ b/front-end/src/pages/Curso/Materiais.js
@@ -18,16 +18,16 @@ function Materiais({aulas, numero, concluido}) {
 
 	const [arquivo, setArquivo] = useState(null);
 
-	async function EnviarAtividade(id_aula, numero_aula){
+	/*async function EnviarAtividade(id_aula, numero_aula){
 		var nomeColecao = "Modulo"+numero.toString();
 		var tipo_arquivo = arquivo.name.split(".")[1];
 		var caminho_arquivo = `atividades/${nomeColecao}/aula${numero_aula}/${uid}.${tipo_arquivo}`
 		const urlFile = await uploadFile(arquivo, caminho_arquivo, storage, ref, uploadBytesResumable, getDownloadURL, auth);
 		db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao)
 		.collection("aulas").doc(id_aula).update({caminhoTarefaEnviada: urlFile})
-	}
+	}*/
 
-	/*async function EnviarAtividade(id_aula, numero_aula){}*/
+	async function EnviarAtividade(id_aula, numero_aula){}
 
 	async function onFileChange(e) {
         const arquivo = e.target.files[0];
-- 
GitLab


From 5aa0601b7e8b4e12f98d5fda67b9631adab4f67f Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 19:11:43 -0300
Subject: [PATCH 15/19] corrigindo problemas de arquitetura para testes

---
 front-end/src/App.js                          |  7 ++--
 .../Duvidas/Componentes/PaginaDaDuvida.js     | 41 ++++---------------
 front-end/src/pages/Duvidas/Duvidas.js        |  2 +-
 front-end/src/pages/Perfil/Perfil.js          |  1 +
 4 files changed, 14 insertions(+), 37 deletions(-)

diff --git a/front-end/src/App.js b/front-end/src/App.js
index 62cadb8..c1689f9 100644
--- a/front-end/src/App.js
+++ b/front-end/src/App.js
@@ -17,8 +17,7 @@ import { useAuth } from "./context/AuthContext";
 
 function App() {
   return (
-    <AuthProvider.Consumer>
-      {value=>
+    <AuthProvider>
       <Router>
         <Routes>
           <Route path="/" element={<Login />} />
@@ -31,8 +30,8 @@ function App() {
           <Route exact path="/cadastro" element={<RotaPrivada> <Cadastro /> </RotaPrivada>} />
           <Route exact path="/doc" element={<RotaPrivada> <PaginaDaDuvida/> </RotaPrivada>} />
         </Routes>
-       </Router>}
-    </AuthProvider.Consumer>
+       </Router>
+    </AuthProvider>
   );
 }
 
diff --git a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
index b916cd2..cd38f08 100644
--- a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
@@ -14,48 +14,25 @@ import {useAuth} from '../../../context/AuthContext';
 
 function PaginaDaDuvida(props){
     const {state} = useLocation();
-    /*const uid = useAuth().usuario.uid;*/
+    const uid = useAuth().usuario.uid;
     const [todasRespostas, setTodasRespostas] = useState([])
-    
-
-    /*const publicarResposta = async (mensagem) => {
-		await db.collection("forum").doc(state.id).collection("respostas").add({
-			Data: new Date(),
-			Mensagem: mensagem,
-            Likes: 0,
-			Criador: auth.currentUser.uid
-		}).then((novoDocumento) => {
-			db.collection("forum").doc(state.id).collection("respostas").doc(novoDocumento.id).update({
-				id: novoDocumento.id
-			})
-		})
-	}*/
-    /*const {publicarResposta} = useAuth();*/
+    const {publicarResposta} = useAuth();
     const {obterRespostas} = useAuth();
 
-    let nav = useNavigate();
-	const voltarParaDuvidas = (duvida) => {
-		nav('/duvidas');
-	}
-
     useEffect(() => {
-        /*const obterRespostas = async () => {
-			await db.collection("forum").doc(state.id).collection("respostas").onSnapshot((querySnapshot) => {
-				const document =[];
-				querySnapshot.forEach(async (doc) => {
-					document.push({
-					...doc.data(),
-					id: doc.id,
-					});
-				});
-				setTodasRespostas(document);
-			})*/
         const respostas = async () => {
 			let todasRespostasTemp = await obterRespostas(state);
             setTodasRespostas(todasRespostasTemp);
         }
         return respostas;
     }, [state]);
+
+    let nav = useNavigate();
+	const voltarParaDuvidas = (duvida) => {
+		nav('/duvidas');
+	}
+
+
     
     return(
         <div className="App">
diff --git a/front-end/src/pages/Duvidas/Duvidas.js b/front-end/src/pages/Duvidas/Duvidas.js
index 66741e6..5c19a87 100644
--- a/front-end/src/pages/Duvidas/Duvidas.js
+++ b/front-end/src/pages/Duvidas/Duvidas.js
@@ -55,7 +55,7 @@ function Duvidas({listaDeDuvidas}) {
 					})}
 				</div>
 				<p>je</p>
-				<button onClick={(e)=>{publicarPergunta(titulo, texto, uid)}} >Publicar Dúvida</button>
+				<button onClick={(e)=>{publicarPergunta(titulo, duvida, uid)}} >Publicar Dúvida</button>
 			</div>
 
 			<div className="enviar-duvida">
diff --git a/front-end/src/pages/Perfil/Perfil.js b/front-end/src/pages/Perfil/Perfil.js
index 600dd62..2317ef1 100644
--- a/front-end/src/pages/Perfil/Perfil.js
+++ b/front-end/src/pages/Perfil/Perfil.js
@@ -6,6 +6,7 @@ import Avatar from '@mui/material/Avatar';
 import { ItensInformacoesDoResponsavel, ItensMinhaSenha, ItensMinhasInformacoes } from "./Componentes/ItensPerfil";
 import TextFieldPerfil from "./Componentes/TextFieldPerfil";
 import { useAuth } from "../../context/AuthContext";
+import PhotoCamera from '@mui/icons-material/PhotoCamera';
 
 function Perfil() {
 
-- 
GitLab


From 68106a60bf40c710acecb2d9c5738d7e70420442 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 19:18:00 -0300
Subject: [PATCH 16/19] corrigindo problema de undefined com materiais

---
 front-end/src/pages/Curso/Materiais.js | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/front-end/src/pages/Curso/Materiais.js b/front-end/src/pages/Curso/Materiais.js
index 09fc6db..4aeba9c 100644
--- a/front-end/src/pages/Curso/Materiais.js
+++ b/front-end/src/pages/Curso/Materiais.js
@@ -1,5 +1,5 @@
 import React from "react";
-//import {db, auth, storage, ref, uploadBytesResumable, getDownloadURL } from '../../services/firebase';
+import {db, auth, storage, ref, uploadBytesResumable, getDownloadURL } from '../../services/firebase';
 import './Materiais.css'
 import {useState, useEffect} from 'react';
 import Button from '@mui/material/Button';
@@ -17,15 +17,16 @@ import { useAuth } from "../../context/AuthContext";
 function Materiais({aulas, numero, concluido}) {
 
 	const [arquivo, setArquivo] = useState(null);
+	const [uid, setUid] = useState("")
 
-	/*async function EnviarAtividade(id_aula, numero_aula){
+	async function EnviarAtividade(id_aula, numero_aula){
 		var nomeColecao = "Modulo"+numero.toString();
 		var tipo_arquivo = arquivo.name.split(".")[1];
 		var caminho_arquivo = `atividades/${nomeColecao}/aula${numero_aula}/${uid}.${tipo_arquivo}`
-		const urlFile = await uploadFile(arquivo, caminho_arquivo, storage, ref, uploadBytesResumable, getDownloadURL, auth);
+		const urlFile = await uploadFile(arquivo, caminho_arquivo);
 		db.collection("usuarios").doc(uid).collection("curso").doc(nomeColecao)
 		.collection("aulas").doc(id_aula).update({caminhoTarefaEnviada: urlFile})
-	}*/
+	}
 
 	async function EnviarAtividade(id_aula, numero_aula){}
 
@@ -41,7 +42,10 @@ function Materiais({aulas, numero, concluido}) {
       setExpanded(isExpanded ? panel : false);
     };
 
-	//const uid = auth.currentUser.uid;
+	if(auth.currentUser!=undefined){
+		setUid(auth.currentUser.uid)
+	}
+
 	const dataAtual = new Date().getTime() / 1000;
 
 	return (
-- 
GitLab


From fd716debd86eb45dc64719fc3fed3b32d9f16222 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 20:08:59 -0300
Subject: [PATCH 17/19] =?UTF-8?q?resolvendo=20problema=20com=20d=C3=BAvida?=
 =?UTF-8?q?s=20no=20teste?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/context/AuthContext.js           |  4 ++--
 front-end/src/pages/Curso/Materiais.js         | 14 +++++++-------
 .../pages/Duvidas/Componentes/CardDuvida.js    |  2 ++
 .../pages/Duvidas/Componentes/CardUsuario.js   |  2 +-
 .../Duvidas/Componentes/PaginaDaDuvida.js      | 18 +++++++++++++-----
 .../pages/Duvidas/Componentes/PublicarTexto.js |  6 ++++--
 front-end/src/pages/Duvidas/Duvidas.js         | 12 ++----------
 7 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index 82c3320..a70ea6f 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -13,7 +13,7 @@ export function useAuth() {
   }
   
   export function AuthProvider({ children }) {
-    console.log(children);
+ 
     const [usuario, setUsuario] = useState();
     const [loading, setLoading] = useState(true);
     const [erro, setErro] = useState("");
@@ -105,6 +105,7 @@ export function useAuth() {
 				});
 				return document;
 			})
+      console.log("ggggggggggggggggggggggg",respostas)
       return respostas;
     }
   
@@ -140,7 +141,6 @@ export function useAuth() {
   
     return (
       <AuthContext.Provider value={value}>
-        {console.log(value)}
         {!loading && children}
       </AuthContext.Provider>
     );
diff --git a/front-end/src/pages/Curso/Materiais.js b/front-end/src/pages/Curso/Materiais.js
index 4aeba9c..5e67baa 100644
--- a/front-end/src/pages/Curso/Materiais.js
+++ b/front-end/src/pages/Curso/Materiais.js
@@ -1,5 +1,5 @@
 import React from "react";
-import {db, auth, storage, ref, uploadBytesResumable, getDownloadURL } from '../../services/firebase';
+import {db, auth} from '../../services/firebase';
 import './Materiais.css'
 import {useState, useEffect} from 'react';
 import Button from '@mui/material/Button';
@@ -11,8 +11,6 @@ import AccordionSummary from '@mui/material/AccordionSummary';
 import Typography from '@mui/material/Typography';
 import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
 import uploadFile from "../../util/uploadFile.js";
-import { async } from "@firebase/util";
-import { useAuth } from "../../context/AuthContext";
 
 function Materiais({aulas, numero, concluido}) {
 
@@ -42,9 +40,12 @@ function Materiais({aulas, numero, concluido}) {
       setExpanded(isExpanded ? panel : false);
     };
 
-	if(auth.currentUser!=undefined){
-		setUid(auth.currentUser.uid)
-	}
+	useEffect(()=>{
+		if(auth.currentUser!=undefined){
+			setUid(auth.currentUser.uid)
+		}
+	},[auth.currentUser])
+	
 
 	const dataAtual = new Date().getTime() / 1000;
 
@@ -117,5 +118,4 @@ function Materiais({aulas, numero, concluido}) {
 	)
 }
 
-
 export default Materiais;
\ No newline at end of file
diff --git a/front-end/src/pages/Duvidas/Componentes/CardDuvida.js b/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
index 65a518d..e471c64 100644
--- a/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
@@ -9,6 +9,8 @@ function CardDuvida(props){
     const duvida = props.duvida
     const navegacao = props.navegacao
 
+    console.log("fffffffff",duvida)
+
     return(
         <div className='caixa2' onClick={() => navegacao(duvida)}> 
             <h2> {duvida.Titulo} </h2>
diff --git a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
index b2d0cad..0d2d6a4 100644
--- a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
+++ b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
@@ -6,7 +6,7 @@ function CardUsuario({uid}){
 
     const {obterDadosPorUID} = useAuth();
 
-    const [dadosUsuario, setDadosUsuario] = useState("")
+    const [dadosUsuario, setDadosUsuario] = useState({tipo: ""})
 
     useEffect(()=>{
         const obterDados = async () => {
diff --git a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
index cd38f08..8e560ef 100644
--- a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
@@ -12,26 +12,33 @@ import { TextField } from '@mui/material';
 import PublicarTexto from './PublicarTexto';
 import {useAuth} from '../../../context/AuthContext';
 
-function PaginaDaDuvida(props){
-    const {state} = useLocation();
+function PaginaDaDuvida(){
+    const {state} = useLocation(); //uid da dúvida
     const uid = useAuth().usuario.uid;
     const [todasRespostas, setTodasRespostas] = useState([])
     const {publicarResposta} = useAuth();
     const {obterRespostas} = useAuth();
+    console.log(obterRespostas)
+
 
     useEffect(() => {
+        console.log("AQUIIIIIIIIIIIIIIIIIIIII")
         const respostas = async () => {
-			let todasRespostasTemp = await obterRespostas(state);
+            console.log('YYYYYYYYYY',state)
+			const todasRespostasTemp = await obterRespostas(state);
             setTodasRespostas(todasRespostasTemp);
+            console.log(todasRespostasTemp, "WWWWWWWWWWWWWW")
         }
         return respostas;
-    }, [state]);
+    });
 
     let nav = useNavigate();
 	const voltarParaDuvidas = (duvida) => {
 		nav('/duvidas');
 	}
 
+    console.log(todasRespostas, "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ")
+
 
     
     return(
@@ -49,7 +56,8 @@ function PaginaDaDuvida(props){
                 </div>
 
                 <div className="respostas">
-                    {todasRespostas.map((resposta) => {
+                    {todasRespostas?.map((resposta) => {
+                        console.log("eeeeeeeeeeeeeeeeeeeeeeee",resposta)
                         return (
                             <div className="resposta">
                                 <div className="resposta-msg">
diff --git a/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js b/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js
index 0b0b177..9451c24 100644
--- a/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js
+++ b/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js
@@ -5,11 +5,13 @@ import ThumbUpIcon from '@mui/icons-material/ThumbUp';
 import ThumbDownAltIcon from '@mui/icons-material/ThumbDownAlt';
 import "../Duvidas.css";
 import { useState } from 'react';
+import { useAuth } from '../../../context/AuthContext.js';
 
 function PublicarTexto(props){
     const [titulo, setTitulo] = useState("")
 	const [duvida, setDuvida] = useState("")
-    const funcao = props.funcao
+    const {publicarPergunta} = useAuth();
+    const uid = useAuth().usuario.uid;
 
     return(
         <div> 
@@ -17,7 +19,7 @@ function PublicarTexto(props){
             <hr/>
             <textarea placeholder="Escreva aqui sua dúvida..."  onChange={e => setDuvida(e.target.value)} />
             <div className="enviar-duvida-button">
-                <Button variant="contained" onClick={() => funcao(titulo, duvida)}>Enviar</Button>
+                <Button variant="contained" onClick={() => publicarPergunta(titulo, duvida, uid)}>Enviar</Button>
             </div>
         </div>
     )
diff --git a/front-end/src/pages/Duvidas/Duvidas.js b/front-end/src/pages/Duvidas/Duvidas.js
index 5c19a87..d1a3b74 100644
--- a/front-end/src/pages/Duvidas/Duvidas.js
+++ b/front-end/src/pages/Duvidas/Duvidas.js
@@ -13,12 +13,6 @@ import PublicarTexto from "./Componentes/PublicarTexto";
 import { useAuth } from '../../context/AuthContext.js';
 
 function Duvidas({listaDeDuvidas}) {
-	
-	const publicarPergunta = useAuth();
-	const uid = useAuth().usuario.uid;
-
-	const [titulo, setTitulo] = useState("")
-	const [duvida, setDuvida] = useState("")
 
   	let nav = useNavigate();
 	const irPaginaDuvida = (duvida) => {
@@ -31,7 +25,7 @@ function Duvidas({listaDeDuvidas}) {
 				<h1> Dúvidas </h1>
 				<div className="duvidas">
 					{listaDeDuvidas.map((duvida, key) => {
-						console.log(converterSegundosEmData(duvida.Data.seconds))
+						console.log(duvida.Criador)
 						return (
 							<div key={key} className="caixa" onClick={() => irPaginaDuvida(duvida.id)}> 
 								<h2> {duvida.Titulo} </h2>
@@ -54,13 +48,11 @@ function Duvidas({listaDeDuvidas}) {
 						)
 					})}
 				</div>
-				<p>je</p>
-				<button onClick={(e)=>{publicarPergunta(titulo, duvida, uid)}} >Publicar Dúvida</button>
 			</div>
 
 			<div className="enviar-duvida">
                 <h3>Enviar uma dúvida</h3>
-				<PublicarTexto funcao={publicarPergunta} />
+				<PublicarTexto/>
             </div>
 		</div>
 	);
-- 
GitLab


From cd93dd404263884712ec6e86d76f369bc715d6c8 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 20:56:45 -0300
Subject: [PATCH 18/19] =?UTF-8?q?Corrigido=20bugs=20com=20as=20p=C3=A1gina?=
 =?UTF-8?q?s=20de=20Duvida?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 front-end/src/context/AuthContext.js          | 12 ++++++----
 .../pages/Duvidas/Componentes/CardDuvida.js   |  2 +-
 .../pages/Duvidas/Componentes/CardUsuario.js  |  4 ++++
 .../Duvidas/Componentes/PaginaDaDuvida.js     |  6 ++---
 .../Duvidas/Componentes/PublicarTexto.js      | 12 +++++++++-
 front-end/src/pages/Duvidas/Duvidas.js        | 24 ++++---------------
 6 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index a70ea6f..f90cb01 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -46,7 +46,7 @@ export function useAuth() {
         Data: new Date(),
         Mensagem: mensagem,
         Titulo: titulo,
-        criador: uid,
+        Criador: uid,
       }).then((novoDocumento) => {
         db.collection("forum").doc(novoDocumento.id).update({
           id: novoDocumento.id
@@ -81,18 +81,20 @@ export function useAuth() {
         return dadosUsuarioExterno
     }
 
-    async function publicarResposta(mensagem, uid_pergunta, uid_user_logado){
-      await db.collection("forum").doc(uid_pergunta).collection("respostas").add({
+    
+    async function publicarResposta(mensagem, id_pergunta, uid_logado){
+      await db.collection("forum").doc(id_pergunta).collection("respostas").add({
         Data: new Date(),
         Mensagem: mensagem,
               Likes: 0,
-        Criador: uid_user_logado
+        Criador: uid_logado
       }).then((novoDocumento) => {
-        db.collection("forum").doc(uid_pergunta).collection("respostas").doc(novoDocumento.id).update({
+        db.collection("forum").doc(id_pergunta).collection("respostas").doc(novoDocumento.id).update({
           id: novoDocumento.id
         })
       })
     }
+  
 
     async function obterRespostas(uid_pergunta){
 			let respostas = await db.collection("forum").doc(uid_pergunta).collection("respostas").get().then((querySnapshot) => {
diff --git a/front-end/src/pages/Duvidas/Componentes/CardDuvida.js b/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
index e471c64..12c0574 100644
--- a/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
@@ -9,7 +9,7 @@ function CardDuvida(props){
     const duvida = props.duvida
     const navegacao = props.navegacao
 
-    console.log("fffffffff",duvida)
+    console.log(duvida, "adúvida")
 
     return(
         <div className='caixa2' onClick={() => navegacao(duvida)}> 
diff --git a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
index 0d2d6a4..f55a912 100644
--- a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
+++ b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
@@ -16,6 +16,10 @@ function CardUsuario({uid}){
         return obterDados;
     }, [uid])
 
+    console.log(uid)
+
+    console.log("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", dadosUsuario)
+
     return(
         <div className={dadosUsuario.tipo === "Administrador" ? 'resposta-professor' : ''}>
             <p className="nome"> Enviado por <b>{dadosUsuario.nome}</b> </p>
diff --git a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
index 8e560ef..3e78380 100644
--- a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
@@ -20,12 +20,12 @@ function PaginaDaDuvida(){
     const {obterRespostas} = useAuth();
     console.log(obterRespostas)
 
-
+    console.log("!!!!!!!!!!!!!!!!!!!!!!", state)
     useEffect(() => {
         console.log("AQUIIIIIIIIIIIIIIIIIIIII")
         const respostas = async () => {
             console.log('YYYYYYYYYY',state)
-			const todasRespostasTemp = await obterRespostas(state);
+			const todasRespostasTemp = await obterRespostas(state.id);
             setTodasRespostas(todasRespostasTemp);
             console.log(todasRespostasTemp, "WWWWWWWWWWWWWW")
         }
@@ -78,7 +78,7 @@ function PaginaDaDuvida(){
 
                 <div className="enviar-msg">
                     <h3>Enviar uma resposta</h3>
-                    <PublicarTexto funcao={publicarResposta} />
+                    <PublicarTexto proposito={"resposta"} id_pergunta={state.id} />
                 </div>
             </div>
         </div>
diff --git a/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js b/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js
index 9451c24..d660e7d 100644
--- a/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js
+++ b/front-end/src/pages/Duvidas/Componentes/PublicarTexto.js
@@ -11,15 +11,25 @@ function PublicarTexto(props){
     const [titulo, setTitulo] = useState("")
 	const [duvida, setDuvida] = useState("")
     const {publicarPergunta} = useAuth();
+    const {publicarResposta} = useAuth();
     const uid = useAuth().usuario.uid;
 
+    function funcaoApropriada(){
+        if(props.proposito=="pergunta"){
+            publicarPergunta(titulo, duvida, uid)
+        }
+        else if(props.proposito=="resposta"){
+            publicarResposta(duvida, props.id_pergunta, uid)
+        }
+    }
+
     return(
         <div> 
             <TextField name="Titulo" placeholder="Titulo" onChange={e => setTitulo(e.target.value)}/>
             <hr/>
             <textarea placeholder="Escreva aqui sua dúvida..."  onChange={e => setDuvida(e.target.value)} />
             <div className="enviar-duvida-button">
-                <Button variant="contained" onClick={() => publicarPergunta(titulo, duvida, uid)}>Enviar</Button>
+                <Button variant="contained" onClick={() => funcaoApropriada()}>Enviar</Button>
             </div>
         </div>
     )
diff --git a/front-end/src/pages/Duvidas/Duvidas.js b/front-end/src/pages/Duvidas/Duvidas.js
index d1a3b74..a4ba8a7 100644
--- a/front-end/src/pages/Duvidas/Duvidas.js
+++ b/front-end/src/pages/Duvidas/Duvidas.js
@@ -24,26 +24,10 @@ function Duvidas({listaDeDuvidas}) {
 			<div className="page-duvidas">
 				<h1> Dúvidas </h1>
 				<div className="duvidas">
-					{listaDeDuvidas.map((duvida, key) => {
-						console.log(duvida.Criador)
+					{listaDeDuvidas.map((duvida) => {
 						return (
-							<div key={key} className="caixa" onClick={() => irPaginaDuvida(duvida.id)}> 
-								<h2> {duvida.Titulo} </h2>
-								<div className="foto">
-									<CardUsuario uid={duvida.Criador} />
-								</div>
-								<p className="data">Em {converterSegundosEmData(duvida.Data.seconds)}</p>
-								<div className="like">
-									<IconButton aria-label="delete">
-										<ThumbUpIcon color="success" fontSize="large" />
-									</IconButton>
-								</div>
-
-								<div className="dislike">
-									<IconButton aria-label="delete">
-										<ThumbDownAltIcon sx={{ color: 'red' }} fontSize="large" />
-									</IconButton>
-								</div>
+							<div className="caixa">
+								<CardDuvida duvida={duvida} navegacao={irPaginaDuvida} />
 							</div>
 						)
 					})}
@@ -52,7 +36,7 @@ function Duvidas({listaDeDuvidas}) {
 
 			<div className="enviar-duvida">
                 <h3>Enviar uma dúvida</h3>
-				<PublicarTexto/>
+				<PublicarTexto proposito={"pergunta"}/>
             </div>
 		</div>
 	);
-- 
GitLab


From 2e2ca6ebb119d03c58d37578a3d60cca90d69e49 Mon Sep 17 00:00:00 2001
From: j173931 <j173931@dac.unicamp.br>
Date: Mon, 5 Dec 2022 21:32:45 -0300
Subject: [PATCH 19/19] excluindo consoles

---
 front-end/src/componentes/Menu/MenuAdmin.js   |  1 -
 front-end/src/context/AuthContext.js          | 21 +++++++++++++------
 .../Curso/Componentes/GerarCertificado.js     |  2 --
 front-end/src/pages/Curso/Curso.js            |  2 --
 front-end/src/pages/Curso/ObterDados.js       |  2 --
 .../pages/Duvidas/Componentes/CardDuvida.js   |  2 --
 .../pages/Duvidas/Componentes/CardUsuario.js  |  4 ----
 .../Duvidas/Componentes/PaginaDaDuvida.js     |  9 --------
 front-end/src/pages/Login/Login.js            |  1 +
 front-end/src/pages/Perfil/Perfil.test.js     |  2 --
 front-end/src/pages/Perfil/PerfilUtils.js     |  1 -
 front-end/src/util/obterDadosPorUID.js        |  1 -
 12 files changed, 16 insertions(+), 32 deletions(-)

diff --git a/front-end/src/componentes/Menu/MenuAdmin.js b/front-end/src/componentes/Menu/MenuAdmin.js
index 4f79c68..d819677 100644
--- a/front-end/src/componentes/Menu/MenuAdmin.js
+++ b/front-end/src/componentes/Menu/MenuAdmin.js
@@ -10,7 +10,6 @@ import {useState, useEffect} from 'react';
 function MenuAdmin () {
     const { logout } = useAuth();
     async function sair() {
-        console.log("SAIR")
         logout()
     }
     const [foto, setFoto] = useState(null);
diff --git a/front-end/src/context/AuthContext.js b/front-end/src/context/AuthContext.js
index f90cb01..3abc084 100644
--- a/front-end/src/context/AuthContext.js
+++ b/front-end/src/context/AuthContext.js
@@ -41,6 +41,11 @@ export function useAuth() {
       return signOut(auth);
     }
 
+    function login(email, senha) {
+      return signInWithEmailAndPassword(auth, email, senha).then((e) => console.log(e)).catch((a) => console.log(a));
+    }
+
+
     async function publicarPergunta(titulo, mensagem, uid) {
       await db.collection("forum").add({
         Data: new Date(),
@@ -107,19 +112,21 @@ export function useAuth() {
 				});
 				return document;
 			})
-      console.log("ggggggggggggggggggggggg",respostas)
       return respostas;
     }
   
     useEffect(() => {
       const unsubscribe = auth.onAuthStateChanged((user) => {
+        console.log(user)
         setUsuario(user);
-        db.collection('usuarios').doc(user.uid).onSnapshot((doc)=>{
-          setDadosUsuario(doc.data())
+        if(user!=null){
+          db.collection('usuarios').doc(user.uid).onSnapshot((doc)=>{
+            setDadosUsuario(doc.data())
+          })
+          db.collection("forum").onSnapshot((docs)=>{
+            setQueryDuvidas(docs)
         })
-        db.collection("forum").onSnapshot((docs)=>{
-          setQueryDuvidas(docs)
-      })
+        }
         setLoading(false);
       });
   
@@ -139,7 +146,9 @@ export function useAuth() {
       obterDadosPorUID,
       publicarResposta,
       obterRespostas,
+      login,
     };
+
   
     return (
       <AuthContext.Provider value={value}>
diff --git a/front-end/src/pages/Curso/Componentes/GerarCertificado.js b/front-end/src/pages/Curso/Componentes/GerarCertificado.js
index e81a916..d2bb781 100644
--- a/front-end/src/pages/Curso/Componentes/GerarCertificado.js
+++ b/front-end/src/pages/Curso/Componentes/GerarCertificado.js
@@ -31,8 +31,6 @@ function GerarCertificado({numeroModulosCompletos, naoCompleto}) {
 	}
 
 	async function chamarApi(headers, config){
-		console.log(headers)
-		console.log(config)
 		await axios.post(urlApi, config, {
 			headers: headers
 		}).then((response) => {
diff --git a/front-end/src/pages/Curso/Curso.js b/front-end/src/pages/Curso/Curso.js
index 61d0903..e044fdb 100644
--- a/front-end/src/pages/Curso/Curso.js
+++ b/front-end/src/pages/Curso/Curso.js
@@ -33,8 +33,6 @@ function Curso() {
         })
     },[uid])
 
-	console.log(modulos)
-
 	return (
 		<div className="App">
 			<div className="page">
diff --git a/front-end/src/pages/Curso/ObterDados.js b/front-end/src/pages/Curso/ObterDados.js
index 79d86b9..88b4b41 100644
--- a/front-end/src/pages/Curso/ObterDados.js
+++ b/front-end/src/pages/Curso/ObterDados.js
@@ -10,8 +10,6 @@ const location = useLocation()
 const { numero, concluido } = location.state
 const dataAtual = new Date().getTime() / 1000;
 
-console.log("Função chamada")
-
 const [aulas, setAulas] = useState([])
 const uid = auth.currentUser.uid;
 
diff --git a/front-end/src/pages/Duvidas/Componentes/CardDuvida.js b/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
index 12c0574..65a518d 100644
--- a/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/CardDuvida.js
@@ -9,8 +9,6 @@ function CardDuvida(props){
     const duvida = props.duvida
     const navegacao = props.navegacao
 
-    console.log(duvida, "adúvida")
-
     return(
         <div className='caixa2' onClick={() => navegacao(duvida)}> 
             <h2> {duvida.Titulo} </h2>
diff --git a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
index f55a912..0d2d6a4 100644
--- a/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
+++ b/front-end/src/pages/Duvidas/Componentes/CardUsuario.js
@@ -16,10 +16,6 @@ function CardUsuario({uid}){
         return obterDados;
     }, [uid])
 
-    console.log(uid)
-
-    console.log("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", dadosUsuario)
-
     return(
         <div className={dadosUsuario.tipo === "Administrador" ? 'resposta-professor' : ''}>
             <p className="nome"> Enviado por <b>{dadosUsuario.nome}</b> </p>
diff --git a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
index 3e78380..2156e04 100644
--- a/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
+++ b/front-end/src/pages/Duvidas/Componentes/PaginaDaDuvida.js
@@ -18,16 +18,11 @@ function PaginaDaDuvida(){
     const [todasRespostas, setTodasRespostas] = useState([])
     const {publicarResposta} = useAuth();
     const {obterRespostas} = useAuth();
-    console.log(obterRespostas)
 
-    console.log("!!!!!!!!!!!!!!!!!!!!!!", state)
     useEffect(() => {
-        console.log("AQUIIIIIIIIIIIIIIIIIIIII")
         const respostas = async () => {
-            console.log('YYYYYYYYYY',state)
 			const todasRespostasTemp = await obterRespostas(state.id);
             setTodasRespostas(todasRespostasTemp);
-            console.log(todasRespostasTemp, "WWWWWWWWWWWWWW")
         }
         return respostas;
     });
@@ -37,9 +32,6 @@ function PaginaDaDuvida(){
 		nav('/duvidas');
 	}
 
-    console.log(todasRespostas, "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ")
-
-
     
     return(
         <div className="App">
@@ -57,7 +49,6 @@ function PaginaDaDuvida(){
 
                 <div className="respostas">
                     {todasRespostas?.map((resposta) => {
-                        console.log("eeeeeeeeeeeeeeeeeeeeeeee",resposta)
                         return (
                             <div className="resposta">
                                 <div className="resposta-msg">
diff --git a/front-end/src/pages/Login/Login.js b/front-end/src/pages/Login/Login.js
index 4ad12b2..e159844 100644
--- a/front-end/src/pages/Login/Login.js
+++ b/front-end/src/pages/Login/Login.js
@@ -93,6 +93,7 @@ function Login() {
 
 										<div className="button">
 												<Button 
+												onClick={(e)=>realizarLogin(e)}
 												variant="contained"
 												type="submit"
 												disabled={loading}
diff --git a/front-end/src/pages/Perfil/Perfil.test.js b/front-end/src/pages/Perfil/Perfil.test.js
index 7c29446..aebf6e9 100644
--- a/front-end/src/pages/Perfil/Perfil.test.js
+++ b/front-end/src/pages/Perfil/Perfil.test.js
@@ -35,9 +35,7 @@ it('testar validação do cep', () => {
 
     const wrapper = renderer.create(<Perfil dadosUsuario={dados} />);
     const inst = wrapper.root;
-    console.log(wrapper.root.consultarCep);
     expect(inst.consultarCep('12060590')===endereco_esperado).toBe(true);
-    console.log(inst);
     /*const testRenderer = TestRenderer.create(<Perfil dadosUsuario={dados} />);
     const testInstance = testRenderer.root;
     expect(testInstance.consultarCep('12060590')===endereco_esperado).toBe(true);*/
diff --git a/front-end/src/pages/Perfil/PerfilUtils.js b/front-end/src/pages/Perfil/PerfilUtils.js
index 6859754..453ca52 100644
--- a/front-end/src/pages/Perfil/PerfilUtils.js
+++ b/front-end/src/pages/Perfil/PerfilUtils.js
@@ -10,7 +10,6 @@ async function consultarCEP() {
   fetch(`https://viacep.com.br/ws/${cepFinal}/json/`)
     .then((res) => res.json())
     .then((data) => {
-      console.log("CEP", data);
       setDadosUsuarios({...dadosUsuario, rua: data.logradouro})
       setDadosUsuarios({...dadosUsuario, bairro: data.bairro})
       setDadosUsuarios({...dadosUsuario, cidade: data.cidade})
diff --git a/front-end/src/util/obterDadosPorUID.js b/front-end/src/util/obterDadosPorUID.js
index 53ded65..ddc14b4 100644
--- a/front-end/src/util/obterDadosPorUID.js
+++ b/front-end/src/util/obterDadosPorUID.js
@@ -1,7 +1,6 @@
 import { db } from "../services/firebase";
 
 export async function obterDadosPorUID(uid){
-    console.log(uid)
     const dadosUsuario = await db.collection("usuarios").doc(uid).get().then((doc)=>{
         return doc.data();
     })
-- 
GitLab