mirror of
https://git.sr.ht/~ashkeel/strimertul
synced 2024-09-20 02:00:49 +00:00
46 lines
924 B
Go
46 lines
924 B
Go
package loyalty
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/strimertul/strimertul/modules/database"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
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)
|
|
}
|