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
Ash Keel 0d3233ecbd
Big module refactor
Changing the HTTP config will now restart the server or, if possible, just hotpatch the configuration
2021-11-19 19:37:42 +01:00

45 lines
915 B
Go

package loyalty
import (
"errors"
"github.com/sirupsen/logrus"
"github.com/strimertul/strimertul/database"
)
const OldPointsKey = "loyalty/users"
type OldPointStorage map[string]int64
func migratePoints(db *database.DB, log logrus.FieldLogger) error {
// Retrieve old storage
var oldStorage OldPointStorage
err := db.GetJSON(OldPointsKey, &oldStorage)
if errors.Is(err, database.ErrKeyNotFound) {
// 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)
}