2021-05-16 15:55:40 +00:00
|
|
|
package loyalty
|
|
|
|
|
|
|
|
import (
|
2021-11-19 18:37:42 +00:00
|
|
|
"errors"
|
|
|
|
|
2022-01-27 15:49:18 +00:00
|
|
|
"go.uber.org/zap"
|
2021-11-23 10:34:02 +00:00
|
|
|
|
2022-01-27 15:49:18 +00:00
|
|
|
"github.com/strimertul/strimertul/modules/database"
|
2021-05-16 15:55:40 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
const OldPointsKey = "loyalty/users"
|
|
|
|
|
|
|
|
type OldPointStorage map[string]int64
|
|
|
|
|
2022-01-27 15:49:18 +00:00
|
|
|
func migratePoints(db *database.DB, log *zap.Logger) error {
|
2021-05-16 15:55:40 +00:00
|
|
|
// Retrieve old storage
|
|
|
|
var oldStorage OldPointStorage
|
|
|
|
err := db.GetJSON(OldPointsKey, &oldStorage)
|
2021-11-19 18:37:42 +00:00
|
|
|
if errors.Is(err, database.ErrKeyNotFound) {
|
2021-05-16 15:55:40 +00:00
|
|
|
// 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)
|
|
|
|
}
|