Fix SMS billing build and make credit conversion idempotent.

Import the purchase-price constant for Nest build, and only convert IRT-scale balances so migrate re-runs do not divide credits again.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-09-09 11:12:27 +03:30
co-authored by Cursor
parent 584c01fcee
commit 717a203d48
2 changed files with 5 additions and 4 deletions
@@ -1,11 +1,12 @@
-- Convert prepaid SMS balance from IRT to credit units.
-- Convert prepaid SMS balance from IRT to credit units (idempotent).
-- Previous billing: 400 IRT per 64-char segment.
-- New model: balance is SMS credits (1 credit = 1 segment); top-up at 500 IRT/credit.
-- Preserve existing prepaid capacity: IRT / 400 → credits.
-- Only convert rows that still look like IRT balances (>= 100_000). Already-converted
-- credit balances are below that and are left unchanged on re-run.
UPDATE businesses
SET sms_balance = sms_balance / 400
WHERE sms_balance > 0;
WHERE sms_balance >= 100000;
COMMENT ON COLUMN businesses.sms_balance IS
'Prepaid SMS credit units. 1 unit = one 64-character segment per recipient. Top-up adds floor(IRT / 500) credits.';
+1 -1
View File
@@ -1,7 +1,7 @@
import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import { TenantService } from '../tenant/tenant.service';
import { calculateSmsCredits, irtToSmsCredits } from './sms-billing';
import { calculateSmsCredits, irtToSmsCredits, SMS_PURCHASE_PRICE_PER_CREDIT_IRT } from './sms-billing';
@Injectable()
export class SmsBillingService {