This commit is contained in:
Daniel Egger 2022-09-23 15:14:42 +02:00
parent 5425c1b22c
commit 79c0fb8b11
11 changed files with 48 additions and 51 deletions

View File

@ -16,7 +16,7 @@ def main():
)
response = client.get(
'http://localhost:8000/api/learnpath/page/unit-test-lernpfad/',
'http://localhost:8000/api/course/page/unit-test-lernpfad/',
)
print(response.status_code)
print(response.json())

View File

@ -19,7 +19,7 @@ export const useLearningPathStore = defineStore({
if (this.learningPath && !reload) {
return this.learningPath;
}
const learningPathData = await itGet(`/api/learnpath/page/${slug}/`);
const learningPathData = await itGet(`/api/course/page/${slug}/`);
const completionData = await itGet(`/api/completion/learning_path/${learningPathData.translation_key}/`);
if (!learningPathData) {

View File

@ -515,7 +515,7 @@ if "django_redis.cache.RedisCache" in env("IT_DJANGO_CACHE_BACKEND", default="")
},
}
CACHES["learning_path_cache"] = {
CACHES["api_page_cache"] = {
"BACKEND": "django.core.cache.backends.db.DatabaseCache",
"LOCATION": "django_cache_learning_path",
}

View File

@ -17,7 +17,7 @@ from vbv_lernwelt.core.views import (
rate_limit_exceeded_view,
permission_denied_view,
check_rate_limit, cypress_reset_view, vue_home, vue_login, me_user_view, vue_logout, generate_web_component_icons, )
from vbv_lernwelt.learnpath.views import page_api_view
from vbv_lernwelt.course.views import page_api_view
def raise_example_error(request):
@ -47,8 +47,8 @@ urlpatterns = [
# core
re_path(r"server/core/icons/$", generate_web_component_icons, name="generate_web_component_icons"),
# learnpath
path(r"api/learnpath/page/<slug:slug>/", page_api_view, name="page_api_view"),
# course
path(r"api/course/page/<slug:slug>/", page_api_view, name="page_api_view"),
# completion
path(r"api/completion/circle/<uuid:circle_key>/", request_circle_completion, name="request_circle_completion"),

View File

@ -4,3 +4,10 @@ from django.apps import AppConfig
class CourseConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'vbv_lernwelt.course'
def ready(self):
try:
# pylint: disable=unused-import,import-outside-toplevel
import vbv_lernwelt.course.signals # noqa F401
except ImportError:
pass

View File

@ -0,0 +1,16 @@
import structlog
from django.core.cache import caches
from django.db.models.signals import post_delete, post_save
from wagtail.models import Page
logger = structlog.get_logger(__name__)
def invalidate_api_page_cache(sender, **kwargs):
logger.debug('invalidate api_page_cache', label='api_page_cache')
caches['api_page_cache'].clear()
for subclass in Page.__subclasses__():
post_save.connect(invalidate_api_page_cache, subclass)
post_delete.connect(invalidate_api_page_cache, subclass)

View File

@ -1,3 +1,19 @@
from django.shortcuts import render
import structlog
from django.views.decorators.cache import cache_page
from rest_framework.decorators import api_view
from rest_framework.response import Response
from wagtail.models import Page
# Create your views here.
logger = structlog.get_logger(__name__)
@api_view(['GET'])
@cache_page(60 * 60 * 8, cache="api_page_cache")
def page_api_view(request, slug):
try:
page = Page.objects.get(slug=slug, locale__language_code='de-CH')
serializer = page.specific.get_serializer_class()(page.specific)
return Response(serializer.data)
except Exception as e:
logger.error(e)
return Response({"error": str(e)}, status=404)

View File

@ -1,16 +0,0 @@
import structlog
from django.core.cache import caches
from django.db.models.signals import post_delete, post_save
from wagtail.models import Page
logger = structlog.get_logger(__name__)
def invalidate_learning_path_cache(sender, **kwargs):
logger.debug('invalidate learning_path_cache', label='learning_path_cache')
caches['learning_path_cache'].clear()
for subclass in Page.__subclasses__():
post_save.connect(invalidate_learning_path_cache, subclass)
post_delete.connect(invalidate_learning_path_cache, subclass)

View File

@ -18,7 +18,7 @@ class TestRetrieveLearingPathContents(APITestCase):
def test_get_learnpathPage(self):
learning_path = LearningPath.objects.get(slug='unit-test-lernpfad')
response = self.client.get('/api/learnpath/page/unit-test-lernpfad/')
response = self.client.get('/api/course/page/unit-test-lernpfad/')
print(response)
self.assertEqual(response.status_code, 200)
data = response.json()

View File

@ -1,23 +0,0 @@
# Create your views here.
import structlog
from django.views.decorators.cache import cache_page
from rest_framework.decorators import api_view
from rest_framework.response import Response
from wagtail.models import Page
logger = structlog.get_logger(__name__)
@api_view(['GET'])
@cache_page(60 * 60 * 8, cache="learning_path_cache")
def page_api_view(request, slug):
try:
page = Page.objects.get(slug=slug, locale__language_code='de-CH')
serializer = page.specific.get_serializer_class()(page.specific)
return Response(serializer.data)
except Exception as e:
logger.error(e)
return Response({"error": str(e)}, status=404)

View File

@ -1,3 +0,0 @@
from django.shortcuts import render
# Create your views here.