Coverage for src/app/services/get_dashboard_metrics_services.py: 97%
28 statements
« prev ^ index » next coverage.py v7.7.0, created at 2025-04-03 00:42 +0200
« prev ^ index » next coverage.py v7.7.0, created at 2025-04-03 00:42 +0200
1from abc import ABC
2from models.metrics_model import MetricsModel
3from usecases.get_dashboard_metrics_useCase import GetDashboardMetricsUseCase
4from ports.get_all_messages_port import GetAllMessagesPort
6class GetDashboardMetricsService(GetDashboardMetricsUseCase):
7 def __init__(self, get_all_messages_port: GetAllMessagesPort):
8 self.get_all_messages_port = get_all_messages_port
10 def get_dashboard_metrics(self) -> MetricsModel:
11 """
12 Get dashboard metrics.
13 Returns:
14 MetricsModel: An object containing the dashboard metrics.
15 """
16 try:
17 messages = self.get_all_messages_port.fetch_messages()
19 total_likes = 0
20 total_dislikes = 0
21 total_messages = len(messages)
22 rated_messages_count = 0
23 positive_rating = 0
25 for message in messages:
26 rating = message.get_rating()
27 if rating is not None:
28 rated_messages_count += 1
29 if rating == True:
30 total_likes += 1
31 elif rating == False: 31 ↛ 25line 31 didn't jump to line 25 because the condition on line 31 was always true
32 total_dislikes += 1
34 if rated_messages_count > 0:
35 positive_rating = (total_likes / rated_messages_count) * 100
37 return MetricsModel(
38 total_likes=total_likes,
39 total_dislikes=total_dislikes,
40 total_messages=total_messages,
41 positive_rating=positive_rating
42 )
44 except Exception as e:
45 raise e