diff --git a/client/src/stores/assignments.ts b/client/src/stores/assignments.ts new file mode 100644 index 00000000..681fc6a2 --- /dev/null +++ b/client/src/stores/assignments.ts @@ -0,0 +1,41 @@ +import { itGet } from "@/fetchHelpers"; +import type { MediaLibraryPage } from "@/types"; +import log from "loglevel"; +import { defineStore } from "pinia"; + +export type MediaLibraryStoreState = { + mediaLibraryPage: MediaLibraryPage | undefined; + selectedLearningPath: { id: number; name: string }; + availableLearningPaths: { id: number; name: string }[]; +}; + +export const useMediaLibraryStore = defineStore({ + id: "mediaLibrary", + state: () => { + return { + mediaLibraryPage: undefined, + selectedLearningPath: { id: 1, name: "Alle Lehrgänge" }, + availableLearningPaths: [ + { id: 1, name: "Alle Lehrgänge" }, + { id: 2, name: "Versicherungsvermittler/-in" }, + ], + } as MediaLibraryStoreState; + }, + getters: {}, + actions: { + async loadMediaLibraryPage(slug: string, reload = false) { + if (this.mediaLibraryPage && !reload) { + return this.mediaLibraryPage; + } + log.debug("load mediaLibraryPageData"); + const mediaLibraryPageData = await itGet(`/api/course/page/${slug}/`); + + if (!mediaLibraryPageData) { + throw `No mediaLibraryPageData found with: ${slug}`; + } + + this.mediaLibraryPage = mediaLibraryPageData; + return this.mediaLibraryPage; + }, + }, +}); diff --git a/server/config/urls.py b/server/config/urls.py index ab0e1b94..b8f535b0 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -83,7 +83,7 @@ urlpatterns = [ path(r"api/course/sessions/", get_course_sessions, name="get_course_sessions"), path(r"api/course/sessions//users/", get_course_session_users, name="get_course_session_users"), - path(r"api/course/page//", course_page_api_view, + path(r"api/course/page//", course_page_api_view, name="course_page_api_view"), path(r"api/course/completion/mark/", mark_course_completion_view, name="mark_course_completion"), diff --git a/server/vbv_lernwelt/assignment/models.py b/server/vbv_lernwelt/assignment/models.py index c7366719..215ff9b9 100644 --- a/server/vbv_lernwelt/assignment/models.py +++ b/server/vbv_lernwelt/assignment/models.py @@ -74,6 +74,15 @@ class TaskBlock(blocks.StructBlock): class Assignment(CourseBasePage): + serialize_field_names = [ + "starting_position", + "effort_required", + "performance_objectives", + "assessment_description", + "assessment_document_url", + "tasks", + ] + starting_position = models.TextField(help_text="Erläuterung der Ausgangslage") effort_required = models.CharField( max_length=100, help_text="Zeitaufwand als Text", blank=True diff --git a/server/vbv_lernwelt/course/views.py b/server/vbv_lernwelt/course/views.py index bdb0a7f2..105fdecb 100644 --- a/server/vbv_lernwelt/course/views.py +++ b/server/vbv_lernwelt/course/views.py @@ -33,9 +33,12 @@ logger = structlog.get_logger(__name__) @api_view(["GET"]) -def course_page_api_view(request, slug): +def course_page_api_view(request, slug_or_id): try: - page = Page.objects.get(slug=slug, locale__language_code="de-CH") + if slug_or_id.isdigit(): + page = Page.objects.get(id=slug_or_id) + else: + page = Page.objects.get(slug=slug_or_id, locale__language_code="de-CH") if not has_course_access_by_page_request(request, page): raise PermissionDenied()