49 lines
1 KiB
Go
49 lines
1 KiB
Go
package platform
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"git.nakama.town/fmartingr/butterrobot/internal/model"
|
|
)
|
|
|
|
var (
|
|
// platforms holds all registered chat platforms
|
|
platforms = make(map[string]model.Platform)
|
|
|
|
// platformsMu protects the platforms map
|
|
platformsMu sync.RWMutex
|
|
)
|
|
|
|
// Register registers a platform with the given ID
|
|
func Register(id string, platform model.Platform) {
|
|
platformsMu.Lock()
|
|
defer platformsMu.Unlock()
|
|
platforms[id] = platform
|
|
}
|
|
|
|
// Get returns a platform by ID
|
|
func Get(id string) (model.Platform, error) {
|
|
platformsMu.RLock()
|
|
defer platformsMu.RUnlock()
|
|
|
|
platform, exists := platforms[id]
|
|
if !exists {
|
|
return nil, model.ErrPlatformNotFound
|
|
}
|
|
|
|
return platform, nil
|
|
}
|
|
|
|
// GetAvailablePlatforms returns all registered platforms
|
|
func GetAvailablePlatforms() map[string]model.Platform {
|
|
platformsMu.RLock()
|
|
defer platformsMu.RUnlock()
|
|
|
|
// Create a copy to avoid race conditions
|
|
result := make(map[string]model.Platform, len(platforms))
|
|
for id, platform := range platforms {
|
|
result[id] = platform
|
|
}
|
|
|
|
return result
|
|
}
|