feat: version v0.0.2

This commit is contained in:
Gabe Farrell 2025-06-14 19:14:30 -04:00
parent 0dceaf017a
commit 7ff317756f
36 changed files with 336 additions and 160 deletions

View file

@ -268,7 +268,7 @@ func TestMain(m *testing.M) {
log.Fatalf("Could not start resource: %s", err)
}
err = cfg.Load(getTestGetenv(resource))
err = cfg.Load(getTestGetenv(resource), "test")
if err != nil {
log.Fatalf("Could not load cfg: %s", err)
}

View file

@ -36,6 +36,7 @@ const (
DISABLE_MUSICBRAINZ_ENV = "KOITO_DISABLE_MUSICBRAINZ"
SKIP_IMPORT_ENV = "KOITO_SKIP_IMPORT"
ALLOWED_HOSTS_ENV = "KOITO_ALLOWED_HOSTS"
CORS_ORIGINS_ENV = "KOITO_CORS_ALLOWED_ORIGINS"
DISABLE_RATE_LIMIT_ENV = "KOITO_DISABLE_RATE_LIMIT"
THROTTLE_IMPORTS_MS = "KOITO_THROTTLE_IMPORTS_MS"
IMPORT_BEFORE_UNIX_ENV = "KOITO_IMPORT_BEFORE_UNIX"
@ -64,6 +65,7 @@ type config struct {
skipImport bool
allowedHosts []string
allowAllHosts bool
allowedOrigins []string
disableRateLimit bool
importThrottleMs int
userAgent string
@ -78,21 +80,18 @@ var (
)
// Initialize initializes the global configuration using the provided getenv function.
func Load(getenv func(string) string) error {
func Load(getenv func(string) string, version string) error {
var err error
once.Do(func() {
globalConfig, err = loadConfig(getenv)
globalConfig, err = loadConfig(getenv, version)
})
return err
}
// loadConfig loads the configuration from environment variables.
func loadConfig(getenv func(string) string) (*config, error) {
func loadConfig(getenv func(string) string, version string) (*config, error) {
cfg := new(config)
// cfg.baseUrl = getenv(BASE_URL_ENV)
// if cfg.baseUrl == "" {
// cfg.baseUrl = defaultBaseUrl
// }
cfg.databaseUrl = getenv(DATABASE_URL_ENV)
if cfg.databaseUrl == "" {
return nil, errors.New("required parameter " + DATABASE_URL_ENV + " not provided")
@ -139,7 +138,7 @@ func loadConfig(getenv func(string) string) (*config, error) {
cfg.disableMusicBrainz = parseBool(getenv(DISABLE_MUSICBRAINZ_ENV))
cfg.skipImport = parseBool(getenv(SKIP_IMPORT_ENV))
cfg.userAgent = "Koito v0.0.1 (contact@koito.io)"
cfg.userAgent = fmt.Sprintf("Koito %s (contact@koito.io)", version)
if getenv(DEFAULT_USERNAME_ENV) == "" {
cfg.defaultUsername = "admin"
@ -161,6 +160,9 @@ func loadConfig(getenv func(string) string) (*config, error) {
cfg.allowedHosts = strings.Split(rawHosts, ",")
cfg.allowAllHosts = cfg.allowedHosts[0] == "*"
rawCors := getenv(CORS_ORIGINS_ENV)
cfg.allowedOrigins = strings.Split(rawCors, ",")
switch strings.ToLower(getenv(LOG_LEVEL_ENV)) {
case "debug":
cfg.logLevel = 0
@ -312,6 +314,12 @@ func AllowAllHosts() bool {
return globalConfig.allowAllHosts
}
func AllowedOrigins() []string {
lock.RLock()
defer lock.RUnlock()
return globalConfig.allowedOrigins
}
func RateLimitDisabled() bool {
lock.RLock()
defer lock.RUnlock()

View file

@ -281,6 +281,13 @@ func TestDeleteAlbumAlias(t *testing.T) {
require.NoError(t, err)
assert.True(t, exists, "expected alias to still exist")
// Ensure primary alias cannot be deleted
err = store.DeleteAlbumAlias(ctx, rg.ID, "Test Album")
require.NoError(t, err) // shouldn't error when nothing is deleted
rg, err = store.GetAlbum(ctx, db.GetAlbumOpts{ID: rg.ID})
require.NoError(t, err)
assert.Equal(t, "Test Album", rg.Title)
truncateTestData(t)
}
func TestGetAllAlbumAliases(t *testing.T) {

View file

@ -195,6 +195,13 @@ func TestDeleteArtistAlias(t *testing.T) {
require.NoError(t, err)
assert.True(t, exists, "expected alias to still exist")
// Ensure primary alias cannot be deleted
err = store.DeleteArtistAlias(ctx, artist.ID, "Alias Artist")
require.NoError(t, err) // shouldn't error when nothing is deleted
artist, err = store.GetArtist(ctx, db.GetArtistOpts{ID: 1})
require.NoError(t, err)
assert.Equal(t, "Alias Artist", artist.Name)
truncateTestData(t)
}
func TestDeleteArtist(t *testing.T) {

View file

@ -45,7 +45,7 @@ func TestMain(m *testing.M) {
log.Fatalf("Could not start resource: %s", err)
}
err = cfg.Load(getTestGetenv(resource))
err = cfg.Load(getTestGetenv(resource), "test")
if err != nil {
log.Fatalf("Could not load cfg: %s", err)
}

View file

@ -198,6 +198,13 @@ func TestTrackAliases(t *testing.T) {
err = store.SetPrimaryTrackAlias(ctx, 1, "Fake Alias")
require.Error(t, err)
// Ensure primary alias cannot be deleted
err = store.DeleteTrackAlias(ctx, track.ID, "Alias One")
require.NoError(t, err) // shouldn't error when nothing is deleted
track, err = store.GetTrack(ctx, db.GetTrackOpts{ID: 1})
require.NoError(t, err)
assert.Equal(t, "Alias One", track.Title)
store.SetPrimaryTrackAlias(ctx, 1, "Track One")
}

View file

@ -105,6 +105,7 @@ func ImportLastFMFile(ctx context.Context, store db.DB, mbzc mbz.MusicBrainzCall
RecordingMbzID: trackMbzID,
ReleaseTitle: album,
ReleaseMbzID: albumMbzID,
Client: "lastfm",
Time: ts,
UserID: 1,
}

View file

@ -77,6 +77,7 @@ func ImportMalojaFile(ctx context.Context, store db.DB, filename string) error {
TrackTitle: item.Track.Title,
ReleaseTitle: item.Track.Album.Title,
Time: ts.Local(),
Client: "maloja",
UserID: 1,
}
err = catalog.SubmitListen(ctx, store, opts)

View file

@ -64,6 +64,7 @@ func ImportSpotifyFile(ctx context.Context, store db.DB, filename string) error
ReleaseTitle: item.AlbumName,
Duration: dur / 1000,
Time: item.Timestamp,
Client: "spotify",
UserID: 1,
}
err = catalog.SubmitListen(ctx, store, opts)