fix(order): prevent duplicate subscriptions and repair invite gifts
Build docker and publish / build (20.15.1) (push) Successful in 5m6s
Build docker and publish / build (20.15.1) (push) Successful in 5m6s
This commit is contained in:
@@ -76,7 +76,10 @@ func CountScopedSubscribePurchaseOrders(
|
||||
var count int64
|
||||
query := db.WithContext(ctx).
|
||||
Model(&modelOrder.Order{}).
|
||||
Where("user_id IN ? AND subscribe_id = ? AND type IN ? AND amount > 0", scopeUserIDs, subscribeID, []int64{1, 2})
|
||||
Where("user_id IN ? AND type IN ?", scopeUserIDs, []int64{1, 2})
|
||||
if subscribeID > 0 {
|
||||
query = query.Where("subscribe_id = ?", subscribeID)
|
||||
}
|
||||
if len(statuses) > 0 {
|
||||
query = query.Where("status IN ?", statuses)
|
||||
}
|
||||
|
||||
@@ -52,12 +52,8 @@ func ResolvePurchaseRoute(
|
||||
return decision, nil
|
||||
}
|
||||
|
||||
if requestedSubscribeID != anchorSub.SubscribeId {
|
||||
return nil, ErrSingleModePlanMismatch
|
||||
}
|
||||
|
||||
decision.Route = PurchaseRoutePurchaseToRenewal
|
||||
decision.ResolvedSubscribeID = anchorSub.SubscribeId
|
||||
decision.ResolvedSubscribeID = requestedSubscribeID
|
||||
decision.Anchor = anchorSub
|
||||
return decision, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/perfect-panel/server/internal/model/user"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestResolvePurchaseRoute_AllowsPlanChangeForExistingSubscription(t *testing.T) {
|
||||
anchor := &user.Subscribe{
|
||||
Id: 10,
|
||||
UserId: 20,
|
||||
OrderId: 30,
|
||||
SubscribeId: 1,
|
||||
Token: "existing-token",
|
||||
ExpireTime: time.Now().Add(time.Hour),
|
||||
}
|
||||
|
||||
decision, err := ResolvePurchaseRoute(
|
||||
context.Background(),
|
||||
true,
|
||||
anchor.UserId,
|
||||
2,
|
||||
func(context.Context, int64) (*user.Subscribe, error) {
|
||||
return anchor, nil
|
||||
},
|
||||
)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, PurchaseRoutePurchaseToRenewal, decision.Route)
|
||||
require.Equal(t, int64(2), decision.ResolvedSubscribeID)
|
||||
require.Equal(t, anchor, decision.Anchor)
|
||||
}
|
||||
Reference in New Issue
Block a user