diff --git a/backend/src/entities/content/attachment.entity.ts b/backend/src/entities/content/attachment.entity.ts index 80104f28..e85e3107 100644 --- a/backend/src/entities/content/attachment.entity.ts +++ b/backend/src/entities/content/attachment.entity.ts @@ -9,6 +9,7 @@ export class Attachment { @ManyToOne({ entity: () => LearningObject, primary: true, + deleteRule: 'cascade' }) learningObject!: LearningObject; diff --git a/backend/src/entities/content/learning-object.entity.ts b/backend/src/entities/content/learning-object.entity.ts index 59593c9a..335bd2b2 100644 --- a/backend/src/entities/content/learning-object.entity.ts +++ b/backend/src/entities/content/learning-object.entity.ts @@ -1,6 +1,5 @@ import { ArrayType, - Cascade, Collection, Embedded, Entity, @@ -93,8 +92,7 @@ export class LearningObject { @OneToMany({ entity: () => Attachment, - mappedBy: 'learningObject', - cascade: [Cascade.ALL] + mappedBy: 'learningObject' }) attachments: Collection = new Collection(this); diff --git a/backend/src/services/learning-objects/learning-object-service.ts b/backend/src/services/learning-objects/learning-object-service.ts index dca719f8..7f547bab 100644 --- a/backend/src/services/learning-objects/learning-object-service.ts +++ b/backend/src/services/learning-objects/learning-object-service.ts @@ -72,8 +72,6 @@ const learningObjectService = { learningObject.hruid = getEnvVar(envVars.UserContentPrefix) + learningObject.hruid; } - await learningObjectRepository.getEntityManager().flush(); - // Lookup the admin teachers based on their usernames and add them to the admins of the learning object. const teacherRepo = getTeacherRepository(); const adminTeachers = await Promise.all( @@ -85,7 +83,13 @@ const learningObjectService = { } }); - await learningObjectRepository.save(learningObject, {preventOverwrite: true}); + try { + await learningObjectRepository.save(learningObject, {preventOverwrite: true}); + } catch (e: unknown) { + learningObjectRepository.getEntityManager().clear(); + throw e; + } + return learningObject; }, diff --git a/frontend/src/components/ButtonWithConfirmation.vue b/frontend/src/components/ButtonWithConfirmation.vue new file mode 100644 index 00000000..e69de29b diff --git a/frontend/src/i18n/locale/en.json b/frontend/src/i18n/locale/en.json index d014cf39..77175d78 100644 --- a/frontend/src/i18n/locale/en.json +++ b/frontend/src/i18n/locale/en.json @@ -138,5 +138,6 @@ "open": "open", "editLearningPath": "Edit learning path", "newLearningPath": "Create a new learning path", - "saveChanges": "Save changes" + "saveChanges": "Save changes", + "newLearningObject": "Upload learning object" } diff --git a/frontend/src/views/own-learning-content/learning-objects/LearningObjectUploadButton.vue b/frontend/src/views/own-learning-content/learning-objects/LearningObjectUploadButton.vue index 4507401b..11e145bf 100644 --- a/frontend/src/views/own-learning-content/learning-objects/LearningObjectUploadButton.vue +++ b/frontend/src/views/own-learning-content/learning-objects/LearningObjectUploadButton.vue @@ -32,7 +32,13 @@