Fixed creation of users + better frontend handling of permissions
This commit is contained in:
42
backend/utils/get_diff.go
Normal file
42
backend/utils/get_diff.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"log"
|
||||
)
|
||||
|
||||
// GetDiff returns two slices: elements to add and elements to remove
|
||||
func GetDiff[T comparable](current, newm []T) ([]T, []T) {
|
||||
log.Println(current, newm)
|
||||
// Use a single map with an int to track state:
|
||||
// 1: only in current, 2: only in new, 3: in both
|
||||
presence := make(map[T]int)
|
||||
|
||||
// Mark all items in current as 1
|
||||
for _, item := range current {
|
||||
presence[item] = 1
|
||||
}
|
||||
|
||||
// Update map based on newm: add 2 if not present, set to 3 if present
|
||||
for _, item := range newm {
|
||||
if val, exists := presence[item]; exists {
|
||||
presence[item] = val + 2 // 1 -> 3 (both)
|
||||
} else {
|
||||
presence[item] = 2 // only in new
|
||||
}
|
||||
}
|
||||
|
||||
var toAdd, toRemove []T
|
||||
|
||||
// Iterate once over the map to build results
|
||||
for item, state := range presence {
|
||||
switch state {
|
||||
case 1: // Only in current -> remove
|
||||
toRemove = append(toRemove, item)
|
||||
case 2: // Only in new -> add
|
||||
toAdd = append(toAdd, item)
|
||||
// case 3: in both, do nothing
|
||||
}
|
||||
}
|
||||
|
||||
return toAdd, toRemove
|
||||
}
|
||||
Reference in New Issue
Block a user