@@ -55,6 +55,12 @@ func (l *PurchaseLogic) Purchase(req *types.PortalPurchaseRequest) (resp *types.
5555 l .Errorw ("[Purchase] Database query error" , logger .Field ("error" , err .Error ()), logger .Field ("subscribe_id" , req .SubscribeId ))
5656 return nil , errors .Wrapf (xerr .NewErrCode (xerr .DatabaseQueryError ), "find subscribe error: %v" , err .Error ())
5757 }
58+
59+ // check subscribe plan stock
60+ if sub .Inventory == 0 {
61+ return nil , errors .Wrapf (xerr .NewErrCode (xerr .SubscribeOutOfStock ), "subscribe out of stock" )
62+ }
63+
5864 // check subscribe plan status
5965 if ! * sub .Sell {
6066 return nil , errors .Wrapf (xerr .NewErrCode (xerr .ERROR ), "subscribe not sell" )
@@ -149,6 +155,16 @@ func (l *PurchaseLogic) Purchase(req *types.PortalPurchaseRequest) (resp *types.
149155 return err
150156 }
151157 l .Infow ("[Purchase] Guest order" , logger .Field ("order_no" , orderInfo .OrderNo ), logger .Field ("identifier" , req .Identifier ))
158+
159+ // Decrease subscribe plan stock
160+ if sub .Inventory != - 1 {
161+ sub .Inventory --
162+ if e := l .svcCtx .SubscribeModel .Update (l .ctx , sub , tx ); e != nil {
163+ l .Errorw ("[Purchase] Database update error" , logger .Field ("error" , e .Error ()), logger .Field ("subscribe_id" , sub .Id ))
164+ return e
165+ }
166+ }
167+
152168 // save guest order
153169 if err = l .svcCtx .OrderModel .Insert (l .ctx , orderInfo , tx ); err != nil {
154170 return err
0 commit comments