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
43 changes: 19 additions & 24 deletions polling/services.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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"):
"""
Expand Down Expand Up @@ -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."
Expand Down Expand Up @@ -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(
Expand All @@ -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)
Expand All @@ -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}")

Expand Down
6 changes: 6 additions & 0 deletions review/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
4 changes: 2 additions & 2 deletions source/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down