# Monckchat ## API ### indexjs ```jsx= 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 mensagens = await db.tb_chat.findAll({ where: { id_sala: req.params.salaId }, include: ['tb_usuario', 'tb_sala'], order:[['id_chat', 'DESC']] }); resp.send(mensagens); } catch (e) { resp.send(e.toString()) } }) app.post('/chat', async (req, resp) => { 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); }); app.listen(process.env.PORT, x => console.log(`Server up at port ${process.env.PORT}`)) ``` ### dbjs ```jsx= import initdb from './models/init-models.js' import Sequelize from 'sequelize'; const sequelize = new Sequelize( '5MnijCqZkf', '5MnijCqZkf', 'cXNvMIr556', { host: 'remotemysql.com', dialect: 'mysql', logging: false }); const db = initdb(sequelize); export default db; ``` ### initmodelsjs ```jsx= import _sequelize from "sequelize"; const DataTypes = _sequelize.DataTypes; import _tb_chat from "./tb_chat.js"; import _tb_sala from "./tb_sala.js"; import _tb_usuario from "./tb_usuario.js"; export default function initModels(sequelize) { var tb_chat = _tb_chat.init(sequelize, DataTypes); var tb_sala = _tb_sala.init(sequelize, DataTypes); var tb_usuario = _tb_usuario.init(sequelize, DataTypes); tb_chat.belongsTo(tb_sala, { foreignKey: "id_sala"}); tb_sala.hasMany(tb_chat, { as: "tb_chats", foreignKey: "id_sala"}); tb_chat.belongsTo(tb_usuario, { foreignKey: "id_usuario"}); tb_usuario.hasMany(tb_chat, { as: "tb_chats", foreignKey: "id_usuario"}); return { tb_chat, tb_sala, tb_usuario, }; } ``` ### tb_chat ```jsx= import _sequelize from 'sequelize'; const { Model, Sequelize } = _sequelize; export default class tb_chat extends Model { static init(sequelize, DataTypes) { super.init({ id_chat: { autoIncrement: true, type: DataTypes.INTEGER, allowNull: false, primaryKey: true }, id_sala: { type: DataTypes.INTEGER, allowNull: true, references: { model: 'tb_sala', key: 'id_sala' } }, id_usuario: { type: DataTypes.INTEGER, allowNull: true, references: { model: 'tb_usuario', key: 'id_usuario' } }, ds_mensagem: { type: DataTypes.STRING(100), allowNull: true }, dt_mensagem: { type: DataTypes.DATE, allowNull: true } }, { sequelize, tableName: 'tb_chat', timestamps: false, indexes: [ { name: "PRIMARY", unique: true, using: "BTREE", fields: [ { name: "id_chat" }, ] }, { name: "id_sala", using: "BTREE", fields: [ { name: "id_sala" }, ] }, { name: "id_usuario", using: "BTREE", fields: [ { name: "id_usuario" }, ] }, ] }); return tb_chat; } } ``` ### tb_sala ```jsx= import _sequelize from 'sequelize'; const { Model, Sequelize } = _sequelize; export default class tb_sala extends Model { static init(sequelize, DataTypes) { super.init({ id_sala: { autoIncrement: true, type: DataTypes.INTEGER, allowNull: false, primaryKey: true }, nm_sala: { type: DataTypes.STRING(100), allowNull: true }, bt_ativa: { type: DataTypes.BOOLEAN, allowNull: true } }, { sequelize, tableName: 'tb_sala', timestamps: false, indexes: [ { name: "PRIMARY", unique: true, using: "BTREE", fields: [ { name: "id_sala" }, ] }, ] }); return tb_sala; } } ``` ### tb_usuario ```jsx= import _sequelize from 'sequelize'; const { Model, Sequelize } = _sequelize; export default class tb_usuario extends Model { static init(sequelize, DataTypes) { super.init({ id_usuario: { autoIncrement: true, type: DataTypes.INTEGER, allowNull: false, primaryKey: true }, nm_usuario: { type: DataTypes.STRING(100), allowNull: true } }, { sequelize, tableName: 'tb_usuario', timestamps: false, indexes: [ { name: "PRIMARY", unique: true, using: "BTREE", fields: [ { name: "id_usuario" }, ] }, ] }); return tb_usuario; } } ``` ## REACT pages/monkchat ### conteudo.js ```jsx= import { ContainerConteudo } from './conteudo.styled' import { ChatButton, ChatInput, ChatTextArea } from '../../components/outros/inputs' import { useState } from 'react'; 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); setChat(mensagens) } const enviarMensagem = async () => { const r = await api.inserirMensagem(sala, usu, msg); console.log(r); alert('Mensagem enviada com sucesso!') atualizar() } 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> 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> ) } ``` ## api.js ```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; } } ```
{"metaMigratedAt":"2023-06-16T08:10:02.071Z","metaMigratedFrom":"Content","title":"Monckchat","breaks":true,"contributors":"[{\"id\":\"448c0a9b-0e0c-4db2-9b52-259081794528\",\"add\":8368,\"del\":15}]"}
Expand menu