# Session:MonkChat **Nome:** Patricia Oliveira Paulino **Número:** 37 **Informatica:** INFO D ### INDEX DA API ```javascript= import db from './db.js'; import express from 'express' import cors from 'cors' const app = express(); app.use(cors()); app.use(express.json()); app.post('/chat', async (req, resp) => { try { let chat = req.body; if (!chat.mensagem || chat.mensagem == ''){ return resp.send({erro: 'O campo mensagem é obrigatório'}) } let sala = await db.tb_sala.findOne({ where: { nm_sala: chat.sala.nome } }); let usu = await db.tb_usuario.findOne({ where: { nm_usuario: chat.usuario.nome } }) let mensagem = { id_sala: sala.id_sala, id_usuario: usu.id_usuario, ds_mensagem: chat.mensagem, dt_mensagem: new Date() } let r = await db.tb_chat.create(mensagem); resp.send(r); } catch (e) { resp.send({erro: 'Deu erro na mensagem'}); console.log(e.toString()); } }); app.get('/chat/:salaId', async (req, resp) => { try { let consult = await db.tb_sala.findOne({ where: {nm_sala:req.params.salaId} }) let mensagens = await db.tb_chat.findAll({ where: { id_sala: consult.id_sala, }, order: [['id_chat', 'desc']], include: ['tb_usuario', 'tb_sala'], }); resp.send(mensagens); } catch (e) { resp.send({erros: "Deu erro na sala"}); resp.send(e.toString()) } }) app.get ('/usuario', async (req,resp) => { let usuarios = await db.tb_usuario.findAll(); resp.send(usuarios); }) app.post('/usuario', async (req , resp) =>{ let usuario = req.body; let usuarioInserir = { nm_usuario: usuario.nome } let e = await db.tb_usuario.create(usuarioInserir); resp.send(e); }) app.get ('/sala', async (req,resp) => { let salas = await db.tb_sala.findAll(); resp.send(salas); }) app.post('/sala', async (req,resp) =>{ try{ let sala = req.body; let criarSala = { nm_sala: sala.nome, bt_ativo: true }; let resposta = await db.tb_sala.create(criarSala); resp.send(resposta); } catch (e){ console.log(e.toString()); } }) app.delete('/usuario' , async (req,resp) => { let id = req.query.id; let exclu = await db.tb_usuario.destroy({where: {id_usuario:id}}) resp.sendStatus(200); }) app.put('/usuario', async (req,resp)=>{ let id =req.query.id; let nome = req.query.nome; let r = await db.tb_usuario.update ({nm_usuario:nome}, {where: {id_usuario: id} } ) resp.sendStatus(200); }) app.delete('/sala' , async (req,resp) => { let id = req.query.id; let exclusa = await db.tb_sala.destroy({where: {id_sala:id}}) resp.sendStatus(200); }) app.put('/sala', async (req,resp)=>{ let id = req.query.id; let nome = req.body.nome; let bt = req.body.bt; let r = await db.tb_sala.update ({nm_sala:nome}, {where: {id_sala:id} } ) resp.sendStatus(200); }) app.listen(process.env.PORT, x => console.log(`>> Server up at port ${process.env.PORT}`)) ``` ### SERVICES/API ```javascript= import axios from 'axios' const api = axios.create({ baseURL: 'http://localhost:3030' }) export default class Api { async listarMensagens(idSala) { let r = await api.get(`/chat/${idSala}`); return r.data; } async inserirMensagem(nomeSala, nomeUsuario, mensagem) { let chat = { sala: { nome: nomeSala }, usuario: { nome: nomeUsuario }, mensagem: mensagem } let r = await api.post(`/chat`, chat); return r.data; } async criarSala(nomeSala) { let criar = { nm_sala: nomeSala, bt_disponivel: true } let r1 = await api.post(`/sala`, criar); return r1.data; } async criarUsuario(nomeUsuario) { let criarUSU = { nm_usuario: nomeUsuario } let r2 = await api.post(`/usuario`, criarUSU); return r2.data; } } ; ``` ### PAGES/CONTEUDO ```javascript= import { ContainerConteudo } from './conteudo.styled' import { ChatButton, ChatInput, ChatTextArea } from '../../components/outros/inputs' import { ToastContainer, toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { useState} from 'react'; import React, {useRef} from 'react' import LoadingBar from 'react-top-loading-bar' import Api from '../../service/api'; const api = new Api(); export default function Conteudo() { const [chat, setChat] = useState([]); const [sala, setSala] = useState(''); const [usu, setUsu] = useState(''); const [msg, setMsg] = useState('') const loading = useRef (null); const atualizar = async () => { loading.current.continuousStart(); const mensagens = await api.listarMensagens(sala); console.log(mensagens); setChat(mensagens) loading.current.complete(); } const enviarMensagem = async () => { const r = await api.inserirMensagem(sala, usu, msg); console.log(r); if(!r.erro) toast.dark('🚀Mensagem enviada com sucesso!'); else toast.error(`❌ ${r.erro}`) await atualizar(); } const criarSala = async () =>{ const aa = await api.criarSala(sala); alert ('Sala criada com sucesso'); console.log(aa); } const criarUsuario = async () =>{ const usua = await api.criarUsuario(usu) alert('Usuario criado com sucesso') console.log(usua); } return ( <ContainerConteudo> <ToastContainer/> <LoadingBar color="Black" ref={loading} height={6} loaderSpeed={100}/> <div className="container-form"> <div className="box-sala"> <div> <div className="label">Sala</div> <ChatInput value={sala} onChange={e => setSala(e.target.value)} /> </div> <div> <div className="label">Nick</div> <ChatInput value={usu} onChange={e => setUsu(e.target.value)} /> </div> <div> <ChatButton onClick={criarSala}> Criar </ChatButton> <ChatButton onClick={criarUsuario}> Entrar </ChatButton> </div> </div> <div className="box-mensagem"> <div className="label">Mensagem</div> <ChatTextArea value={msg} onChange={e => setMsg(e.target.value)} /> <ChatButton onClick={enviarMensagem} className="btn-enviar"> Enviar </ChatButton> </div> </div> <div className="container-chat"> <img onClick={atualizar} className="chat-atualizar" src="/assets/images/atualizar.png" alt="" /> <div className="chat"> {chat.map(x => <div> <div className="chat-message"> <div>({new Date(x.dt_mensagem.replace('Z', '')).toLocaleTimeString()})</div> <div><b>{x.tb_usuario.nm_usuario}</b> fala para <b>Todos</b>:</div> <div> {x.ds_mensagem} </div> </div> </div> )} </div> </div> </ContainerConteudo> ) } ```
{"metaMigratedAt":"2023-06-16T09:18:26.736Z","metaMigratedFrom":"Content","title":"Session:MonkChat","breaks":true,"contributors":"[{\"id\":\"d757cf0b-4ece-4c2f-893c-8a075e5d4af3\",\"add\":7932,\"del\":1}]"}
Expand menu