Coverage for src/app/adapters/message_postgres_adapter.py: 36%

42 statements  

« prev     ^ index     » next       coverage.py v7.7.0, created at 2025-04-03 00:51 +0200

1from repositories.message_postgres_repository import MessagePostgresRepository 

2from models.message_model import MessageModel 

3from ports.get_message_port import GetMessagePort 

4from ports.get_messages_by_conversation_port import GetMessagesByConversationPort 

5from ports.save_message_port import SaveMessagePort 

6from ports.get_all_messages_port import GetAllMessagesPort 

7 

8from entities.message_entity import MessageEntity 

9 

10class MessagePostgresAdapter(GetMessagePort, SaveMessagePort, GetMessagesByConversationPort, GetAllMessagesPort): 

11 

12 def __init__(self, message_postgres_repository: MessagePostgresRepository): 

13 self.message_postgres_repository = message_postgres_repository 

14 

15 def get_message(self, message: MessageModel) -> MessageModel: 

16 """ 

17 Retrieve a message by its ID. 

18 Args: 

19 message (MessageModel): The message object containing the ID to retrieve. 

20 Returns: 

21 MessageModel: The retrieved message. 

22 """ 

23 try: 

24 

25 message_entity = MessageEntity( 

26 id=message.get_id(), 

27 text=message.get_text(), 

28 created_at=message.get_created_at(), 

29 is_bot=message.get_is_bot(), 

30 conversation_id=message.get_conversation_id(), 

31 rating=message.get_rating() 

32 ) 

33 

34 message = self.message_postgres_repository.get_message(message_entity) 

35 

36 return MessageModel( 

37 id=message.get_id(), 

38 text=message.get_text(), 

39 created_at=message.get_created_at(), 

40 is_bot=message.get_is_bot(), 

41 conversation_id=message.get_conversation_id(), 

42 rating=message.get_rating() 

43 ) 

44 

45 except Exception as e: 

46 raise e 

47 

48 def get_messages_by_conversation(self, conversation: MessageModel) -> list[MessageModel]: 

49 """ 

50 Retrieve messages by conversation. 

51 Args: 

52 conversation (MessageModel): The conversation object containing the ID to retrieve messages for. 

53 Returns: 

54 list[MessageModel]: A list of retrieved messages. 

55 """ 

56 try: 

57 

58 conversation_entity = MessageEntity( 

59 conversation_id=conversation.get_conversation_id() 

60 ) 

61 

62 messages = self.message_postgres_repository.get_messages_by_conversation(conversation_entity) 

63 

64 return [ 

65 MessageModel( 

66 id=message.get_id(), 

67 text=message.get_text(), 

68 created_at=message.get_created_at(), 

69 is_bot=message.get_is_bot(), 

70 conversation_id=message.get_conversation_id(), 

71 rating=message.get_rating() 

72 ) 

73 for message in messages 

74 ] 

75 

76 except Exception as e: 

77 raise e 

78 

79 def save_message(self, message: MessageModel)-> int: 

80 """ 

81 Save a message. 

82 Args: 

83 message (MessageModel): The message to save. 

84 Returns: 

85 int: The ID of the saved 

86 """ 

87 try: 

88 message_entity = MessageEntity( 

89 id=message.get_id(), 

90 text=message.get_text(), 

91 created_at=message.get_created_at(), 

92 is_bot=message.get_is_bot(), 

93 conversation_id=message.get_conversation_id(), 

94 rating=message.get_rating() 

95 ) 

96 

97 return self.message_postgres_repository.save_message(message_entity) 

98 

99 except Exception as e: 

100 raise e 

101 

102 def update_message_rating(self, message: MessageModel) -> bool: 

103 """ 

104 Update the rating of a message. 

105 Args: 

106 message (MessageModel): The message containing the ID and the new rating value. 

107 Returns: 

108 bool: True if the rating was successfully updated, False otherwise. 

109 """ 

110 try: 

111 message_entity = MessageEntity( 

112 id=message.get_id(), 

113 rating=message.get_rating() 

114 ) 

115 

116 return self.message_postgres_repository.update_message_rating(message_entity) 

117 

118 except Exception as e: 

119 raise e 

120 

121 def fetch_messages(self) -> list[MessageModel]: 

122 """ 

123 Fetch the dashboard metrics data. 

124 Returns: 

125 list[MessageModel]: A list of MessageModel objects containing the messages data. 

126 """ 

127 try: 

128 messages = self.message_postgres_repository.fetch_messages() 

129 

130 return [ 

131 MessageModel( 

132 id=message.get_id(), 

133 text=message.get_text(), 

134 created_at=message.get_created_at(), 

135 is_bot=message.get_is_bot(), 

136 conversation_id=message.get_conversation_id(), 

137 rating=message.get_rating() 

138 ) 

139 for message in messages 

140 ] 

141 

142 except Exception as e: 

143 raise e