/// <summary>
 ///     根据文券事件更新用户的文券数量
 /// </summary>
 /// <param name="user">用户对象</param>
 /// <param name="event">文券事件</param>
 /// <param name="description">文券记录描述,会被序列化成 JSON 存储到数据库</param>
 /// <param name="logTime">文券日志记录时间,如果为 null 则使用当前时间</param>
 /// <exception cref="ArgumentNullException">user 参数为 null</exception>
 public async Task UpdateAsync(KeylolUser user, CouponEvent @event, object description = null,
                               DateTime?logTime = null)
 {
     await UpdateAsync(user, @event, @event.ToCouponChange(), description, logTime);
 }
        /// <summary>
        ///     判断指定用户是否有足够文券触发指定事件
        /// </summary>
        /// <param name="userId">用户 ID</param>
        /// <param name="event">文券事件</param>
        /// <returns>可以触发指定事件返回 true,不能则返回 false</returns>
        public async Task <bool> CanTriggerEventAsync(string userId, CouponEvent @event)
        {
            var user = await _userManager.FindByIdAsync(userId);

            return(user.Coupon + @event.ToCouponChange() >= 0);
        }