backseat-music/backseat/data/data.go
2025-07-22 20:35:12 +01:00

59 lines
1.1 KiB
Go

package data
import (
"crawshaw.dev/jsonfile"
"errors"
"fmt"
"golang.org/x/oauth2"
"os"
)
type data struct {
SpotifyOauthToken *oauth2.Token
}
type Store struct {
driver *jsonfile.JSONFile[data]
}
func NewStore(filename string) (*Store, error) {
s := new(Store)
if err := s.Open(filename); err != nil {
return nil, fmt.Errorf("open JSON file: %w", err)
}
return s, nil
}
func (s *Store) Open(filename string) error {
var err error
s.driver, err = jsonfile.Load[data](filename)
if errors.Is(err, os.ErrNotExist) {
s.driver, err = jsonfile.New[data](filename)
}
if err != nil {
return fmt.Errorf("open data store: %w", err)
}
return nil
}
func (s *Store) HasSpotifyOAuthToken() bool {
return s.GetSpotifyOAuthToken() != nil
}
func (s *Store) GetSpotifyOAuthToken() *oauth2.Token {
var tok *oauth2.Token
s.driver.Read(func(data *data) {
tok = data.SpotifyOauthToken
})
return tok
}
func (s *Store) SetSpotifyOAuthToken(tok *oauth2.Token) error {
if err := s.driver.Write(func(d *data) error {
d.SpotifyOauthToken = tok
return nil
}); err != nil {
return fmt.Errorf("save spotify OAuth token: %w", err)
}
return nil
}