Adapt api so it can fetch assignment page by id

This commit is contained in:
Daniel Egger 2023-04-05 16:19:37 +02:00
parent b0cc789549
commit 8f84ef7502
4 changed files with 56 additions and 3 deletions

View File

@ -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;
},
},
});

View File

@ -83,7 +83,7 @@ urlpatterns = [
path(r"api/course/sessions/", get_course_sessions, name="get_course_sessions"),
path(r"api/course/sessions/<course_slug>/users/", get_course_session_users,
name="get_course_session_users"),
path(r"api/course/page/<slug>/", course_page_api_view,
path(r"api/course/page/<slug_or_id>/", course_page_api_view,
name="course_page_api_view"),
path(r"api/course/completion/mark/", mark_course_completion_view,
name="mark_course_completion"),

View File

@ -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

View File

@ -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()