package com.red.circle.order.infra.database.rds.entity.order;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.red.circle.framework.mybatis.entity.TimestampBaseEntity;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * google订阅最新单据
 * </p>
 *
 * @author pengliang
 * @since 2020-08-11
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("order_google_latest_subscription")
public class OrderGoogleLatestSubscription extends TimestampBaseEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  /**
   * 主键标识
   */
  @TableId(value = "id", type = IdType.ASSIGN_ID)
  private Long id;

  /**
   * 来源系统
   */
  @TableField("sys_origin")
  private String sysOrigin;

  /**
   * 用户id
   */
  @TableField("user_id")
  private Long userId;

  /**
   * 这种类型表示androidpublisher服务中的subscriptionPurchase对象。
   */
  @TableField("kind")
  private String kind;

  /**
   * 授予订阅的时间（自大纪元以来的毫秒数）。
   */
  @TableField("start_time_millis")
  private Long startTimeMillis;

  /**
   * 订阅到期的时间（以纪元为单位），以毫秒为单位。
   */
  @TableField("expiry_time_millis")
  private Long expiryTimeMillis;

  /**
   * 自大纪元以来的毫秒数（毫秒），将自动恢复订阅的时间。仅在用户请求暂停订阅时显示。
   */
  @TableField("auto_resume_time_millis")
  private Long autoResumeTimeMillis;

  /**
   * 订阅在达到其当前到期时间时是否将自动续订。
   */
  @TableField("auto_renewing")
  private Boolean autoRenewing;

  /**
   * 授予订阅时用户的ISO 3166-1 alpha-2计费国家/地区代码。
   */
  @TableField("country_code")
  private String countryCode;

  /**
   * 订阅的付款状态。可能的值为：0。待付款1.收到付款2.免费试用3.待推迟的升级/降级
   */
  @TableField("payment_state")
  private Integer paymentState;

  /**
   * 订阅被取消或未自动更新的原因。可能的值为：0。用户取消了订阅1.例如由于计费问题，系统取消了订阅。2.用新订阅替换了订阅。3.开发者取消了订阅。
   */
  @TableField("cancel_reason")
  private Integer cancelReason;

  /**
   * 与订阅的购买相关联的最新重复订单的订单ID。
   */
  @TableField("order_id")
  private String orderId;

  /**
   * 订阅的购买类型。仅当未使用标准应用内结算流程进行购买时，才设置此字段。可能的值为：0。测试（即从许可证测试帐户购买）1.促销（即使用促销代码购买）
   */
  @TableField("purchase_type")
  private Integer purchaseType;

  /**
   * 如果此订阅是以下其中一项，则为原始购买的购买令牌：0.重新注册已取消但未失效的订阅1.从先前的订阅升级/降级
   * <p>
   * 例如，假设某个用户最初注册并收到购买令牌X，然后该用户取消注册流程并经历了重新注册流程（在他们的订阅到期之前），并且您收到了购买令牌Y，最后该用户升级了他们的订阅并收到了购买令牌Z。如果您使用购买令牌Z调用此API，则此字段将设置为Y。如果您使用购买令牌Y调用此API，则此字段将设置为X。如果您使用购买令牌X调用此API，则此字段字段不会被设置。
   */
  @TableField("linked_purchase_token")
  private String linkedPurchaseToken;

  /**
   * 自时间段以来，用户取消订阅的时间（以毫秒为单位）。仅在cancelReason为0时存在。
   */
  @TableField("user_cancellation_time_millis")
  private Long userCancellationTimeMillis;

  /**
   * 订单json
   */
  @TableField("last_json")
  private String lastJson;

}
