From 6a174b148ba2e1360624d616d1803b86a8ab54ad Mon Sep 17 00:00:00 2001 From: Anyer Date: Sun, 18 May 2025 22:02:04 +0200 Subject: [PATCH 1/2] get_all Metric.objects.filter(id=2) per provar els dashboards --- metric/repositories.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metric/repositories.py b/metric/repositories.py index 7f07d2a..88513a0 100644 --- a/metric/repositories.py +++ b/metric/repositories.py @@ -3,7 +3,8 @@ class MetricRepository: def get_all(self): - return Metric.objects.all() + return Metric.objects.filter(id=2) + # return Metric.objects.all() def get_by_id(self, pk): return Metric.objects.get(id=pk) From ba731ba7165a590b72b299398f183b6ef53c2995 Mon Sep 17 00:00:00 2001 From: Anyer Date: Tue, 20 May 2025 23:25:32 +0200 Subject: [PATCH 2/2] =?UTF-8?q?feature(dashboards):=20Crear=20components?= =?UTF-8?q?=20de=20gr=C3=A0fiques=20amb=20Recharts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs #87 --- metric/management/__init__.py | 0 metric/management/commands/__init__.py | 0 .../commands/create_dummy_metric_values.py | 53 +++++++++++++++++++ .../0007_alter_metricvalue_retrieved_at.py | 19 +++++++ metric/models.py | 3 +- metric/repositories.py | 8 +-- 6 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 metric/management/__init__.py create mode 100644 metric/management/commands/__init__.py create mode 100644 metric/management/commands/create_dummy_metric_values.py create mode 100644 metric/migrations/0007_alter_metricvalue_retrieved_at.py diff --git a/metric/management/__init__.py b/metric/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/metric/management/commands/__init__.py b/metric/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/metric/management/commands/create_dummy_metric_values.py b/metric/management/commands/create_dummy_metric_values.py new file mode 100644 index 0000000..e330afe --- /dev/null +++ b/metric/management/commands/create_dummy_metric_values.py @@ -0,0 +1,53 @@ +import random +from datetime import timedelta + +from django.core.management.base import BaseCommand +from django.utils import timezone + +from app.models import App +from metric.models import Metric, MetricValue +from source.models import Source + + +class Command(BaseCommand): + help = "Crea MetricValues dummy para pruebas" + + def handle(self, *args, **kwargs): + apps = App.objects.all() + metrics = Metric.objects.all() + sources = Source.objects.all() + + if not apps.exists() or not metrics.exists(): + self.stdout.write(self.style.ERROR("Debes tener apps y métricas creadas")) + return + + created_count = 0 + + for app in apps: + for metric in metrics: + if metric.code == "average_rating": + for source in sources: + if ( + source.code in ["itunes", "google_play"] + and metric in source.metrics.all() + ): + for days_ago in range(30): # últimos 30 días + date = timezone.now() - timedelta(days=days_ago) + value = ( + round(random.uniform(4.4, 4.5), 5) + if metric.value_type == "float" + else str(random.randint(1, 1000)) + ) + + MetricValue.objects.create( + app=app, + metric=metric, + source=source, + value=str(value), + retrieved_at=date, + ) + created_count += 1 + + self.stdout.write( + self.style.SUCCESS(f"✔ {created_count} MetricValues creados correctamente.") + ) diff --git a/metric/migrations/0007_alter_metricvalue_retrieved_at.py b/metric/migrations/0007_alter_metricvalue_retrieved_at.py new file mode 100644 index 0000000..3cbd97f --- /dev/null +++ b/metric/migrations/0007_alter_metricvalue_retrieved_at.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.7 on 2025-05-20 14:28 + +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("metric", "0006_remove_metric_is_internal"), + ] + + operations = [ + migrations.AlterField( + model_name="metricvalue", + name="retrieved_at", + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/metric/models.py b/metric/models.py index 5529f14..4909d3b 100644 --- a/metric/models.py +++ b/metric/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils import timezone from app.models import App from metric.constants.value_types import MetricValueType @@ -19,7 +20,7 @@ class MetricValue(models.Model): metric = models.ForeignKey(Metric, on_delete=models.CASCADE) source = models.ForeignKey("source.Source", on_delete=models.CASCADE, null=True, blank=True) value = models.CharField(max_length=255) - retrieved_at = models.DateTimeField(auto_now_add=True) + retrieved_at = models.DateTimeField(default=timezone.now) def __str__(self): return ( diff --git a/metric/repositories.py b/metric/repositories.py index 88513a0..af86aa5 100644 --- a/metric/repositories.py +++ b/metric/repositories.py @@ -34,7 +34,7 @@ def remove_sources(self, instance, sources_ids): class MetricValueRepository: def get_all(self): - return MetricValue.objects.all() + return MetricValue.objects.all().order_by("retrieved_at") def get_by_id(self, pk): return MetricValue.objects.get(id=pk) @@ -52,6 +52,8 @@ def delete(self, instance): instance.delete() def get_by_app_and_metric(self, app_id, metric_id): - return MetricValue.objects.filter(app_id=app_id, metric_id=metric_id).select_related( - "source" + return ( + MetricValue.objects.filter(app_id=app_id, metric_id=metric_id) + .select_related("source") + .order_by("retrieved_at") )