mirror of
https://git.sr.ht/~ashkeel/strimertul
synced 2024-09-20 02:00:49 +00:00
43 lines
895 B
Go
43 lines
895 B
Go
|
package loyalty
|
||
|
|
||
|
import (
|
||
|
"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 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)
|
||
|
}
|