diff --git a/avni-server-api/src/main/java/org/avni/server/dao/metabase/GroupPermissionsRepository.java b/avni-server-api/src/main/java/org/avni/server/dao/metabase/GroupPermissionsRepository.java index f14521862..81ffa80e3 100644 --- a/avni-server-api/src/main/java/org/avni/server/dao/metabase/GroupPermissionsRepository.java +++ b/avni-server-api/src/main/java/org/avni/server/dao/metabase/GroupPermissionsRepository.java @@ -29,7 +29,7 @@ public GroupPermissionsGraphResponse getPermissionsGraph() { return getForObject(url, GroupPermissionsGraphResponse.class); } - public void updatePermissionsGraph(GroupPermissionsService permissions, int groupId, int databaseId) { + public void updatePermissionsGraph(GroupPermissionsService permissions) { String url = metabaseApiUrl + "/permissions/graph"; Map requestBody = permissions.getUpdatedPermissionsGraph(); sendPutRequest(url, requestBody); @@ -40,4 +40,25 @@ public List getAllGroups() { GroupPermissionResponse[] response = getForObject(url, GroupPermissionResponse[].class); return Arrays.asList(response); } + + public void updateGroupPermissions(int groupId, int databaseId) { + GroupPermissionsService groupPermissions = new GroupPermissionsService(getPermissionsGraph()); + groupPermissions.updatePermissions(groupId, databaseId); + updatePermissionsGraph(groupPermissions); + } + + + public Group findOrCreateGroup(String name, int databaseId, int collectionId) { + List existingGroups = getAllGroups(); + + for (GroupPermissionResponse group : existingGroups) { + if (group.getName().equals(name)) { + return new Group(group.getName(), group.getId()); + } + } + + Group newGroup = save(new Group(name)); + updateGroupPermissions(newGroup.getId(), databaseId); + return newGroup; + } } diff --git a/avni-server-api/src/main/java/org/avni/server/domain/metabase/CollectionPermissionsService.java b/avni-server-api/src/main/java/org/avni/server/domain/metabase/CollectionPermissionsService.java index 941f7bfa7..7213545bb 100644 --- a/avni-server-api/src/main/java/org/avni/server/domain/metabase/CollectionPermissionsService.java +++ b/avni-server-api/src/main/java/org/avni/server/domain/metabase/CollectionPermissionsService.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Map; +import org.avni.server.dao.metabase.CollectionPermissionsRepository; import org.springframework.stereotype.Component; @Component @@ -55,4 +56,9 @@ public Map getUpdatedPermissionsGraph() { public CollectionPermissionsGraphResponse getPermissionsGraph() { return permissionsGraph; } + + public void updateAndSavePermissions(CollectionPermissionsRepository collectionPermissionsRepository, int groupId, int collectionId) { + updatePermissions(groupId, collectionId); + collectionPermissionsRepository.updateCollectionPermissions(this, groupId, collectionId); + } } diff --git a/avni-server-api/src/main/java/org/avni/server/service/metabase/MetabaseService.java b/avni-server-api/src/main/java/org/avni/server/service/metabase/MetabaseService.java index 129fa2125..8d2ad289e 100644 --- a/avni-server-api/src/main/java/org/avni/server/service/metabase/MetabaseService.java +++ b/avni-server-api/src/main/java/org/avni/server/service/metabase/MetabaseService.java @@ -10,9 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; - - @Service public class MetabaseService { @@ -57,15 +54,12 @@ public void setupMetabase() { globalCollection = new CollectionInfoResponse(null, metabaseCollection.getId(), false); } - Group metabaseGroup = findOrCreateGroup(name); + Group metabaseGroup = groupPermissionsRepository.findOrCreateGroup(name, globalDatabase.getId(), globalCollection.getIdAsInt()); - GroupPermissionsService groupPermissions = new GroupPermissionsService(groupPermissionsRepository.getPermissionsGraph()); - groupPermissions.updatePermissions(metabaseGroup.getId(), globalDatabase.getId()); - groupPermissionsRepository.updatePermissionsGraph(groupPermissions, metabaseGroup.getId(), globalDatabase.getId()); - - CollectionPermissionsService collectionPermissions = new CollectionPermissionsService(collectionPermissionsRepository.getCollectionPermissionsGraph()); - collectionPermissions.updatePermissions(metabaseGroup.getId(), globalCollection.getIdAsInt()); - collectionPermissionsRepository.updateCollectionPermissions(collectionPermissions, metabaseGroup.getId(), globalCollection.getIdAsInt()); + CollectionPermissionsService collectionPermissions = new CollectionPermissionsService( + collectionPermissionsRepository.getCollectionPermissionsGraph() + ); + collectionPermissions.updateAndSavePermissions(collectionPermissionsRepository, metabaseGroup.getId(), globalCollection.getIdAsInt()); } public Database getGlobalDatabase() { @@ -91,14 +85,4 @@ public CollectionInfoResponse getGlobalCollection() { return globalCollection; } - private Group findOrCreateGroup(String name) { - List existingGroups = groupPermissionsRepository.getAllGroups(); - for (GroupPermissionResponse group : existingGroups) { - if (group.getName().equals(name)) { - return new Group( group.getName(),group.getId()); - } - } - return groupPermissionsRepository.save(new Group(name)); - } - } \ No newline at end of file diff --git a/hs_err_pid11369.log b/hs_err_pid11369.log new file mode 100644 index 000000000..be0b499cb --- /dev/null +++ b/hs_err_pid11369.log @@ -0,0 +1,14 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x0000000103ea9627, pid=11369, tid=0x0000000000001303 +# +# JRE version: OpenJDK Runtime Environment (8.0_402) (build 1.8.0_402-bre_2024_03_05_05_38-b00) +# Java VM: OpenJDK 64-Bit Server VM (25.402-b00 mixed mode bsd-amd64 compressed oops) +# Problematic frame: +# V [libjvm.dylib+0x442627] ObjectMonitor::EnterI(Thread*)+0x269 +# +# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again +# +# If you would like to submit a bug report, please visit: +# https://github.com/Homebrew/homebrew-core/issues \ No newline at end of file