diff --git a/catalog/api.py b/catalog/api.py index 7a281631..6f667e72 100644 --- a/catalog/api.py +++ b/catalog/api.py @@ -1,7 +1,9 @@ from enum import Enum from typing import Any, Callable, List, Optional, Tuple, Type +from django.core.cache import cache from django.http import HttpResponse +from django.utils import timezone from ninja import Schema from common.api import * @@ -38,6 +40,11 @@ class SearchableItemCategory(Enum): Performance = "performance" +class Gallery(Schema): + name: str + items: List[ItemSchema] + + @api.get( "/catalog/search", response={200: SearchResult, 400: Result}, @@ -96,6 +103,27 @@ def fetch_item(request, url: str): return 202, {"message": "Fetch in progress"} +@api.get( + "/catalog/gallery/", + response={200: list[Gallery]}, + summary="Trending items in catalog", + auth=None, + tags=["catalog"], +) +def trending_items(request): + """ + Returns a list of galleries, each gallery is a list of items + """ + gallery_list = cache.get("public_gallery", []) + + # rotate every 6 minutes + rot = timezone.now().minute // 6 + for gallery in gallery_list: + i = rot * len(gallery["items"]) // 10 + gallery["items"] = gallery["items"][i:] + gallery["items"][:i] + return 200, gallery_list + + def _get_item(cls, uuid, response): item = Item.get_by_url(uuid) if not item: diff --git a/catalog/jobs/discover.py b/catalog/jobs/discover.py index dc00bb07..9a18d603 100644 --- a/catalog/jobs/discover.py +++ b/catalog/jobs/discover.py @@ -117,7 +117,7 @@ class DiscoverGenerator(BaseJob): items = self.cleanup_shows(items) gallery_list.append( { - "name": "popular_" + category.value, + "name": "trending_" + category.value, "category": category, "items": items, } @@ -202,6 +202,7 @@ class DiscoverGenerator(BaseJob): cache.set("featured_collections", collection_ids, timeout=None) cache.set("popular_tags", list(tags), timeout=None) cache.set("popular_posts", list(post_ids), timeout=None) + cache.set("trends_statuses", list(post_ids), timeout=None) logger.info( f"Discover data updated, excluded: {len(excluding_identities)}, trends: {len(trends)}, collections: {len(collection_ids)}, tags: {len(tags)}, posts: {len(post_ids)}." ) diff --git a/catalog/views.py b/catalog/views.py index 17ef0caa..661fac17 100644 --- a/catalog/views.py +++ b/catalog/views.py @@ -1,6 +1,5 @@ from django.contrib.auth.decorators import login_required from django.core.cache import cache -from django.core.paginator import Paginator from django.db.models import Count from django.http import Http404 from django.shortcuts import get_object_or_404, redirect, render