Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions events/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from django.contrib.auth import get_user_model
from django.utils import timezone
from django.utils.text import slugify

from events.models import Event, EventPresenter, Playlist, Tag, VideoAsset

Expand All @@ -28,6 +29,7 @@ class Meta:

creator = factory.SubFactory(UserFactory)
title = factory.Faker("sentence", nb_words=4)
slug = factory.LazyAttribute(lambda obj: slugify(obj.title))
description = factory.Faker("paragraph")
event_time = factory.LazyFunction(lambda: timezone.now() + timezone.timedelta(days=30))
event_type = Event.EventType.SESSION
Expand Down
4 changes: 2 additions & 2 deletions events/tests/test_apis.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def test_list_events_with_and_without_videoasset(self, api_client):
def test_video_asset_detail(self, api_client):
""" Test retrieving a video asset detail """
video_asset = VideoAssetFactory()
response = api_client.get(reverse("video-asset-detail", args=[video_asset.event.id]))
response = api_client.get(reverse("video-asset-detail", args=[video_asset.event.slug]))
assert response.status_code == status.HTTP_200_OK
assert response.data["title"] == video_asset.title
assert response.data["status"] == VideoAsset.VideoStatus.READY
Expand Down Expand Up @@ -120,7 +120,7 @@ def test_event_recommendations(self, api_client):
unrelated_event.playlists.add(other_playlist)
unrelated_event.save()

response = api_client.get(reverse("recommendation", args=[event.id]))
response = api_client.get(reverse("recommendation", args=[event.slug]))
assert response.status_code == status.HTTP_200_OK

returned_ids = {e["id"] for e in response.data}
Expand Down
4 changes: 2 additions & 2 deletions events/v1/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

urlpatterns = [
path('all/', EventsListView.as_view(), name='events-list'),
path('videoasset/<int:pk>/', VideoAssetDetailView.as_view(), name='video-asset-detail'),
path('videoasset/<slug:event_slug>/', VideoAssetDetailView.as_view(), name='video-asset-detail'),
path('playlists/', PlaylistListView.as_view(), name='playlist-list'),
path('tags/', TagListView.as_view(), name='tag-list'),
path('recommendations/<event_id>/', EventRecommendationsView.as_view(), name='recommendation')
path('recommendations/<slug:event_slug>/', EventRecommendationsView.as_view(), name='recommendation')
]
4 changes: 2 additions & 2 deletions events/v1/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
from events.models import Event


def get_similar_events(event_id: int) -> list[Event]:
def get_similar_events(event_slug: str) -> list[Event]:
"""
Retrieve similar events based on playlists, presenters, and tags.
Excludes the current event and returns a maximum of 5 latest events.
"""
event = get_object_or_404(Event, id=event_id)
event = get_object_or_404(Event, slug=event_slug)
exclude_current = ~Q(id=event.id)
similarity_query = Q()

Expand Down
6 changes: 3 additions & 3 deletions events/v1/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class VideoAssetDetailView(RetrieveAPIView):
def get_object(self):
obj = get_object_or_404(
VideoAsset.objects.select_related('event__creator').prefetch_related('event__tags', 'event__playlists'),
event_id=self.kwargs["pk"]
event__slug=self.kwargs["event_slug"]
)
return obj

Expand All @@ -55,8 +55,8 @@ class PlaylistListView(ListAPIView):
class EventRecommendationsView(APIView):
""" View for listing similar events """

def get(self, request, event_id, *args, **kwargs):
def get(self, request, event_slug, *args, **kwargs):
""" Get similar events based on the same playlist, presenter or tags """
similar_events = get_similar_events(event_id)
similar_events = get_similar_events(event_slug)
serializer = EventSerializer(similar_events, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)