# SESSION MONKCHAT
**NOME** KEVIN RIBEIRO DE ANDRADE
**NUMERO** 27
**TURMA** INFOA
## CDG API
```javascript=
//npx sequelize-auto -h remotemysql.com -d 5MnijCqZkf -u 5MnijCqZkf -x cXNvMIr556 -e mysql -o models -l esm
import db from "./db.js";
import Express from "express";
import Cors from "cors";
const app = Express();
app.use(Cors());
app.use(Express.json());
app.get("/chat/:salaId", async (req, resp) => {
try {
let consulta = await db.tb_sala.findOne({
where: { nm_sala: req.params.salaId },
});
let mensagens = await db.tb_chat.findAll({
where: {
id_sala: consulta.id_sala,
},
include: ["tb_usuario", "tb_sala"],
});
resp.send(mensagens);
} catch (e) {
resp.send(e.toString());
}
});
app.post("/chat", async (req, resp) => {
try {
let chat = req.body;
if (chat.mensagem == '')
return resp.send({erro: "PRESTA ATENÇÃO NOS BGLH, MENSAGEM NÃO PODE SER VAZIA"})
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 },
});
if (sala == null)
return resp.send({erro: "man, tá loucão? entrando aonde fdpkkkkkkkkk"});
let chatRecord = {
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(chatRecord);
resp.send(r);
} catch (e) {
resp.send("Deu erro1");
console.log(e.toString());
}
});
//----------------Sala
app.get("/sala", async (req, resp) => {
try {
let criarSala = await db.tb_sala.findAll();
resp.send(criarSala);
} catch (error) {
resp.send("ERRADO !");
console.log(error.toString());
}
});
//------------------Sala
app.post("/sala", async (req, resp) => {
try {
let sala = req.body;
let criarSala = {
nm_sala: sala.nm_sala,
bt_ativo: true,
};
let resposta = await db.tb_sala.create(criarSala);
resp.send(resposta);
} catch (error) {
resp.send("ERRADO2 !");
console.log(error.toString());
}
});
//tb_usuario
app.post('/usuario', async (req, resp) => {
try {
let q = req.body;
if(q.nm_usuario == null)
return resp.send({erro: "lelé doido"});
let usu = {
nm_usuario: q.nm_usuario,
};
let final = await db.tb_usuario.create(usu);
resp.send(final);
} catch (error) {
resp.send("oxi tio tá erradp");
console.log(error.toString());
}
});
app.get('/usuario', async (req, resp) => {
try {
let ob = await db.tb_usuario.findAll();
resp.send(ob);
} catch (error) {
resp.send("ó deu erro no get ai amigão");
console.log(error.toString());
}
});
// put sala
app.put('/sala', async (req, resp) => {
try {
let id = req.query.id;
let nome = req.body.nome;
let r = await
db.tb_sala.update({
nm_sala: nome
},
{
where: {id_sala: id}
})
} catch (error) {
resp.send("Qual foi? faz direito o bglh ai");
console.log(error.toString());
}
});
// delete sala
app.delete('/sala', async (req, resp) => {
try {
let id = req.query.id;
let r = await db.tb_sala.destroy({ where: {id_sala: id} })
} catch (e) {
resp.send("o kevin errou aqui");
console.log(e.toString());
}
})
// put usu
app.put('/usuario', async (req, resp) => {
try {
let id = req.query.id;
let nome = req.body.nome;
let r = await
db.tb_usuario.update({
nm_usuario: nome
},
{
where: {
id_usuario: id
}
})}
catch(e){
resp.send("bolololo");
console.log(e.toString())
}
});
// delete usu
app.delete('/usuario', async (req, resp) => {
let id = req.query.id;
let r = await db.tb_usuario.destroy({ where: {id_usuario: id} })
resp.sendStatus(200);
});
app.listen(process.env.PORT, (x) =>
console.log(`server up at port ${process.env.PORT}`)
);
```
## CDG REACT
```jsx=
import { ContainerConteudo } from './conteudo.styled'
import { ChatButton, ChatInput, ChatTextArea } from '../../components/outros/inputs'
import Api from '../../services/api';
import { useState, useRef } from 'react';
import LoadingBar from 'react-top-loading-bar';
import { ToastContainer, toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
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 ref = useRef(null);
const atualizar = async () => {
ref.current.continuousStart();
const mensagens = await api.ListarMensagens(sala);
setChat(mensagens);
ref.current.complete();
}
const enviarMensagem = async () => {
const r = await api.inserirMensagem(sala, usu, msg);
console.log(r);
if (!r.erro)
toast.dark('foi');
else
toast.error(`vish ${r.erro}`);
await atualizar();
}
const criarSala = async () => {
const q = await api.criarSala(sala)
alert('Sala Criada');
console.log(q);
}
const criarUsuario = async () => {
const qq = await api.criarUsuario(usu);
if (!qq.erro)
toast.dark('foi');
else
toast.error(`vish ${qq.erro}`);
console.log(qq);
}
return (
<ContainerConteudo>
<ToastContainer />
<LoadingBar color='#f11946' ref={ref} />
<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> <b> fala para todos</b></div>
<div> {x.ds_mensagem} </div>
</div>
</div>
)}
</div>
</div>
</ContainerConteudo>
)
}
```
## CDG SERVICE
```jsx=
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 chatJSON = {
sala: { nome: nomeSala },
usuario: { nome: nomeUsuario },
mensagem: mensagem,
};
let r = await api.post("/chat", chatJSON);
return r.data;
}
//-----------------------------------------------------------------------
async criarSala(nmSala) {
let criar = {
nm_sala: nmSala,
bt_ativo: true
};
let r = await api.post("/sala", criar);
return r.data;
}
async criarUsuario(nmUsuario){
let qq = {
nm_usuario: nmUsuario,
};
let final = await api.post('/usuario', qq)
return final.data;
}
}
```