chat messages stored in db
This commit is contained in:
parent
8ab9590594
commit
57bb9665c6
6 changed files with 80 additions and 15 deletions
|
|
@ -9,6 +9,7 @@ from lnbits.settings import WALLET
|
|||
|
||||
from . import db
|
||||
from .models import (
|
||||
CreateChatMessage,
|
||||
CreateMarket,
|
||||
CreateMarketStalls,
|
||||
Market,
|
||||
|
|
@ -405,3 +406,17 @@ async def create_diagonalley_market_stalls(
|
|||
|
||||
async def update_diagonalley_market(market_id):
|
||||
pass
|
||||
|
||||
async def create_chat_message(data: CreateChatMessage):
|
||||
print("DATA", data)
|
||||
await db.execute(
|
||||
"""
|
||||
INSERT INTO diagonalley.messages (msg, pubkey, id_conversation)
|
||||
VALUES (?, ?, ?)
|
||||
""",
|
||||
(
|
||||
data.msg,
|
||||
data.pubkey,
|
||||
data.room_name,
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -113,3 +113,27 @@ async def m001_initial(db):
|
|||
);
|
||||
"""
|
||||
)
|
||||
|
||||
async def m002_add_chat_messages(db):
|
||||
"""
|
||||
Initial chat messages table.
|
||||
"""
|
||||
await db.execute(
|
||||
f"""
|
||||
CREATE TABLE diagonalley.messages (
|
||||
id {db.serial_primary_key},
|
||||
msg TEXT NOT NULL,
|
||||
pubkey TEXT NOT NULL,
|
||||
id_conversation TEXT NOT NULL,
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT """
|
||||
+ db.timestamp_now
|
||||
+ """
|
||||
);
|
||||
"""
|
||||
)
|
||||
|
||||
"""
|
||||
Create indexes for message fetching
|
||||
"""
|
||||
await db.execute("CREATE INDEX idx_messages_timestamp ON diagonalley.messages (timestamp DESC)")
|
||||
await db.execute("CREATE INDEX idx_messages_conversations ON diagonalley.messages (id_conversation)")
|
||||
|
|
|
|||
|
|
@ -107,3 +107,16 @@ class Market(BaseModel):
|
|||
|
||||
class CreateMarketStalls(BaseModel):
|
||||
stallid: str
|
||||
|
||||
|
||||
class ChatMessage(BaseModel):
|
||||
id: str
|
||||
msg: str
|
||||
pubkey: str
|
||||
id_conversation: str
|
||||
timestamp: int
|
||||
|
||||
class CreateChatMessage(BaseModel):
|
||||
msg: str = Query(..., min_length=1)
|
||||
pubkey: str = Query(...)
|
||||
room_name: str = Query(...)
|
||||
|
|
|
|||
|
|
@ -4,11 +4,15 @@ Create a class Notifier that will handle messages
|
|||
and delivery to the specific person
|
||||
"""
|
||||
|
||||
import json
|
||||
from collections import defaultdict
|
||||
|
||||
from fastapi import WebSocket
|
||||
from loguru import logger
|
||||
|
||||
from lnbits.extensions.diagonalley.crud import create_chat_message
|
||||
from lnbits.extensions.diagonalley.models import CreateChatMessage
|
||||
|
||||
|
||||
class Notifier:
|
||||
"""
|
||||
|
|
@ -75,6 +79,12 @@ class Notifier:
|
|||
async def _notify(self, message: str, room_name: str):
|
||||
"""Notifier"""
|
||||
|
||||
d = json.loads(message)
|
||||
d["room_name"] = room_name
|
||||
db_msg = CreateChatMessage.parse_obj(d)
|
||||
print("NOT:", db_msg)
|
||||
await create_chat_message(data=db_msg)
|
||||
|
||||
remaining_sessions = []
|
||||
while len(self.sessions[room_name]) > 0:
|
||||
websocket = self.sessions[room_name].pop()
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
<!-- <p v-if="Object.keys(messages).length === 0">No messages yet</p> -->
|
||||
<div class="chat-messages">
|
||||
<q-chat-message
|
||||
:key="key"
|
||||
v-for="(message, key) in messages"
|
||||
:name="message.from == 'me' ? 'me' : 'merchant'"
|
||||
:text="[message.text]"
|
||||
:sent="message.from == 'me' ? true : false"
|
||||
:bg-color="message.from == 'me' ? 'white' : 'light-green-2'"
|
||||
:key="index"
|
||||
v-for="(message, index) in messages"
|
||||
:name="message.pubkey == user.keys.publickey ? 'me' : 'merchant'"
|
||||
:text="[message.msg]"
|
||||
:sent="message.pubkey == user.keys.publickey ? true : false"
|
||||
:bg-color="message.pubkey == user.keys.publickey ? 'white' : 'light-green-2'"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -125,6 +125,9 @@
|
|||
</div>
|
||||
{% endblock %} {% block scripts %}
|
||||
<script>
|
||||
const mapChatMsg = obj => {
|
||||
return
|
||||
}
|
||||
Vue.component(VueQrcode.name, VueQrcode)
|
||||
new Vue({
|
||||
el: '#vue',
|
||||
|
|
@ -150,16 +153,14 @@
|
|||
this.newMessage = ''
|
||||
this.$refs.newMessage.focus()
|
||||
},
|
||||
sendMessage(e) {
|
||||
sendMessage() {
|
||||
let message = {
|
||||
key: Date.now(),
|
||||
text: this.newMessage,
|
||||
from: 'me'
|
||||
msg: this.newMessage,
|
||||
pubkey: this.user.keys.publickey
|
||||
}
|
||||
ws.send(JSON.stringify(message))
|
||||
|
||||
this.clearMessage()
|
||||
e.preventDefault()
|
||||
},
|
||||
sliceKey(key) {
|
||||
if (!key) return ''
|
||||
|
|
@ -210,8 +211,8 @@
|
|||
ws.onmessage = event => {
|
||||
let event_data = JSON.parse(event.data)
|
||||
|
||||
this.$set(this.messages, event_data.key, event_data)
|
||||
this.$q.localStorage.set()
|
||||
this.$set(this.messages, Date.now(), event_data)
|
||||
console.log(this.messages)
|
||||
}
|
||||
|
||||
this.ws = ws
|
||||
|
|
|
|||
|
|
@ -12,9 +12,11 @@ from starlette.responses import HTMLResponse
|
|||
from lnbits.core.models import User
|
||||
from lnbits.decorators import check_user_exists # type: ignore
|
||||
from lnbits.extensions.diagonalley import diagonalley_ext, diagonalley_renderer
|
||||
from lnbits.extensions.diagonalley.models import CreateChatMessage
|
||||
from lnbits.extensions.diagonalley.notifier import Notifier
|
||||
|
||||
from .crud import (
|
||||
create_chat_message,
|
||||
get_diagonalley_market,
|
||||
get_diagonalley_market_stalls,
|
||||
get_diagonalley_order_details,
|
||||
|
|
@ -137,7 +139,7 @@ async def websocket_endpoint(
|
|||
print("Sender not in room member: Reconnecting...")
|
||||
await notifier.connect(websocket, room_name)
|
||||
|
||||
await notifier._notify(f"{data}", room_name)
|
||||
await notifier._notify(data, room_name)
|
||||
|
||||
except WebSocketDisconnect:
|
||||
notifier.remove(websocket, room_name)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue