diff --git a/internal/entities/campaign.go b/internal/entities/campaign.go index 1e5aac0..5eabd76 100644 --- a/internal/entities/campaign.go +++ b/internal/entities/campaign.go @@ -16,6 +16,27 @@ const ( CampaignTypeMixed CampaignType = "MIXED" ) +// legacyCampaignTokens is what COINS was called before tokens became EnakCoin +// (docs/prd-point-coin.md ยง10). Requests may still send it; it is stored as COINS. +const legacyCampaignTokens = "TOKENS" + +// NormalizeCampaignType maps the legacy TOKENS to COINS and leaves anything else as is. +func NormalizeCampaignType(t string) CampaignType { + if t == legacyCampaignTokens { + return CampaignTypeCoins + } + return CampaignType(t) +} + +// NormalizeCampaignRewardType maps the legacy TOKENS to COINS and leaves anything +// else as is. +func NormalizeCampaignRewardType(t string) CampaignRewardType { + if t == legacyCampaignTokens { + return CampaignRewardTypeCoins + } + return CampaignRewardType(t) +} + type RuleType string const ( diff --git a/internal/entities/campaign_test.go b/internal/entities/campaign_test.go new file mode 100644 index 0000000..5dd1cd0 --- /dev/null +++ b/internal/entities/campaign_test.go @@ -0,0 +1,18 @@ +package entities + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNormalizeCampaignTypesMapsLegacyTokensToCoins(t *testing.T) { + assert.Equal(t, CampaignTypeCoins, NormalizeCampaignType("TOKENS")) + assert.Equal(t, CampaignTypeCoins, NormalizeCampaignType("COINS")) + assert.Equal(t, CampaignTypePoints, NormalizeCampaignType("POINTS")) + assert.Equal(t, CampaignType(""), NormalizeCampaignType(""), "an empty filter stays empty") + + assert.Equal(t, CampaignRewardTypeCoins, NormalizeCampaignRewardType("TOKENS")) + assert.Equal(t, CampaignRewardTypeReward, NormalizeCampaignRewardType("REWARD")) + assert.Equal(t, CampaignRewardType(""), NormalizeCampaignRewardType("")) +} diff --git a/internal/mappers/campaign_mapper.go b/internal/mappers/campaign_mapper.go index f662108..ffd2940 100644 --- a/internal/mappers/campaign_mapper.go +++ b/internal/mappers/campaign_mapper.go @@ -71,7 +71,7 @@ func ToCampaignEntity(request *contract.CreateCampaignRequest) *entities.Campaig return &entities.Campaign{ Name: request.Name, Description: request.Description, - Type: entities.CampaignType(request.Type), + Type: entities.NormalizeCampaignType(request.Type), StartDate: request.StartDate, EndDate: request.EndDate, IsActive: request.IsActive, @@ -91,7 +91,7 @@ func ToCampaignEntityFromUpdate(request *contract.UpdateCampaignRequest) *entiti ID: request.ID, Name: request.Name, Description: request.Description, - Type: entities.CampaignType(request.Type), + Type: entities.NormalizeCampaignType(request.Type), StartDate: request.StartDate, EndDate: request.EndDate, IsActive: request.IsActive, @@ -118,7 +118,7 @@ func ToCampaignRuleEntity(request *contract.CampaignRuleStruct, campaignID uuid. CampaignID: campaignID, RuleType: entities.RuleType(request.RuleType), ConditionValue: request.ConditionValue, - RewardType: entities.CampaignRewardType(request.RewardType), + RewardType: entities.NormalizeCampaignRewardType(request.RewardType), RewardValue: request.RewardValue, RewardSubtype: rewardSubtype, RewardRefID: request.RewardRefID, @@ -142,7 +142,7 @@ func ToCampaignRuleEntityFromUpdate(request *contract.CampaignRuleStruct, campai CampaignID: campaignID, RuleType: entities.RuleType(request.RuleType), ConditionValue: request.ConditionValue, - RewardType: entities.CampaignRewardType(request.RewardType), + RewardType: entities.NormalizeCampaignRewardType(request.RewardType), RewardValue: request.RewardValue, RewardSubtype: rewardSubtype, RewardRefID: request.RewardRefID, diff --git a/internal/processor/campaign_processor.go b/internal/processor/campaign_processor.go index 2823a26..57f2c8f 100644 --- a/internal/processor/campaign_processor.go +++ b/internal/processor/campaign_processor.go @@ -70,7 +70,7 @@ func (p *campaignProcessor) ListCampaigns(ctx context.Context, req *contract.Lis Page: req.Page, Limit: req.Limit, Search: req.Search, - Type: req.Type, + Type: string(entities.NormalizeCampaignType(req.Type)), IsActive: req.IsActive, ShowOnApp: req.ShowOnApp, StartDate: req.StartDate, @@ -178,7 +178,7 @@ func (p *campaignRuleProcessor) CreateCampaignRule(ctx context.Context, req *con CampaignID: req.CampaignID, RuleType: entities.RuleType(req.RuleType), ConditionValue: req.ConditionValue, - RewardType: entities.CampaignRewardType(req.RewardType), + RewardType: entities.NormalizeCampaignRewardType(req.RewardType), RewardValue: req.RewardValue, RewardSubtype: (*entities.RewardSubtype)(req.RewardSubtype), RewardRefID: req.RewardRefID, @@ -218,7 +218,7 @@ func (p *campaignRuleProcessor) ListCampaignRules(ctx context.Context, req *cont Limit: req.Limit, CampaignID: req.CampaignID, RuleType: req.RuleType, - RewardType: req.RewardType, + RewardType: string(entities.NormalizeCampaignRewardType(req.RewardType)), } // Get from repository @@ -247,7 +247,7 @@ func (p *campaignRuleProcessor) UpdateCampaignRule(ctx context.Context, req *con CampaignID: req.CampaignID, RuleType: entities.RuleType(req.RuleType), ConditionValue: req.ConditionValue, - RewardType: entities.CampaignRewardType(req.RewardType), + RewardType: entities.NormalizeCampaignRewardType(req.RewardType), RewardValue: req.RewardValue, RewardSubtype: (*entities.RewardSubtype)(req.RewardSubtype), RewardRefID: req.RewardRefID, diff --git a/internal/processor/game_play_processor.go b/internal/processor/game_play_processor.go index e6fef4f..15e3337 100644 --- a/internal/processor/game_play_processor.go +++ b/internal/processor/game_play_processor.go @@ -99,6 +99,10 @@ func (p *GamePlayProcessor) ListGamePlays(ctx context.Context, query *models.Lis } offset := (query.Page - 1) * query.Limit + // The column was renamed; the old name still sorts the same way. + if query.SortBy == "token_used" { + query.SortBy = "coins_used" + } // Get game plays from repository gamePlays, total, err := p.gamePlayRepo.List(