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

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 

5 

6class GetDashboardMetricsService(GetDashboardMetricsUseCase): 

7 def __init__(self, get_all_messages_port: GetAllMessagesPort): 

8 self.get_all_messages_port = get_all_messages_port 

9 

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() 

18 

19 total_likes = 0 

20 total_dislikes = 0 

21 total_messages = len(messages) 

22 rated_messages_count = 0 

23 positive_rating = 0 

24 

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 

33 

34 if rated_messages_count > 0: 

35 positive_rating = (total_likes / rated_messages_count) * 100 

36 

37 return MetricsModel( 

38 total_likes=total_likes, 

39 total_dislikes=total_dislikes, 

40 total_messages=total_messages, 

41 positive_rating=positive_rating 

42 ) 

43 

44 except Exception as e: 

45 raise e