---
# System prepended metadata

title: MONKCHAT

---

# MONKCHAT

Cauê Freitas Barreto INFOB 05
[toc]
# CODIGO 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;

        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('Deu erro');
        console.log(e.toString());
    }
});


app.get('/chat/:salaId', async (req, resp) => {
    try {
        let mensagens = await
            db.tb_chat.findAll({
                where: {
                    id_sala: req.params.salaId
                },
                order: [['id_chat', 'desc']],
                include: ['tb_usuario', 'tb_sala'],
            });
    
        resp.send(mensagens);
    } catch (e) {
        resp.send(e.toString())
    }
})

app.get('/usuario', async (req, resp) => {
    try {
        let usuario = await
        db.tb_usuario.findAll()
        resp.send(usuario);
  } catch (e) {
      resp.send(e.toString())
  }
})

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.put('/usuario', async (req, resp) => {
    let id = req.query.id;
    let nome = req.body.nome;
    let r = await
        db.tb_usuario.update({
            nm_usuario: nome
        }, {
            where: { id_usuario: id }
        }
        )
        resp.sendStatus(200);
})

app.post('/usuario', async (req, resp) => {
    try{
    let add = req.body;
    let x = { 
        nm_usuario: add.nm_usuario
    }
    let y = await db.tb_usuario.create(x)
    resp.send(y)
} catch (e) {
    resp.send(e.toString())
}
})

app.listen(process.env.PORT,
           x => console.log(`>> Server up at port ${process.env.PORT}`))
```

# CÓDIGO REACT TELA
```javascript=

import { ContainerConteudo } from './conteudo.styled'
import { ChatButton, ChatInput, ChatTextArea } from '../../components/outros/inputs'

import { useState } from 'react';
import { ToastContainer, toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
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 atualizar = async () => {
        const mensagens = await api.listarMensagens(1);
        console.log(mensagens);
        setChat(mensagens)
    }

    const enviarMensagem = async () => {
        const r = await api.inserirMensagem(sala, usu, msg);
        console.log(r);
        toast('Mensagem enviada com sucesso!');

        await atualizar();
    }
    
    return (
        <ContainerConteudo>
            <ToastContainer/>
            <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> Criar </ChatButton>
                        <ChatButton> 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>
    )
}
```

# CÓDIGO REACT SERVICE
```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;
    }
}
```