Refactor
This commit is contained in:
parent
5425c1b22c
commit
79c0fb8b11
|
|
@ -16,7 +16,7 @@ def main():
|
||||||
)
|
)
|
||||||
|
|
||||||
response = client.get(
|
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.status_code)
|
||||||
print(response.json())
|
print(response.json())
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ export const useLearningPathStore = defineStore({
|
||||||
if (this.learningPath && !reload) {
|
if (this.learningPath && !reload) {
|
||||||
return this.learningPath;
|
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}/`);
|
const completionData = await itGet(`/api/completion/learning_path/${learningPathData.translation_key}/`);
|
||||||
|
|
||||||
if (!learningPathData) {
|
if (!learningPathData) {
|
||||||
|
|
|
||||||
|
|
@ -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",
|
"BACKEND": "django.core.cache.backends.db.DatabaseCache",
|
||||||
"LOCATION": "django_cache_learning_path",
|
"LOCATION": "django_cache_learning_path",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ from vbv_lernwelt.core.views import (
|
||||||
rate_limit_exceeded_view,
|
rate_limit_exceeded_view,
|
||||||
permission_denied_view,
|
permission_denied_view,
|
||||||
check_rate_limit, cypress_reset_view, vue_home, vue_login, me_user_view, vue_logout, generate_web_component_icons, )
|
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):
|
def raise_example_error(request):
|
||||||
|
|
@ -47,8 +47,8 @@ urlpatterns = [
|
||||||
# core
|
# core
|
||||||
re_path(r"server/core/icons/$", generate_web_component_icons, name="generate_web_component_icons"),
|
re_path(r"server/core/icons/$", generate_web_component_icons, name="generate_web_component_icons"),
|
||||||
|
|
||||||
# learnpath
|
# course
|
||||||
path(r"api/learnpath/page/<slug:slug>/", page_api_view, name="page_api_view"),
|
path(r"api/course/page/<slug:slug>/", page_api_view, name="page_api_view"),
|
||||||
|
|
||||||
# completion
|
# completion
|
||||||
path(r"api/completion/circle/<uuid:circle_key>/", request_circle_completion, name="request_circle_completion"),
|
path(r"api/completion/circle/<uuid:circle_key>/", request_circle_completion, name="request_circle_completion"),
|
||||||
|
|
|
||||||
|
|
@ -4,3 +4,10 @@ from django.apps import AppConfig
|
||||||
class CourseConfig(AppConfig):
|
class CourseConfig(AppConfig):
|
||||||
default_auto_field = 'django.db.models.BigAutoField'
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
name = 'vbv_lernwelt.course'
|
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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
|
|
@ -18,7 +18,7 @@ class TestRetrieveLearingPathContents(APITestCase):
|
||||||
|
|
||||||
def test_get_learnpathPage(self):
|
def test_get_learnpathPage(self):
|
||||||
learning_path = LearningPath.objects.get(slug='unit-test-lernpfad')
|
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)
|
print(response)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
data = response.json()
|
data = response.json()
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
from django.shortcuts import render
|
|
||||||
|
|
||||||
# Create your views here.
|
|
||||||
Loading…
Reference in New Issue