diff --git a/polling/services.py b/polling/services.py index 94c6c7c..6ec84e7 100644 --- a/polling/services.py +++ b/polling/services.py @@ -1,12 +1,10 @@ from datetime import datetime import requests -from django.utils.timezone import now -from metric.models import Metric, MetricValue +from metric.services import MetricService, MetricValueService from polling.tasks import run_polling_task -from review.repositories import ReviewRepository -from source.models import Source +from review.services import ReviewService from source.services import SourceService from .repositories import PollingRepository @@ -16,6 +14,9 @@ class PollingService: def __init__(self): self.repo = PollingRepository() self.source_service = SourceService() + self.metric_service = MetricService() + self.metric_value_service = MetricValueService() + self.review_service = ReviewService() def _analyze_reviews(self, reviews, service_url: str, label: str = "RE-Miner"): """ @@ -109,7 +110,7 @@ def poll_reviews(self, app_id, date_from=None, date_to=None): r["reviewId"] = r.get("reviewId", str(idx)) # ❌ Comprobación: eliminar las reviews ya guardadas para esa app y adapter - existing_ids = ReviewRepository().get_existing_review_ids(app_id, adapter.id) + existing_ids = self.review_service.get_existing_review_ids(app_id, adapter.id) new_reviews = [r for r in reviews if r["reviewId"] not in existing_ids] self.log( f"🧹 {len(reviews) - len(new_reviews)} reviews ya existen.{len(new_reviews)} nuevas." @@ -150,7 +151,7 @@ def poll_reviews(self, app_id, date_from=None, date_to=None): review["type"] = type_by_id.get(review["reviewId"], "") self.log("💾 Saving reviews...") - saved_count = ReviewRepository().save_reviews(app_id, adapter.id, new_reviews) + saved_count = self.review_service.save_reviews(app_id, adapter.id, new_reviews) self.log(f"✅ {saved_count} reviews saved.") results.append( @@ -168,18 +169,18 @@ def poll_metrics(self, app_id): adapters = self.source_service.load_sources() print("[🔁] Iniciant recollida de mètriques...") - metrics = list(Metric.objects.prefetch_related("sources").all()) + metrics = list(self.metric_service.get_all()) # 🔀 Separa mètriques metrics = [m for m in metrics] # ⚡ Caches metric_cache = {m.code: m for m in metrics} - source_cache = {a.code: Source.objects.get(code=a.code) for a in adapters} + # source_cache = {a.code: Source.objects.get(code=a.code) for a in adapters} # 🔁 EXTERNAL: Per adapters for adapter in adapters: - print("adapter actual: ", adapter.code) + print("adapter actual: ", adapter.code + " " + adapter.id) source_code = adapter.code available_metrics = [ m.code for m in metrics if source_code in m.sources.values_list("code", flat=True) @@ -199,22 +200,16 @@ def poll_metrics(self, app_id): continue metric = metric_cache[metric_code] - source = source_cache[source_code] + # source = source_cache[source_code] - already_exists = MetricValue.objects.filter( - app_id=app_id, metric=metric, source=source, retrieved_at__date=now().date() - ).exists() - - if already_exists: - print(f" ℹ️ Ja existia: {metric_code} — {value}") - continue - - MetricValue.objects.create( - app_id=app_id, - metric=metric, - source=source, - value=value, - retrieved_at=datetime.now(), + self.metric_value_service.create_metric_value( + { + "app_id": app_id, + "metric": metric, + "source_id": adapter.id, + "value": value, + "retrieved_at": datetime.now(), + } ) print(f" ✅ Guardat {metric_code}: {value}") diff --git a/review/services.py b/review/services.py index 05ae8df..7bd3d6a 100644 --- a/review/services.py +++ b/review/services.py @@ -19,3 +19,9 @@ def get_review(self, review_id): def delete_all_reviews(self): self.repo.delete_all_reviews() + + def get_existing_review_ids(self, app_id, source_id): + return self.repo.get_existing_review_ids(app_id, source_id) + + def save_reviews(self, app_id, source_id, new_reviews): + return self.repo.save_reviews(app_id, source_id, new_reviews) diff --git a/source/repositories.py b/source/repositories.py index 4ea641b..61bae87 100644 --- a/source/repositories.py +++ b/source/repositories.py @@ -8,8 +8,8 @@ def get_all(): return Source.objects.all() @staticmethod - def get_by_id(app_id): - return Source.objects.get(id=app_id) + def get_by_id(source_id): + return Source.objects.get(id=source_id) @staticmethod def create(data):