Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from application.port._in.get_chat_messages_use_case import GetChatMessagesUseCase
from domain.chat.chat import Chat
from domain.chat.chat_id import ChatId


class GetChatMessagesController:
def __init__(self, useCase: GetChatMessagesUseCase):
self.useCase = useCase

def getChatMessages(self, chatId: int)->Chat:
return self.useCase.getChatMessages(ChatId(chatId))
15 changes: 15 additions & 0 deletions 3 - PB/MVP/src/backend/adapter/_in/web/get_chats_controller.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import List

from application.port._in.get_chats_use_case import GetChatsUseCase
from domain.chat.chat_filter import ChatFilter
from domain.chat.chat_preview import ChatPreview



class GetChatsController:
def __init__(self, getChatsUseCase:GetChatsUseCase):
self.useCase = getChatsUseCase

def getChats(self, searchFilter:str)-> List[ChatPreview]:
filter = ChatFilter(searchFilter)
return self.useCase.getChats(filter)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from application.port.out.get_chat_messages_port import GetChatMessagesPort
from adapter.out.persistence.postgres.postgres_chat_orm import PostgresChatORM
from domain.chat.chat import Chat
from domain.chat.chat_id import ChatId


class GetChatMessagesPostgres(GetChatMessagesPort):
def __init__(self, postgresORM: PostgresChatORM):
self.postgresORM = postgresORM

def getChatMessages(self, chatId:ChatId)->Chat:
chatMessages = self.postgresORM.getChatMessages(chatId.id)
chat = chatMessages.toChat()
return chat
18 changes: 18 additions & 0 deletions 3 - PB/MVP/src/backend/adapter/out/get_chats/get_chats_postgres.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from typing import List

from application.port.out.get_chats_port import GetChatsPort
from domain.chat.chat_filter import ChatFilter
from domain.chat.chat_preview import ChatPreview
from adapter.out.persistence.postgres.postgres_chat_orm import PostgresChatORM


class GetChatsPostgres(GetChatsPort):
def __init__(self, postgresORM: PostgresChatORM):
self.postgresORM = postgresORM
def getChats(self, chatFilter: ChatFilter) -> List[ChatPreview]:
chatsPreview = []
listOfChatPreview = self.postgresORM.getChats(chatFilter.searchFilter)
for chatPreview in listOfChatPreview:
previewOfChat = chatPreview.getChatPreview()
chatsPreview.append(previewOfChat)
return chatsPreview
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from datetime import datetime
from typing import List

from adapter.out.persistence.postgres.postgres_message import PostgresMessage
from domain.chat.chat import Chat
from domain.chat.chat_id import ChatId



class PostgresChat:
def __init__(self, id:int, title:str, timestamp:datetime, messages: List[PostgresMessage]):
self.id = id
self.title = title
self.timestamp = timestamp
self.messages = messages
def toChat(self):
listOfMessages = []
for message in self.messages:
listOfMessages.append(message.toMessage())
return Chat(title=self.title, chatId= ChatId(self.id), messages=listOfMessages)
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
from datetime import datetime
from typing import List
from adapter.out.persistence.postgres.postgres_message import PostgresMessage
from adapter.out.persistence.postgres.postgres_message import PostgresMessage, PostgresMessageSenderType
from adapter.out.persistence.postgres.postgres_chat_operation_response import PostgresChatOperationResponse
from adapter.out.persistence.postgres.postgres_chat_preview import PostgresChatPreview
from adapter.out.persistence.postgres.postgres_configuration_orm import db_session
from adapter.out.persistence.postgres.postgres_chat import PostgresChat


class PostgresChatORM:
def __init__(self) -> None:
Expand Down Expand Up @@ -47,4 +52,21 @@ def renameChat(self, chatId: int, newName: str) -> PostgresChatOperationResponse
# db_session.commit()
# except Exception as e:
# return PostgresChatOperationResponse(False, f"Errore nella rinominazione della chat: {str(e)}", None)
return PostgresChatOperationResponse(True, "Chat rinominata correttamente.", chatId)
return PostgresChatOperationResponse(True, "Chat rinominata correttamente.", chatId)
def getChats(self, chatFilter:str) -> List[PostgresChatPreview]:
#try:
# listOfPostgresChatPreview = db_session.query(chatFilter).filter(chatFilter).all()
#except Exception as e:
# return #todo da capire come fare
return [PostgresChatPreview(1, "titolo",
PostgresMessage("content",datetime(2020,2,12), ["relevant docs"], PostgresMessageSenderType.USER)),
PostgresChatPreview(1, "titolo2",
PostgresMessage("content2",datetime(2020,2,12), ["relevant docs"], PostgresMessageSenderType.USER))]
def getChatMessages(self, chatId: int) -> PostgresChat:
#try:
# listOfPostgresMessage = db_session.query(PostgresMessage).filter(PostgresMessage.chatId == chatId).all()
#except Exception as e:
# return #todo da capire come fare
return PostgresChat(1, "titolo", datetime(2020,12,3),
[PostgresMessage("content", datetime(2020,12,3), ["relevantDocs"], PostgresMessageSenderType.USER),
PostgresMessage("content2", datetime(2020,12,3), ["relevantDocs2"], PostgresMessageSenderType.CHATBOT)])
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from datetime import datetime

from domain.chat.chat_id import ChatId
from domain.chat.chat_preview import ChatPreview
from adapter.out.persistence.postgres.postgres_message import PostgresMessage



class PostgresChatPreview:
def __init__(self, id: int, title:str, postgresMessage: PostgresMessage):
self.id = id
self.title = title
self.lastMessage = postgresMessage

def getChatPreview(self) -> ChatPreview:
return ChatPreview(id=ChatId(self.id), title=self.title, lastMessage=self.lastMessage.toMessage())
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
from datetime import datetime
from enum import Enum

from domain.chat.message import Message, MessageSender
from domain.document.document_id import DocumentId


@dataclass
class PostgresMessageSenderType(Enum):
USER = 1
Expand All @@ -13,4 +17,11 @@ class PostgresMessage:
content: str
timestamp: datetime
relevantDocuments: List[str]
sender: PostgresMessageSenderType
sender: PostgresMessageSenderType

def toMessage(self) -> Message:
return Message(self.content,
self.timestamp,
[DocumentId(relevantDocument) for relevantDocument in self.relevantDocuments],
MessageSender.USER if self.sender == PostgresMessageSenderType.USER else MessageSender.CHATBOT
)
4 changes: 4 additions & 0 deletions 3 - PB/MVP/src/backend/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from flask_cors import CORS

from api_exceptions import APIBadRequest
from blueprints.get_chat_messages import getChatMessagesBlueprint
from blueprints.get_chats import getChatsBlueprint

from blueprints.get_document_content import getDocumentContentBlueprint
from blueprints.upload_documents import uploadDocumentsBlueprint
Expand Down Expand Up @@ -40,6 +42,8 @@ def shutdown_session(exception=None):
app.register_blueprint(changeConfigurationBlueprint)
app.register_blueprint(getConfigurationOptionsBlueprint)
app.register_blueprint(askChatbotBlueprint)
app.register_blueprint(getChatsBlueprint)
app.register_blueprint(getChatMessagesBlueprint)
app.register_blueprint(deleteChatsBlueprint)
app.register_blueprint(renameChatBlueprint)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from domain.chat.chat import Chat
from domain.chat.chat_id import ChatId


class GetChatMessagesUseCase:
def getChatMessages(self, chatId: ChatId)->Chat:
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from typing import List

from domain.chat.chat_filter import ChatFilter
from domain.chat.chat_preview import ChatPreview


class GetChatsUseCase:
def getChats(self, chatFilter: ChatFilter) -> List[ChatPreview]:
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from domain.chat.chat import Chat
from domain.chat.chat_id import ChatId


class GetChatMessagesPort:
def getChatMessages(self, chatId: ChatId)->Chat:
pass
9 changes: 9 additions & 0 deletions 3 - PB/MVP/src/backend/application/port/out/get_chats_port.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from typing import List

from domain.chat.chat_filter import ChatFilter
from domain.chat.chat_preview import ChatPreview


class GetChatsPort:
def getChats(self, chatFilter: ChatFilter) -> List[ChatPreview]:
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from application.port._in.get_chat_messages_use_case import GetChatMessagesUseCase
from domain.chat.chat import Chat
from domain.chat.chat_id import ChatId
from application.port.out.get_chat_messages_port import GetChatMessagesPort


class GetChatMessagesService(GetChatMessagesUseCase):
def __init__(self, outPort: GetChatMessagesPort):
self.outPort = outPort
def getChatMessages(self, chatId: ChatId)->Chat:
return self.outPort.getChatMessages(chatId)
15 changes: 15 additions & 0 deletions 3 - PB/MVP/src/backend/application/service/get_chats_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import List

from application.port._in.get_chats_use_case import GetChatsUseCase
from application.port.out.get_chats_port import GetChatsPort
from domain.chat.chat_filter import ChatFilter
from domain.chat.chat_preview import ChatPreview


class GetChatsService(GetChatsUseCase):
def __init__(self, getChatsPort: GetChatsPort):
self.getChatsPort = getChatsPort

def getChats(self, chatFilter: ChatFilter) -> List[ChatPreview]:
return self.getChatsPort.getChats(chatFilter)

35 changes: 35 additions & 0 deletions 3 - PB/MVP/src/backend/blueprints/get_chat_messages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from flask import Blueprint, jsonify

from adapter._in.web.get_chat_messages_controller import GetChatMessagesController
from adapter.out.persistence.postgres.postgres_configuration_orm import PostgresConfigurationORM
from adapter.out.configuration_manager import ConfigurationManager
from api_exceptions import InsufficientParameters
from adapter.out.persistence.postgres.postgres_chat_orm import PostgresChatORM
from application.service.get_chat_messages_service import GetChatMessagesService
from adapter.out.get_chat_messages.get_chat_messages_postgres import GetChatMessagesPostgres

getChatMessagesBlueprint = Blueprint("getChatMessages", __name__)

@getChatMessagesBlueprint.route('/getChatMessages', defaults={'chatId': ''}, methods=['GET'])
def getChatMessages(chatId):
if chatId is None:
raise InsufficientParameters()

configurationManager = ConfigurationManager(postgresConfigurationORM=PostgresConfigurationORM())

controller = GetChatMessagesController(
GetChatMessagesService(
GetChatMessagesPostgres(
PostgresChatORM()
)
)
)

chatMessages = controller.getChatMessages(chatId)
return jsonify({
"title": chatMessages.title,
"id": chatMessages.chatId.id,
"messages": [{"content": chatMessage.content,
"time": chatMessage.timestamp,
"sender": chatMessage.sender.name} for chatMessage in chatMessages.messages]
})
39 changes: 39 additions & 0 deletions 3 - PB/MVP/src/backend/blueprints/get_chats.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from flask import Blueprint, jsonify

from adapter._in.web.get_chats_controller import GetChatsController
from adapter.out.persistence.postgres.postgres_configuration_orm import PostgresConfigurationORM
from adapter.out.configuration_manager import ConfigurationManager
from api_exceptions import InsufficientParameters
from adapter.out.get_chats.get_chats_postgres import GetChatsPostgres
from adapter.out.persistence.postgres.postgres_chat_orm import PostgresChatORM
from application.service.get_chats_service import GetChatsService

getChatsBlueprint = Blueprint("getChats", __name__)


@getChatsBlueprint.route('/getChats', defaults={'filter': ''}, methods=['GET'])
@getChatsBlueprint.route("/getChats/<filter>", methods=['GET'])
def getDocuments(filter):
if filter is None:
raise InsufficientParameters()

configurationManager = ConfigurationManager(postgresConfigurationORM=PostgresConfigurationORM())

controller = GetChatsController(
GetChatsService(
GetChatsPostgres(
PostgresChatORM()
)
)
)

chats = controller.getChats(filter)

if len(chats) == 0:
return jsonify([]), 404

return jsonify([{
"title": chat.title,
"lastMessage": { "content": chat.lastMessage.content,
"sender":chat.lastMessage.sender.name,
"time": chat.lastMessage.timestamp}} for chat in chats])
11 changes: 11 additions & 0 deletions 3 - PB/MVP/src/backend/domain/chat/chat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from typing import List

from domain.chat.chat_id import ChatId
from domain.chat.message import Message


class Chat:
def __init__(self, title:str, chatId: ChatId, messages: List[Message]):
self.title = title
self.chatId = chatId
self.messages = messages
4 changes: 4 additions & 0 deletions 3 - PB/MVP/src/backend/domain/chat/chat_filter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

class ChatFilter:
def __init__(self, searchFilter:str):
self.searchFilter = searchFilter
6 changes: 6 additions & 0 deletions 3 - PB/MVP/src/backend/domain/chat/chat_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from datetime import datetime

class ChatInfo:
def __init__(self, title: str, timestamp: datetime):
self.title = title
self.timestamp = timestamp
12 changes: 12 additions & 0 deletions 3 - PB/MVP/src/backend/domain/chat/chat_preview.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from dataclasses import dataclass

from domain.chat.chat_id import ChatId
from domain.chat.message import Message


@dataclass
class ChatPreview:
def __init__(self, id:ChatId, title: str, lastMessage: Message):
self.id = id.id
self.title = title
self.lastMessage = lastMessage