Always have Public channel available

This commit is contained in:
Jack Kingsman
2026-01-13 12:06:38 -08:00
parent 760bd0f7d6
commit 3ea98e309c
2 changed files with 11 additions and 5 deletions
+8 -5
View File
@@ -187,18 +187,21 @@ async def ensure_default_channels() -> None:
""" """
Ensure default channels exist in the database. Ensure default channels exist in the database.
These will be configured on the radio when needed for sending. These will be configured on the radio when needed for sending.
The Public channel is protected - it always exists with the canonical name.
""" """
# Public channel - no hashtag, specific key # Public channel - no hashtag, specific well-known key
PUBLIC_CHANNEL_KEY_HEX = "8B3387E9C5CDEA6AC9E5EDBAA115CD72" PUBLIC_CHANNEL_KEY_HEX = "8B3387E9C5CDEA6AC9E5EDBAA115CD72"
existing = await ChannelRepository.get_by_name("Public") # Check by KEY (not name) since that's what's fixed
if not existing: existing = await ChannelRepository.get_by_key(PUBLIC_CHANNEL_KEY_HEX)
logger.info("Creating default Public channel") if not existing or existing.name != "Public":
logger.info("Ensuring default Public channel exists with correct name")
await ChannelRepository.upsert( await ChannelRepository.upsert(
key=PUBLIC_CHANNEL_KEY_HEX, key=PUBLIC_CHANNEL_KEY_HEX,
name="Public", name="Public",
is_hashtag=False, is_hashtag=False,
on_radio=False, on_radio=existing.on_radio if existing else False,
) )
+3
View File
@@ -7,6 +7,7 @@ from pydantic import BaseModel, Field
from app.dependencies import require_connected from app.dependencies import require_connected
from app.models import Channel from app.models import Channel
from app.radio_sync import ensure_default_channels
from app.repository import ChannelRepository from app.repository import ChannelRepository
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -24,6 +25,8 @@ class CreateChannelRequest(BaseModel):
@router.get("", response_model=list[Channel]) @router.get("", response_model=list[Channel])
async def list_channels() -> list[Channel]: async def list_channels() -> list[Channel]:
"""List all channels from the database.""" """List all channels from the database."""
# Ensure Public channel always exists (self-healing)
await ensure_default_channels()
return await ChannelRepository.get_all() return await ChannelRepository.get_all()