Fix milestone sharing previews and publisher recovery

This commit is contained in:
2026-08-14 14:33:29 +02:00
parent e7581e488d
commit d8f7202bf6
10 changed files with 265 additions and 43 deletions

View File

@@ -3,4 +3,5 @@ WORKDIR /worker
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY worker.py .
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 CMD python -c "import os,requests; base=os.environ['QRMASTER_API_BASE'].rstrip('/'); secret=os.environ['INTERNAL_API_SECRET']; requests.get(base + '/api/internal/social-milestones?dryRun=true', headers={'Authorization':'Bearer ' + secret}, timeout=5).raise_for_status()"
CMD ["python", "worker.py"]

View File

@@ -57,14 +57,19 @@ def render_card(card):
else:
logo_x = 68
draw.text((logo_x, 70), "QR MASTER", font=medium, fill=navy)
badge_text = "Verified scan milestone"
badge_font = font("DejaVuSans.ttf", 19)
badge_box = draw.textbbox((0, 0), badge_text, font=badge_font)
badge_width = badge_box[2] - badge_box[0]
draw.rounded_rectangle((1120 - badge_width - 32, 61, 1132, 106), radius=7, fill="#ecfdf5")
draw.text((1116, 73), badge_text, font=badge_font, fill=mint, anchor="ra")
draw.line((68, 124, 1132, 124), fill="#e5edf5", width=2)
total = int(card.get("totalUniqueScans") or card.get("threshold") or 0)
total_scans = int(card.get("totalScans") or total)
draw.text((66, 212), f"{total:,}", font=display, fill=navy)
draw.text((73, 374), "UNIQUE SCANS", font=medium, fill=navy)
draw.text((74, 410), f"{total_scans:,} total scans", font=font("DejaVuSans.ttf", 20), fill=slate)
draw.line((68, 548, 108, 548), fill=blue, width=4)
draw.text((126, 530), "QR code milestone", font=regular, fill=slate)
trend = card.get("trend") or {}
raw_points = trend.get("points") or []
@@ -89,7 +94,11 @@ def render_card(card):
draw.ellipse((x - 8, y - 8, x + 8, y + 8), fill="#ffffff", outline=blue, width=5)
draw.text((left, top + height + 27), trend.get("startLabel") or "Created", font=font("DejaVuSans.ttf", 19), fill=slate)
draw.text((left + width, top + height + 27), trend.get("endLabel") or "Reached", font=font("DejaVuSans.ttf", 19), fill=slate, anchor="ra")
draw.text((870, 530), "VERIFIED SCAN DATA", font=font("DejaVuSans-Bold.ttf", 18), fill=mint)
draw.line((68, 536, 1132, 536), fill="#e5edf5", width=2)
title = str(card.get("qrTitle") or "QR code")
if len(title) > 52:
title = title[:49].rstrip() + "..."
draw.text((68, 558), title, font=medium, fill=navy)
path = Path(tempfile.mkstemp(suffix=".png")[1])
image.save(path, "PNG", optimize=True)
return path