fix: reduce signup bonus to ten points

This commit is contained in:
QiuSW
2026-07-18 15:00:04 +08:00
parent 4a0becbb4d
commit 83fa541b2a
25 changed files with 126 additions and 82 deletions
@@ -0,0 +1,18 @@
# Generated by Django 5.2.15 on 2026-07-18 06:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('billing', '0008_alter_callrecord_operation_type_and_more'),
]
operations = [
migrations.AlterField(
model_name='signupbonusgrant',
name='points_granted',
field=models.BigIntegerField(default=10, verbose_name='赠送点数'),
),
]
+1 -1
View File
@@ -318,7 +318,7 @@ class SignupBonusGrant(models.Model):
on_delete=models.PROTECT,
related_name="signup_bonus_grant",
)
points_granted = models.BigIntegerField("赠送点数", default=100)
points_granted = models.BigIntegerField("赠送点数", default=10)
created_at = models.DateTimeField("创建时间", auto_now_add=True)
class Meta:
+1 -1
View File
@@ -352,7 +352,7 @@ def adjust_wallet_points(
def grant_signup_bonus(
*,
user,
points: int = 100,
points: int = 10,
reason: str = "new_user_registration",
) -> SignupBonusGrantResult:
points = _validate_positive_points(points)
+9 -9
View File
@@ -501,18 +501,18 @@ class BillingServiceTests(TestCase):
wallet = UserWallet.objects.get(user=user)
self.assertTrue(first.granted)
self.assertFalse(second.granted)
self.assertEqual(first.points_granted, 100)
self.assertEqual(first.points_granted, 10)
self.assertEqual(second.points_granted, 0)
self.assertEqual(first.balance_after, 100)
self.assertEqual(second.balance_after, 100)
self.assertEqual(wallet.points_balance, 100)
self.assertEqual(first.balance_after, 10)
self.assertEqual(second.balance_after, 10)
self.assertEqual(wallet.points_balance, 10)
self.assertEqual(SignupBonusGrant.objects.filter(user=user).count(), 1)
ledger = PointsLedger.objects.get(
user=user,
change_type=PointsLedger.ChangeType.SIGNUP_BONUS,
)
self.assertEqual(ledger.points_delta, 100)
self.assertEqual(ledger.balance_after, 100)
self.assertEqual(ledger.points_delta, 10)
self.assertEqual(ledger.balance_after, 10)
self.assertEqual(ledger.reason, "new_user_registration")
def test_grant_signup_bonus_adds_to_existing_wallet_balance(self):
@@ -528,8 +528,8 @@ class BillingServiceTests(TestCase):
wallet = UserWallet.objects.get(user=user)
self.assertTrue(result.granted)
self.assertEqual(wallet.points_balance, 130)
self.assertEqual(result.balance_after, 130)
self.assertEqual(wallet.points_balance, 40)
self.assertEqual(result.balance_after, 40)
def test_create_recharge_order_marks_order_failed_when_gateway_fails(self):
self.create_exchange_rate(points_per_unit="10.0000")
@@ -1061,7 +1061,7 @@ class ConcurrentSignupBonusTests(TransactionTestCase):
self.assertEqual(sum(1 for granted, _balance in results if not granted), 1)
wallet = UserWallet.objects.get(user=self.user)
self.assertEqual(wallet.points_balance, 100)
self.assertEqual(wallet.points_balance, 10)
self.assertEqual(SignupBonusGrant.objects.filter(user=self.user).count(), 1)
self.assertEqual(
PointsLedger.objects.filter(
+1 -1
View File
@@ -6,7 +6,7 @@
<section class="cmhub-panel">
<h1 class="h4 mb-3">注册</h1>
<div class="alert alert-info">
注册成功后自动赠送 100 点试用点数,系统会写入注册赠点流水。
注册成功后自动赠送 10 点试用点数,系统会写入注册赠点流水。
</div>
<form method="post" action="{% url 'portal-signup' %}">
{% csrf_token %}
+3 -3
View File
@@ -18,7 +18,7 @@
{% if user.is_authenticated %}
<a class="btn btn-primary btn-lg" href="{% url 'portal-dashboard' %}">进入控制台</a>
{% else %}
<a class="btn btn-primary btn-lg" href="{% url 'portal-signup' %}">注册领 100 点</a>
<a class="btn btn-primary btn-lg" href="{% url 'portal-signup' %}">注册领 10 点</a>
<a class="btn btn-outline-secondary btn-lg" href="{% url 'portal-login' %}">登录</a>
{% endif %}
{% if current_release and current_release.has_download %}
@@ -31,7 +31,7 @@
{% endif %}
</div>
<div class="home-proof" aria-label="服务要点">
<span class="home-chip">注册送 100 点</span>
<span class="home-chip">注册送 10 点</span>
<span class="home-chip">按点数扣点</span>
<span class="home-chip">API Key 接入</span>
</div>
@@ -73,7 +73,7 @@
<div class="home-step">
<div class="home-step-num">01</div>
<h3>注册账号</h3>
<p>邮箱注册后直接登录,系统通过点数账本发放 100 点试用额度并写注册赠点流水。</p>
<p>邮箱注册后直接登录,系统通过点数账本发放 10 点试用额度并写注册赠点流水。</p>
</div>
<div class="home-step">
<div class="home-step-num">02</div>
+10 -10
View File
@@ -176,7 +176,7 @@ class PortalAccountFlowTests(TestCase):
def test_signup_rate_limit_is_configured(self):
self.assertEqual(settings.ACCOUNT_RATE_LIMITS["signup"], "20/m/ip")
def test_signup_grants_100_points_writes_signup_bonus_ledger_and_can_login(self):
def test_signup_grants_10_points_writes_signup_bonus_ledger_and_can_login(self):
suffix = uuid.uuid4().hex[:8]
email = f"signup-{suffix}@example.com"
@@ -196,22 +196,22 @@ class PortalAccountFlowTests(TestCase):
wallet = UserWallet.objects.get(user=user)
self.assertFalse(email_address.verified)
self.assertTrue(email_address.primary)
self.assertEqual(wallet.points_balance, 100)
self.assertEqual(wallet.points_balance, 10)
self.assertEqual(SignupBonusGrant.objects.filter(user=user).count(), 1)
ledger = PointsLedger.objects.get(
user=user,
change_type=PointsLedger.ChangeType.SIGNUP_BONUS,
)
self.assertEqual(ledger.points_delta, 100)
self.assertEqual(ledger.balance_after, 100)
self.assertEqual(ledger.points_delta, 10)
self.assertEqual(ledger.balance_after, 10)
self.assertEqual(len(mail.outbox), 0)
self.assertTrue(get_user(self.client).is_authenticated)
dashboard_response = self.client.get("/dashboard")
self.assertEqual(dashboard_response.status_code, 200)
self.assertEqual(dashboard_response.context["balance"].points_balance, 100)
self.assertEqual(dashboard_response.context["balance"].ledger_balance, 100)
self.assertContains(dashboard_response, "100")
self.assertEqual(dashboard_response.context["balance"].points_balance, 10)
self.assertEqual(dashboard_response.context["balance"].ledger_balance, 10)
self.assertContains(dashboard_response, "10")
def test_user_can_login_without_verified_email(self):
suffix = uuid.uuid4().hex[:8]
@@ -282,8 +282,8 @@ class PortalAccountFlowTests(TestCase):
self.assertEqual(response.resolver_match.url_name, "portal-home")
self.assertContains(response, "虾皮圈 AI 电商生成台")
self.assert_portal_branding(response)
self.assertContains(response, "注册领 100 点")
self.assertContains(response, "注册送 100 点")
self.assertContains(response, "注册领 10 点")
self.assertContains(response, "注册送 10 点")
self.assertContains(response, "登录")
self.assertContains(response, "客户端暂未发布")
self.assertContains(response, "暂未发布")
@@ -404,7 +404,7 @@ class PortalAccountFlowTests(TestCase):
self.assertEqual(response.status_code, 200)
self.assertContains(response, "进入控制台")
self.assertNotContains(response, "注册领 100 点")
self.assertNotContains(response, "注册领 10 点")
def test_download_release_only_keeps_one_current_per_platform(self):
old_release = self.create_download_release(version="1.0.0", sha256="c" * 64)