---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by SenGang.
--- DateTime: 2024/4/11 13:19
---ARGV: [1]优惠券id [2]用户id [3]订单id
---KEY: [1]库存key [2]订单key
---todo: 完成redis层面上的库存扣减和订单创建，并进行库存和用户检查
local voucherId = ARGV[1]
local userId = ARGV[2]
local orderId = ARGV[3]
local stockKey = "seckill:stock:" .. voucherId -- lua脚本中+号变成 ..
local orderKey = "seckill:order:" .. voucherId

-- 判断库存是否充足
if (tonumber(redis.call('get', stockKey)) <= 0) then
    return 1 --- 返回1代表库存不足
end
--判断用户是否下单 -> 就是用户id是否在set里
if (redis.call('sismember', orderKey,userId) == 1) then
    return 2 ---返回2代表用户已下单
end
--扣减库存
redis.call('decr',stockKey)
--增加订单，增加到userId到set里
-- redis.call('sadd',orderKey,userId)
--生产消息到stream消息队列
--- 用RabbitMQ替代
-- redis.call('xadd','stream.orders','*','userId',userId,'voucherId',voucherId,'id',orderId)
return 0 ---返回0代表下单成功