From e197a17f15594676cee66d190f8731e49fb2ea70 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Tue, 10 Jan 2023 07:19:42 +0100 Subject: [PATCH] Fix user header on circle page --- client/src/pages/learningPath/CirclePage.vue | 39 ++++++++----------- client/src/stores/courseSessions.ts | 25 ++++++------ server/config/settings/base.py | 6 +-- .../course/migrations/0008_circledocument.py | 3 +- .../course/tests/test_document_uploads.py | 1 + server/vbv_lernwelt/course/views.py | 10 ++--- .../commands/delete_unreferenced_files.py | 4 +- server/vbv_lernwelt/files/services.py | 8 +++- 8 files changed, 49 insertions(+), 47 deletions(-) diff --git a/client/src/pages/learningPath/CirclePage.vue b/client/src/pages/learningPath/CirclePage.vue index dc301d1d..e9b6c67c 100644 --- a/client/src/pages/learningPath/CirclePage.vue +++ b/client/src/pages/learningPath/CirclePage.vue @@ -143,30 +143,25 @@ async function uploadDocument(data: DocumentUploadData) {
-
- + +
+
([]); - -function userExpertCircles( - userId: number, - courseSessionForRoute: CourseSession | undefined -): CircleExpert[] { - if (!courseSessionForRoute) { - return []; - } - return courseSessionForRoute.experts.filter((expert) => expert.user_id === userId); -} - async function loadAndUpdate() { courseSessions.value = await itGetCached(`/api/course/sessions/`, { reload: reload, @@ -50,6 +39,16 @@ function userExpertCircles( return { courseSessions }; } +function userExpertCircles( + userId: number, + courseSessionForRoute: CourseSession | undefined +): CircleExpert[] { + if (!courseSessionForRoute) { + return []; + } + return courseSessionForRoute.experts.filter((expert) => expert.user_id === userId); +} + export const useCourseSessionsStore = defineStore("courseSessions", () => { // using setup function seems cleaner, see https://pinia.vuejs.org/core-concepts/#setup-stores @@ -87,6 +86,7 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => { const userStore = useUserStore(); const circleStore = useCircleStore(); const expertCircles = userExpertCircles(userStore.id, courseSessionForRoute.value); + return ( expertCircles.filter( (c) => c.circle_translation_key === circleStore.circle?.translation_key @@ -124,7 +124,7 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => { file_type: "image/png", file_name: "test.png", }); - }; + } async function removeDocument(documentId: number) { await deleteCircleDocument(documentId); @@ -148,5 +148,4 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => { startUpload, removeDocument, }; - }); diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 49065d36..2dd3b40e 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -432,9 +432,9 @@ else: structlog.configure( processors=shared_processors - + [ - structlog.stdlib.ProcessorFormatter.wrap_for_formatter, - ], + + [ + structlog.stdlib.ProcessorFormatter.wrap_for_formatter, + ], context_class=dict, logger_factory=structlog.stdlib.LoggerFactory(), wrapper_class=structlog.stdlib.BoundLogger, diff --git a/server/vbv_lernwelt/course/migrations/0008_circledocument.py b/server/vbv_lernwelt/course/migrations/0008_circledocument.py index 21a0c355..ae48b055 100644 --- a/server/vbv_lernwelt/course/migrations/0008_circledocument.py +++ b/server/vbv_lernwelt/course/migrations/0008_circledocument.py @@ -36,7 +36,8 @@ class Migration(migrations.Migration): ( "file", models.OneToOneField( - on_delete=django.db.models.deletion.CASCADE, to="files.uploadfile" + on_delete=django.db.models.deletion.CASCADE, + to="files.uploadfile", ), ), ( diff --git a/server/vbv_lernwelt/course/tests/test_document_uploads.py b/server/vbv_lernwelt/course/tests/test_document_uploads.py index 4c55cbf9..86066d7b 100644 --- a/server/vbv_lernwelt/course/tests/test_document_uploads.py +++ b/server/vbv_lernwelt/course/tests/test_document_uploads.py @@ -185,6 +185,7 @@ class DocumentUploadApiTestCase(APITestCase): response = self.client.delete(f"/api/core/document/{document.id}/") self.assertEqual(response.status_code, 403) + # expert cannot upload in other course # expert cannot delete other upload # exper cannot change course diff --git a/server/vbv_lernwelt/course/views.py b/server/vbv_lernwelt/course/views.py index 137aa372..72626a01 100644 --- a/server/vbv_lernwelt/course/views.py +++ b/server/vbv_lernwelt/course/views.py @@ -148,11 +148,11 @@ def get_course_session_users(request, course_slug): data = { "cockpit_user": cockpit_user_csu[0].to_dict() - | { - "circles": cockpit_user_csu[0] - .expert.all() - .values("id", "title", "slug", "translation_key") - }, + | { + "circles": cockpit_user_csu[0] + .expert.all() + .values("id", "title", "slug", "translation_key") + }, "users": user_data, } diff --git a/server/vbv_lernwelt/files/management/commands/delete_unreferenced_files.py b/server/vbv_lernwelt/files/management/commands/delete_unreferenced_files.py index e968f9b2..1b09b68f 100644 --- a/server/vbv_lernwelt/files/management/commands/delete_unreferenced_files.py +++ b/server/vbv_lernwelt/files/management/commands/delete_unreferenced_files.py @@ -20,7 +20,9 @@ class Command(BaseCommand): num_deleted = 0 - unreferenced_uploads = UploadFile.objects.filter(upload_finished_at__isnull=True) + unreferenced_uploads = UploadFile.objects.filter( + upload_finished_at__isnull=True + ) if dry_run: print("------ DRY RUN -------") diff --git a/server/vbv_lernwelt/files/services.py b/server/vbv_lernwelt/files/services.py index bfdb8896..36b8ccac 100644 --- a/server/vbv_lernwelt/files/services.py +++ b/server/vbv_lernwelt/files/services.py @@ -79,7 +79,9 @@ class FileStandardUploadService: return obj @transaction.atomic - def update(self, file: UploadFile, file_name: str = "", file_type: str = "") -> UploadFile: + def update( + self, file: UploadFile, file_name: str = "", file_type: str = "" + ) -> UploadFile: _validate_file_size(self.file_obj) file_name, file_type = self._infer_file_name_and_type(file_name, file_type) @@ -111,7 +113,9 @@ class FileDirectUploadService: self.user = user @transaction.atomic - def start(self, file_name: str, file_type: str) -> Tuple[UploadFile, Dict[str, Any]]: + def start( + self, file_name: str, file_type: str + ) -> Tuple[UploadFile, Dict[str, Any]]: file = UploadFile( original_file_name=file_name, file_name=file_generate_name(file_name),