1
0
Fork 0
mirror of https://git.sr.ht/~ashkeel/strimertul synced 2024-09-20 02:00:49 +00:00
strimertul/modules/loyalty/migration.go

48 lines
949 B
Go
Raw Normal View History

package loyalty
import (
"errors"
2022-02-01 11:35:34 +00:00
kv "github.com/strimertul/kilovolt/v8"
2022-01-27 15:49:18 +00:00
"github.com/strimertul/strimertul/modules/database"
2022-02-01 11:35:34 +00:00
"go.uber.org/zap"
)
const OldPointsKey = "loyalty/users"
type OldPointStorage map[string]int64
2022-02-01 11:35:34 +00:00
func migratePoints(db *database.DBModule, log *zap.Logger) error {
// Retrieve old storage
var oldStorage OldPointStorage
err := db.GetJSON(OldPointsKey, &oldStorage)
2022-02-01 11:35:34 +00:00
if errors.Is(err, kv.ErrorKeyNotFound) {
// No migration needed, points are already kaput
return nil
}
if err != nil {
return err
}
// Move to new format
newStorage := make(map[string]interface{})
for user, points := range oldStorage {
userkey := PointsPrefix + user
newStorage[userkey] = PointsEntry{
Points: points,
}
}
// Bulk add to database
if err := db.PutJSONBulk(newStorage); err != nil {
return err
}
log.Info("Migrated to new loyalty point format")
// Remove old key
return db.RemoveKey(OldPointsKey)
}