From 36dddb293e79b4f7e6ff67e7feb353932fb48a01 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Thu, 11 Apr 2024 16:35:34 -0400
Subject: [PATCH] feat: add RadioSettingsSerializer

---
 program/serializers.py | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/program/serializers.py b/program/serializers.py
index e4916695..cfd0dfde 100644
--- a/program/serializers.py
+++ b/program/serializers.py
@@ -42,6 +42,7 @@ from program.models import (
     MusicFocus,
     Note,
     NoteLink,
+    RadioSettings,
     RRule,
     Schedule,
     Show,
@@ -1098,3 +1099,40 @@ class NoteSerializer(serializers.ModelSerializer):
         instance.save()
 
         return instance
+
+
+class RadioSettingsSerializer(serializers.ModelSerializer):
+    cba = serializers.SerializerMethodField()
+    fallback = serializers.SerializerMethodField()
+    playout = serializers.SerializerMethodField()
+    station = serializers.SerializerMethodField()
+
+    class Meta:
+        read_only_fields = ("cba", "fallback", "playout", "station")
+        fields = read_only_fields
+        model = RadioSettings
+
+    def get_cba(self, obj) -> dict[str, str] | dict[str, list[str]]:
+        if self.context.get("request").user.is_authenticated:
+            return {
+                "api_key": obj.cba_api_key,
+                "domain": obj.cba_domains,
+            }
+        else:
+            return {"domains": obj.cba_domains}
+
+    @staticmethod
+    def get_fallback(obj) -> dict[str, int]:
+        return {"show_id": obj.fallback_show.id}
+
+    @staticmethod
+    def get_playout(obj) -> dict[str, dict[str, str]]:
+        return {"channels": obj.playout_channels}
+
+    @staticmethod
+    def get_station(obj) -> dict[str, int | str]:
+        return {
+            "name": obj.station_name,
+            "logoId": obj.station_logo.id,
+            "website": obj.station_website,
+        }
-- 
GitLab