feat [both]: separate public and admin routes
This commit is contained in:
parent
0edfb4b336
commit
0d6b6d41e5
7 changed files with 35 additions and 13 deletions
|
@ -14,11 +14,11 @@ const id = route.params.id
|
||||||
|
|
||||||
const film = reactive<Film>({})
|
const film = reactive<Film>({})
|
||||||
|
|
||||||
Object.assign(film, (await apiGet(`films/${id}/`)).data.value)
|
Object.assign(film, (await apiGet(`admin/films/${id}/`)).data.value)
|
||||||
// TODO manage errors
|
// TODO manage errors
|
||||||
|
|
||||||
async function save(publish: boolean) {
|
async function save(publish: boolean) {
|
||||||
const { data } = await apiPatch(`films/${id}/`, {
|
const { data } = await apiPatch(`admin/films/${id}/`, {
|
||||||
...film,
|
...film,
|
||||||
isConfirmed: publish,
|
isConfirmed: publish,
|
||||||
})
|
})
|
||||||
|
|
|
@ -77,7 +77,7 @@ const id = route.params.id
|
||||||
|
|
||||||
const film = reactive<Film>({})
|
const film = reactive<Film>({})
|
||||||
|
|
||||||
Object.assign(film, (await apiGet(`films/${id}/`)).data.value)
|
Object.assign(film, (await apiGet(`admin/films/${id}/`)).data.value)
|
||||||
|
|
||||||
const tags = computed(() => {
|
const tags = computed(() => {
|
||||||
const base = [
|
const base = [
|
||||||
|
|
|
@ -24,5 +24,5 @@ definePageMeta({
|
||||||
|
|
||||||
const films = reactive<ShortFilm[]>([])
|
const films = reactive<ShortFilm[]>([])
|
||||||
|
|
||||||
Object.assign(films, (await apiGet("films/")).data.value)
|
Object.assign(films, (await apiGet("admin/films/")).data.value)
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -14,13 +14,13 @@ const film = reactive<Film>({})
|
||||||
const { $api } = useNuxtApp()
|
const { $api } = useNuxtApp()
|
||||||
|
|
||||||
async function post() {
|
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 ?
|
// TODO redirect to list ? to edit ?
|
||||||
}
|
}
|
||||||
|
|
||||||
async function publish() {
|
async function publish() {
|
||||||
// TODO validate ? let API do the job ?
|
// 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 ?
|
// TODO redirect to list ? to edit ?
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,16 +1,24 @@
|
||||||
<template>
|
<template>
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<h2 class="title">La semaine prochaine</h2>
|
<h2 class="title">La semaine prochaine</h2>
|
||||||
<MovieCardFull :film="nextFilm" />
|
<MovieCardFull :film="firstFilm" />
|
||||||
</section>
|
</section>
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<h2 class="title">Et après</h2>
|
<h2 class="title">Et après</h2>
|
||||||
|
<MovieCardFull
|
||||||
|
v-for="film of nextFilms"
|
||||||
|
:key="film.id"
|
||||||
|
:film="film"
|
||||||
|
class="block"
|
||||||
|
/>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Film } from "~/composables/types"
|
import { Film } from "~/composables/types"
|
||||||
|
|
||||||
const nextFilm = ref<Film>()
|
const films = ref<Film[]>()
|
||||||
nextFilm.value = (await apiGet(`films/1/`)).data.value
|
films.value = (await apiGet<Film[]>(`films/`)).data.value
|
||||||
|
const firstFilm = computed(() => films.value[0])
|
||||||
|
const nextFilms = computed(() => films.value.slice(1))
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
from django.urls import include, path
|
from django.urls import include, path
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from .views.std_views import FilmViewSet
|
from .views.std_views import AdminFilmViewSet, FilmViewSet
|
||||||
from .views.tmdb_views import TmdbViewSet
|
from .views.tmdb_views import TmdbViewSet
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
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")
|
router.register(r"tmdb", TmdbViewSet, "tmdb")
|
||||||
|
|
||||||
# Wire up our API using automatic URL routing.
|
# Wire up our API using automatic URL routing.
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
# from django.shortcuts import render
|
# from django.shortcuts import render
|
||||||
|
from datetime import datetime
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets, mixins
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.renderers import StaticHTMLRenderer
|
from rest_framework.renderers import StaticHTMLRenderer
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.viewsets import GenericViewSet
|
||||||
|
|
||||||
from myapi.renderers import LatexRenderer, PlainTextRenderer
|
from myapi.renderers import LatexRenderer, PlainTextRenderer
|
||||||
from myapi.serializers import FilmSerializer
|
from myapi.serializers import FilmSerializer
|
||||||
|
@ -12,7 +14,7 @@ from myapi.models import Film
|
||||||
import myapi.services.com_service as com
|
import myapi.services.com_service as com
|
||||||
|
|
||||||
|
|
||||||
class FilmViewSet(viewsets.ModelViewSet):
|
class AdminFilmViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Film.objects.all().order_by("projection_date")
|
queryset = Film.objects.all().order_by("projection_date")
|
||||||
serializer_class = FilmSerializer
|
serializer_class = FilmSerializer
|
||||||
|
|
||||||
|
@ -42,3 +44,14 @@ class FilmViewSet(viewsets.ModelViewSet):
|
||||||
@action(detail=True, methods=["GET"], renderer_classes=[PlainTextRenderer])
|
@action(detail=True, methods=["GET"], renderer_classes=[PlainTextRenderer])
|
||||||
def ics(self, request, pk=None):
|
def ics(self, request, pk=None):
|
||||||
return self.general_com_view(com.ics)
|
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())
|
||||||
|
|
Loading…
Reference in a new issue