fafda/internal/github/releasemanager.go
2024-12-19 01:41:46 +05:30

55 lines
1.2 KiB
Go

package github
import (
"fmt"
"sync"
"fafda/config"
)
type ReleaseManager struct {
releases []config.GitHubRelease
userTokens map[string]string
currentToken int
currentRel int
currentPair int
mu sync.Mutex
}
func NewReleaseManager(cfg config.GitHub) (*ReleaseManager, error) {
rm := &ReleaseManager{
userTokens: map[string]string{},
releases: make([]config.GitHubRelease, 0),
currentToken: -1,
currentRel: -1,
currentPair: -1,
}
for _, release := range cfg.Releases {
if release.AuthToken == "" {
return nil, fmt.Errorf("auth token missing for release %d", release.ReleaseId)
}
rm.userTokens[release.Username] = release.AuthToken
if !release.ReadOnly {
rm.releases = append(rm.releases, release)
}
}
if len(rm.releases) == 0 {
return nil, fmt.Errorf("no valid writable release found in config")
}
return rm, nil
}
func (rm *ReleaseManager) GetNextRelease() config.GitHubRelease {
rm.mu.Lock()
defer rm.mu.Unlock()
rm.currentPair = (rm.currentPair + 1) % len(rm.releases)
return rm.releases[rm.currentPair]
}
func (rm *ReleaseManager) GetUserToken(user string) string {
return rm.userTokens[user]
}