---
# System prepended metadata

title: ENTREGA MONKCHAT

---

# ENTREGA MONKCHAT

## API (INDEX.JS)

```javascript=
import db from './db.js';
import express from 'express'
import cors from 'cors'
const app = express();
app.use(cors());
app.use(express.json());

//inicio das apis, API DE CHAT

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;

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

//API DE SALA

app.post('/sala', async (req, resp) => {
    try {
        let sala = req.body;

        let salaRecord = {
            nm_sala: sala.sala.nome,
            bt_ativo: sala.ativo.ativo 
        }

        let r = await db.tb_sala.create(salaRecord);
        resp.send(r);

    } catch (e) {
        resp.send('Deu erro sala');
        console.log(e.toString());
    }
})

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

//API DE USUARIO

app.post('/usuario', async (req, resp) => {
    try {
        let usu = req.body;

        let usuRecord = {
            nm_usuario: usu.nm_usuario
        }

        let r = await db.tb_usuario.create(usuRecord);
        resp.send(r);

    } catch (e) {
        resp.send('Deu erro usu');
        console.log(e.toString());
    }
})

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


//PUT AI
app.put ("/usuario", async (req, resp) => {
    try {
        let id = req.query.id;
        let nome = req.body.nome;

        let q = await db.tb_usuario.update ({ nm_usuario: nome}, {where: {id_usuario: id }})
        resp.sendStatus (200);} catch (e){
        resp.send("deu erro no put")
            console.log(e.toString())
        }
})

app.put('/sala', async (req, resp) => {
    let id = req.query.id;
    let nome = req.body.nome;
    let r = await
    db.tb_sala.update({
      nm_sala: nome 
  }, {
    where: { id_sala: id}
  })
  resp.sendStatus(200);
  })

// DELETE AI

app.delete("/usuario", async ( req, resp) => {
    try {
        let id = req.query.id 
        let x = await db.tb_usuario.destroy({ where: {id_usuario: id}})
        resp.sendStatus(200);} catch (e) {
            resp.send("deu erro no delete")
            console.log(e.toString());
        }
})


//BGL Q FALA Q O SERVER SUBIU

app.listen(process.env.PORT,
    x => console.log(`Server subiu sabe aonde? Lá na ${process.env.PORT}`))


```

## SERVICES (api.js & conteudo.js)

```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 chatJSON = {
        sala: {nome: nomeSala},
        usuario: {nome: nomeUsuario},
        mensagem: mensagem
    }
    let r = await api.post('./chat', chatJSON)
    return r.data;
}

async inserirSala(nomeSala, salaAtiva){

    let salaJSON = {
        sala: {nome: nomeSala},
        ativo: {ativo: salaAtiva}
    }

    let r = await api.post('./sala', salaJSON)
    return r.data;
}


async inserirUsu (nomeUsu) {

    let usuJSON = {
       nm_usuario: nomeUsu,
    };

    let r = await api.post('/usuario', usuJSON)
    return r.data;
}}







//conteudo.js

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

import Api from '../../services/api';
import { useState } from 'react';
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(sala);
        setChat(mensagens)
    }
const enviarMensagem = async () => {
    const r = await api.inserirMensagem(sala, usu, msg);
    console.log(r);
    alert('Mensagem enviada com sucesso!');

    await atualizar();
}

const criarSala = async () => {
    const r = await api.inserirSala(sala);
    console.log(r);
    alert('Sala criada com sucesso!');
}

const criarUsu = async () => {
    const r = await api.inserirUsu(usu);
    console.log(r);
    alert('Usuário criado com sucesso!');
}


    return (
        <ContainerConteudo>
            <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 = {criarUsu}> 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>
    )
}



```



## PRINT MONKCHAT FUNCIONANDO

![](https://i.imgur.com/eeZQnXs.png)
