From 57bb9665c69e4194fce86ecea75b36b36c0dffd9 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Fri, 30 Sep 2022 10:16:34 +0100 Subject: [PATCH] chat messages stored in db --- lnbits/extensions/diagonalley/crud.py | 15 +++++++++++ lnbits/extensions/diagonalley/migrations.py | 24 +++++++++++++++++ lnbits/extensions/diagonalley/models.py | 13 +++++++++ lnbits/extensions/diagonalley/notifier.py | 10 +++++++ .../templates/diagonalley/chat.html | 27 ++++++++++--------- lnbits/extensions/diagonalley/views.py | 6 +++-- 6 files changed, 80 insertions(+), 15 deletions(-) diff --git a/lnbits/extensions/diagonalley/crud.py b/lnbits/extensions/diagonalley/crud.py index 8f053de1..9e3f2013 100644 --- a/lnbits/extensions/diagonalley/crud.py +++ b/lnbits/extensions/diagonalley/crud.py @@ -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, + ), + ) diff --git a/lnbits/extensions/diagonalley/migrations.py b/lnbits/extensions/diagonalley/migrations.py index 6e1510a7..3bcddcb0 100644 --- a/lnbits/extensions/diagonalley/migrations.py +++ b/lnbits/extensions/diagonalley/migrations.py @@ -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)") diff --git a/lnbits/extensions/diagonalley/models.py b/lnbits/extensions/diagonalley/models.py index c3234bb6..f9fa1bca 100644 --- a/lnbits/extensions/diagonalley/models.py +++ b/lnbits/extensions/diagonalley/models.py @@ -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(...) diff --git a/lnbits/extensions/diagonalley/notifier.py b/lnbits/extensions/diagonalley/notifier.py index 58a9f2bb..e21be500 100644 --- a/lnbits/extensions/diagonalley/notifier.py +++ b/lnbits/extensions/diagonalley/notifier.py @@ -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() diff --git a/lnbits/extensions/diagonalley/templates/diagonalley/chat.html b/lnbits/extensions/diagonalley/templates/diagonalley/chat.html index 1713c9e2..21f59361 100644 --- a/lnbits/extensions/diagonalley/templates/diagonalley/chat.html +++ b/lnbits/extensions/diagonalley/templates/diagonalley/chat.html @@ -7,12 +7,12 @@
@@ -125,6 +125,9 @@ {% endblock %} {% block scripts %}