---
# System prepended metadata

title: SESSION MONKCHAT

---

# 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;
  }
  
}
```