From 0d6b6d41e547ecf1eb920a5f2cc4a4345298682e Mon Sep 17 00:00:00 2001 From: _aandres Date: Thu, 14 Jul 2022 01:39:19 +0200 Subject: [PATCH] feat [both]: separate public and admin routes --- front/pages/admin/[id]/edition.vue | 4 ++-- front/pages/admin/[id]/index.vue | 2 +- front/pages/admin/index.vue | 2 +- front/pages/admin/nouveau.vue | 4 ++-- front/pages/index.vue | 14 +++++++++++--- server/myapi/urls.py | 5 +++-- server/myapi/views/std_views.py | 17 +++++++++++++++-- 7 files changed, 35 insertions(+), 13 deletions(-) diff --git a/front/pages/admin/[id]/edition.vue b/front/pages/admin/[id]/edition.vue index d64267d..1794fa1 100644 --- a/front/pages/admin/[id]/edition.vue +++ b/front/pages/admin/[id]/edition.vue @@ -14,11 +14,11 @@ const id = route.params.id const film = reactive({}) -Object.assign(film, (await apiGet(`films/${id}/`)).data.value) +Object.assign(film, (await apiGet(`admin/films/${id}/`)).data.value) // TODO manage errors async function save(publish: boolean) { - const { data } = await apiPatch(`films/${id}/`, { + const { data } = await apiPatch(`admin/films/${id}/`, { ...film, isConfirmed: publish, }) diff --git a/front/pages/admin/[id]/index.vue b/front/pages/admin/[id]/index.vue index 7763c7e..3e3db20 100644 --- a/front/pages/admin/[id]/index.vue +++ b/front/pages/admin/[id]/index.vue @@ -77,7 +77,7 @@ const id = route.params.id const film = reactive({}) -Object.assign(film, (await apiGet(`films/${id}/`)).data.value) +Object.assign(film, (await apiGet(`admin/films/${id}/`)).data.value) const tags = computed(() => { const base = [ diff --git a/front/pages/admin/index.vue b/front/pages/admin/index.vue index 45e9d7f..f336039 100644 --- a/front/pages/admin/index.vue +++ b/front/pages/admin/index.vue @@ -24,5 +24,5 @@ definePageMeta({ const films = reactive([]) -Object.assign(films, (await apiGet("films/")).data.value) +Object.assign(films, (await apiGet("admin/films/")).data.value) diff --git a/front/pages/admin/nouveau.vue b/front/pages/admin/nouveau.vue index e095654..b5e7c03 100644 --- a/front/pages/admin/nouveau.vue +++ b/front/pages/admin/nouveau.vue @@ -14,13 +14,13 @@ const film = reactive({}) const { $api } = useNuxtApp() async function post() { - return await $api.post("films/", { ...film, isConfirmed: true }) + return await $api.post("admin/films/", { ...film, isConfirmed: true }) // TODO redirect to list ? to edit ? } async function publish() { // TODO validate ? let API do the job ? - return await $api.post("films/", { ...film, isConfirmed: false }) + return await $api.post("admin/films/", { ...film, isConfirmed: false }) // TODO redirect to list ? to edit ? } diff --git a/front/pages/index.vue b/front/pages/index.vue index e8f85ea..206905f 100644 --- a/front/pages/index.vue +++ b/front/pages/index.vue @@ -1,16 +1,24 @@ diff --git a/server/myapi/urls.py b/server/myapi/urls.py index 16af695..8a8623d 100644 --- a/server/myapi/urls.py +++ b/server/myapi/urls.py @@ -1,10 +1,11 @@ from django.urls import include, path from rest_framework import routers -from .views.std_views import FilmViewSet +from .views.std_views import AdminFilmViewSet, FilmViewSet from .views.tmdb_views import TmdbViewSet router = routers.DefaultRouter() -router.register(r"films", FilmViewSet) +router.register(r"admin/films", AdminFilmViewSet, "admin-films") +router.register(r"films", FilmViewSet, "films") router.register(r"tmdb", TmdbViewSet, "tmdb") # Wire up our API using automatic URL routing. diff --git a/server/myapi/views/std_views.py b/server/myapi/views/std_views.py index 6f1e59f..df33545 100644 --- a/server/myapi/views/std_views.py +++ b/server/myapi/views/std_views.py @@ -1,10 +1,12 @@ # from django.shortcuts import render +from datetime import datetime from typing import Callable -from rest_framework import viewsets +from rest_framework import viewsets, mixins from rest_framework.decorators import action from rest_framework.renderers import StaticHTMLRenderer from rest_framework.response import Response +from rest_framework.viewsets import GenericViewSet from myapi.renderers import LatexRenderer, PlainTextRenderer from myapi.serializers import FilmSerializer @@ -12,7 +14,7 @@ from myapi.models import Film import myapi.services.com_service as com -class FilmViewSet(viewsets.ModelViewSet): +class AdminFilmViewSet(viewsets.ModelViewSet): queryset = Film.objects.all().order_by("projection_date") serializer_class = FilmSerializer @@ -42,3 +44,14 @@ class FilmViewSet(viewsets.ModelViewSet): @action(detail=True, methods=["GET"], renderer_classes=[PlainTextRenderer]) def ics(self, request, pk=None): return self.general_com_view(com.ics) + + +class FilmViewSet(mixins.RetrieveModelMixin, mixins.ListModelMixin, GenericViewSet): + serializer_class = FilmSerializer + + def get_queryset(self): + queryset = Film.objects.all().filter(is_confirmed=True).order_by("projection_date") + past = self.request.query_params.get("past", False) + if past: + return queryset.filter(projection_date__date__lt=datetime.now()) + return queryset.filter(projection_date__date__gte=datetime.now())