from typing import Optional from django.contrib.auth import get_user_model from queues.models import Queue, Playlist from django.conf import settings User = get_user_model() def get_user_or_default_queue(request) -> Queue: """Get the user or default queue from a request.""" if request.user is None: return get_default_queue() else: return get_queue_for_user(request.user) def get_queue_for_user(user: User) -> Optional[Queue]: """Get the queue for a User.""" if user.queue is None: return None else: return user.queue.queue def get_default_queue() -> Queue: """Get the default queue.""" try: return Queue.objects.get(pk=settings.DEFAULT_QUEUE) except Queue.DoesNotExist: return get_first_queue() def get_first_queue() -> Queue: """Get the first Queue object or create one.""" queue = Queue.objects.first() if queue is not None: return queue playlist = Playlist.objects.create() random_playlist = Playlist.objects.create() return Queue.objects.create(name="Queue", playlist=playlist, random_playlist=random_playlist)