From 97afa16b46fa97ebdae3e86a6c5496b54d36617a Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Fri, 24 Feb 2023 20:04:38 +0100 Subject: [PATCH] Simplifed DB table structure --- ccm-cms/package-lock.json | 4 +-- ccm-cms/package.json | 2 +- .../contentsection/ContentSection.java | 23 ++++++++++++++++ .../org/librecms/contentsection/Folder.java | 27 +++++++++++-------- .../contentsection/FolderImExporter.java | 1 - ..._simplify_content_section_folder_assoc.sql | 16 +++++++++++ ..._simplify_content_section_folder_assoc.sql | 16 +++++++++++ 7 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_39__simplify_content_section_folder_assoc.sql create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_39__simplify_content_section_folder_assoc.sql diff --git a/ccm-cms/package-lock.json b/ccm-cms/package-lock.json index 030e71daf..b9ef9f73f 100644 --- a/ccm-cms/package-lock.json +++ b/ccm-cms/package-lock.json @@ -1,12 +1,12 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2023-02-22T184921", + "version": "7.0.0-SNAPSHOT.2023-02-23T193303", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2023-02-22T184921", + "version": "7.0.0-SNAPSHOT.2023-02-23T193303", "license": "LGPL-3.0-or-later", "dependencies": { "@tiptap/core": "^2.0.0-beta.127", diff --git a/ccm-cms/package.json b/ccm-cms/package.json index ded9446b4..e91da3956 100644 --- a/ccm-cms/package.json +++ b/ccm-cms/package.json @@ -1,6 +1,6 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2023-02-22T184921", + "version": "7.0.0-SNAPSHOT.2023-02-23T193303", "description": "JavaScript stuff for ccm-cms", "main": "target/generated-resources/assets/@content-sections/cms-admin.js", "types": "target/generated-resources/assets/@content-sections/cms-admin.d.ts", diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java index 6b94e0d51..bea992bf8 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java @@ -51,6 +51,9 @@ import org.librecms.contentsection.privileges.ItemPrivileges; import org.librecms.contentsection.privileges.TypePrivileges; import org.librecms.lifecycle.LifecycleDefinition; +import java.util.HashSet; +import java.util.Set; + import javax.persistence.OrderBy; import static org.librecms.CmsConstants.*; @@ -168,6 +171,10 @@ public class ContentSection @JsonIdentityReference(alwaysAsId = true) private Folder rootAssetsFolder; + @OneToMany(mappedBy = "section", orphanRemoval = true) + @JsonIdentityReference(alwaysAsId = true) + private Set folders; + @ManyToMany @JoinTable(name = "CONTENT_SECTION_ROLES", schema = DB_SCHEMA, @@ -239,6 +246,22 @@ public class ContentSection return rootAssetsFolder; } + protected Set getFolders() { + return Collections.unmodifiableSet(folders); + } + + protected void addFolder(final Folder folder) { + folders.add(folder); + } + + protected void removeFolder(final Folder folder) { + folders.remove(folder); + } + + protected void setFolders(final Set folders) { + this.folders = new HashSet<>(folders); + } + protected void setRootAssetsFolder(final Folder rootAssetsFolder) { this.rootAssetsFolder = rootAssetsFolder; } diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java b/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java index 714ab802b..c87b5505f 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java @@ -20,6 +20,7 @@ package org.librecms.contentsection; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.ObjectIdGenerators; import org.libreccm.categorization.Categorization; @@ -43,6 +44,7 @@ import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.JoinTable; +import javax.persistence.ManyToOne; import javax.persistence.NamedNativeQueries; import javax.persistence.NamedNativeQuery; import javax.persistence.NamedQueries; @@ -317,17 +319,20 @@ public class Folder extends Category implements Serializable { private static final long serialVersionUID = 1L; - @OneToOne(fetch = FetchType.LAZY) - @JoinTable( - name = "FOLDER_CONTENT_SECTION_MAP", schema = DB_SCHEMA, - inverseJoinColumns = { - @JoinColumn(name = "CONTENT_SECTION_ID") - }, - joinColumns = { - @JoinColumn(name = "FOLDER_ID") - } - ) - @JsonIdentityReference(alwaysAsId = true) +// @OneToOne(fetch = FetchType.LAZY) +// @JoinTable( +// name = "FOLDER_CONTENT_SECTION_MAP", schema = DB_SCHEMA, +// inverseJoinColumns = { +// @JoinColumn(name = "CONTENT_SECTION_ID") +// }, +// joinColumns = { +// @JoinColumn(name = "FOLDER_ID") +// } +// ) +// @JsonIdentityReference(alwaysAsId = true) + @ManyToOne + @JoinColumn(name = "content_section_id") + @JsonIgnore private ContentSection section; @Column(name = "TYPE", nullable = false) diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java index 7725b6217..203b1d79b 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java @@ -55,7 +55,6 @@ public class FolderImExporter extends AbstractEntityImExporter { protected void init() { addRequiredEntities( Set.of( - ContentSection.class, Category.class, Domain.class ) diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_39__simplify_content_section_folder_assoc.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_39__simplify_content_section_folder_assoc.sql new file mode 100644 index 000000000..8e62cbd9f --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_39__simplify_content_section_folder_assoc.sql @@ -0,0 +1,16 @@ +alter table ccm_cms.folders add column content_section_id int8; + +update ccm_cms.folders + set content_section_id = ( + select content_section_id + from ccm_cms.folder_content_section_map + where ccm_cms.folder_content_section_map.folder_id = ccm_cms.folders.object_id + ); + +alter table CCM_CMS.FOLDERS + add constraint FKpl9im9yrxktlhyq2fx39xoowp + foreign key (content_section_id) + references CCM_CMS.CONTENT_SECTIONS; + + +drop table ccm_cms.folder_content_section_map; \ No newline at end of file diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_39__simplify_content_section_folder_assoc.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_39__simplify_content_section_folder_assoc.sql new file mode 100644 index 000000000..331cfaa75 --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_39__simplify_content_section_folder_assoc.sql @@ -0,0 +1,16 @@ +alter table ccm_cms.folders add column content_section_id bigint; + +update ccm_cms.folders + set content_section_id = ( + select content_section_id + from ccm_cms.folder_content_section_map + where ccm_cms.folder_content_section_map.folder_id = ccm_cms.folders.object_id + ); + +alter table CCM_CMS.FOLDERS + add constraint FKpl9im9yrxktlhyq2fx39xoowp + foreign key (content_section_id) + references CCM_CMS.CONTENT_SECTIONS; + + +drop table ccm_cms.folder_content_section_map; \ No newline at end of file