admin-dashboard-backend/modules/cache/categorygroup.go

60 lines
1.3 KiB
Go

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
}