feat: 支持同卡种续卡叠加并修复过期登录态
支付成功后将次数或有效期叠加到已有会员卡,首页与详情页引导续卡;接口 401 时同步清掉本地登录态。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE `memberships` ADD COLUMN `total_times` INTEGER NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE `orders` ADD COLUMN `membership_id` VARCHAR(191) NULL;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `memberships_user_id_card_type_id_idx` ON `memberships`(`user_id`, `card_type_id`);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX `orders_membership_id_idx` ON `orders`(`membership_id`);
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `orders` ADD CONSTRAINT `orders_membership_id_fkey` FOREIGN KEY (`membership_id`) REFERENCES `memberships`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- Backfill purchased-times snapshot for existing times/trial cards
|
||||
UPDATE `memberships` `m`
|
||||
INNER JOIN `card_types` `ct` ON `ct`.`id` = `m`.`card_type_id`
|
||||
SET `m`.`total_times` = `ct`.`total_times`
|
||||
WHERE `ct`.`total_times` IS NOT NULL AND `m`.`total_times` IS NULL;
|
||||
@@ -147,6 +147,7 @@ model Membership {
|
||||
userId String @map("user_id")
|
||||
cardTypeId String @map("card_type_id")
|
||||
remainingTimes Int? @map("remaining_times")
|
||||
totalTimes Int? @map("total_times")
|
||||
startDate DateTime @map("start_date")
|
||||
expireDate DateTime @map("expire_date")
|
||||
status MembershipStatus @default(ACTIVE)
|
||||
@@ -156,9 +157,11 @@ model Membership {
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
cardType CardType @relation(fields: [cardTypeId], references: [id])
|
||||
bookings Booking[]
|
||||
orders Order[]
|
||||
inviteRewardGrants InviteRewardGrant[]
|
||||
|
||||
@@index([userId])
|
||||
@@index([userId, cardTypeId])
|
||||
@@index([status])
|
||||
@@map("memberships")
|
||||
}
|
||||
@@ -245,6 +248,7 @@ model Order {
|
||||
id String @id @default(uuid())
|
||||
userId String @map("user_id")
|
||||
cardTypeId String @map("card_type_id")
|
||||
membershipId String? @map("membership_id")
|
||||
orderNo String @unique @map("order_no")
|
||||
amount Decimal @db.Decimal(10, 0)
|
||||
status OrderStatus @default(PENDING)
|
||||
@@ -256,11 +260,13 @@ model Order {
|
||||
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
cardType CardType @relation(fields: [cardTypeId], references: [id])
|
||||
membership Membership? @relation(fields: [membershipId], references: [id])
|
||||
flashSaleOrder FlashSaleOrder?
|
||||
inviteReferrals InviteReferral[]
|
||||
|
||||
@@index([userId])
|
||||
@@index([status])
|
||||
@@index([membershipId])
|
||||
@@map("orders")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user