Przeglądaj źródła

[beers] Connect beers with producers

Colin Powell 6 miesięcy temu
rodzic
commit
59765b14ca

+ 36 - 0
vrobbler/apps/beers/migrations/0002_beer_beeradvocate_image_beer_producer_and_more.py

@@ -0,0 +1,36 @@
+# Generated by Django 4.2.16 on 2024-10-22 21:34
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("beers", "0001_initial"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="beer",
+            name="beeradvocate_image",
+            field=models.ImageField(
+                blank=True, null=True, upload_to="beers/beeradvcoate/"
+            ),
+        ),
+        migrations.AddField(
+            model_name="beer",
+            name="producer",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.DO_NOTHING,
+                to="beers.beerproducer",
+            ),
+        ),
+        migrations.AddField(
+            model_name="beerproducer",
+            name="beeradvocate_id",
+            field=models.CharField(blank=True, max_length=255, null=True),
+        ),
+    ]

+ 36 - 0
vrobbler/apps/beers/models.py

@@ -2,6 +2,8 @@ from django.apps import apps
 from django.db import models
 from django.urls import reverse
 from django_extensions.db.models import TimeStampedModel
+from imagekit.models import ImageSpecField
+from imagekit.processors import ResizeToFit
 from scrobbles.dataclasses import BeerLogData
 from scrobbles.mixins import ScrobblableMixin
 
@@ -11,6 +13,10 @@ BNULL = {"blank": True, "null": True}
 class BeerProducer(TimeStampedModel):
     description = models.TextField(**BNULL)
     location = models.CharField(max_length=255, **BNULL)
+    beeradvocate_id = models.CharField(max_length=255, **BNULL)
+
+    def find_or_create(cls, title: str) -> "BeerProducer":
+        return cls.objects.filter(title=title).first()
 
 
 class Beer(ScrobblableMixin):
@@ -21,11 +27,41 @@ class Beer(ScrobblableMixin):
     non_alcoholic = models.BooleanField(default=False)
     beeradvocate_id = models.CharField(max_length=255, **BNULL)
     beeradvocate_score = models.SmallIntegerField(**BNULL)
+    beeradvocate_image = models.ImageField(
+        upload_to="beers/beeradvcoate/", **BNULL
+    )
+    beeradvocate_image_small = ImageSpecField(
+        source="cover",
+        processors=[ResizeToFit(100, 100)],
+        format="JPEG",
+        options={"quality": 60},
+    )
+    beeradvocate_image_medium = ImageSpecField(
+        source="cover",
+        processors=[ResizeToFit(300, 300)],
+        format="JPEG",
+        options={"quality": 75},
+    )
     untappd_id = models.CharField(max_length=255, **BNULL)
+    producer = models.ForeignKey(
+        BeerProducer, on_delete=models.DO_NOTHING, **BNULL
+    )
 
     def get_absolute_url(self):
         return reverse("beers:beer_detail", kwargs={"slug": self.uuid})
 
+    def beeradvocate_link(self):
+        link = ""
+        if self.beeradvocate_id and self.producer:
+            link = f"https://www.beeradvocate.com/beer/profile/{self.producer.beeradvocate_id}/{self.beeradvocate_id}/"
+        return link
+
+    def primary_image_url(self) -> str:
+        url = ""
+        if self.beeradvocate_image:
+            url = self.beeradvocate_image.url
+        return url
+
     @property
     def logdata_cls(self):
         return BeerLogData

+ 0 - 3
vrobbler/apps/boardgames/models.py

@@ -112,9 +112,6 @@ class BoardGame(ScrobblableMixin):
             link = f"https://boardgamegeek.com/boardgame/{self.bggeek_id}"
         return link
 
-    def get_start_url(self):
-        return reverse("scrobbles:start", kwargs={"uuid": self.uuid})
-
     def fix_metadata(self, data: dict = {}, force_update=False) -> None:
 
         if not self.published_date or force_update: