package cache import ( "janex/admin-dashboard-backend/modules/structs" "sort" "sync" ) var categoryGroups []structs.CategoryGroup var cgMu sync.RWMutex func AddCategoryGroup(group structs.Group) { cgMu.Lock() defer cgMu.Unlock() for index, categoryGroup := range categoryGroups { if categoryGroup.Category == group.Category { categoryGroups[index].Groups = append(categoryGroups[index].Groups, group) return } } categoryGroup := structs.CategoryGroup{ Category: group.Category, } categoryGroup.Groups = append(categoryGroup.Groups, group) categoryGroups = append(categoryGroups, categoryGroup) } func RemoveAllCategoryGroupsByCategory(category string) { for index, categoryGroup := range GetCategoryGroups() { if categoryGroup.Category == category { cgMu.Lock() defer cgMu.Unlock() categoryGroups = append(categoryGroups[:index], categoryGroups[index+1:]...) } } } func GetCategoryGroupsSorted() []structs.CategoryGroup { categoryGroups := GetCategoryGroups() cgMu.Lock() defer cgMu.Unlock() sort.SliceStable(categoryGroups, func(i, j int) bool { return categoryGroups[i].Category < categoryGroups[j].Category }) return categoryGroups } func GetCategoryGroups() []structs.CategoryGroup { cgMu.RLock() defer cgMu.RUnlock() return categoryGroups }