{
  "version": "5",
  "dialect": "mysql",
  "id": "0210b77d-d2d7-4765-98ed-7ca40c1eebd9",
  "prevId": "9a675de2-c153-455f-9670-26a42ba62d01",
  "tables": {
    "admin_events": {
      "name": "admin_events",
      "columns": {
        "id": {
          "name": "id",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": true
        },
        "eventType": {
          "name": "eventType",
          "type": "enum('new_user','traffic_spike')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "details": {
          "name": "details",
          "type": "text",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "createdAt": {
          "name": "createdAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        }
      },
      "indexes": {
        "admin_events_created_idx": {
          "name": "admin_events_created_idx",
          "columns": [
            "eventType",
            "createdAt"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {},
      "compositePrimaryKeys": {
        "admin_events_id": {
          "name": "admin_events_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    },
    "captcha_challenges": {
      "name": "captcha_challenges",
      "columns": {
        "id": {
          "name": "id",
          "type": "varchar(36)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "visitToken": {
          "name": "visitToken",
          "type": "varchar(32)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "videoId": {
          "name": "videoId",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "ipHash": {
          "name": "ipHash",
          "type": "varchar(128)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "question": {
          "name": "question",
          "type": "varchar(64)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "answerHash": {
          "name": "answerHash",
          "type": "varchar(128)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "expiresAt": {
          "name": "expiresAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "usedAt": {
          "name": "usedAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "createdAt": {
          "name": "createdAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        }
      },
      "indexes": {
        "challenge_video_visitor_idx": {
          "name": "challenge_video_visitor_idx",
          "columns": [
            "videoId",
            "ipHash"
          ],
          "isUnique": false
        },
        "challenge_expiry_idx": {
          "name": "challenge_expiry_idx",
          "columns": [
            "expiresAt"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "captcha_challenges_videoId_videos_id_fk": {
          "name": "captcha_challenges_videoId_videos_id_fk",
          "tableFrom": "captcha_challenges",
          "tableTo": "videos",
          "columnsFrom": [
            "videoId"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "captcha_challenges_id": {
          "name": "captcha_challenges_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    },
    "users": {
      "name": "users",
      "columns": {
        "id": {
          "name": "id",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": true
        },
        "openId": {
          "name": "openId",
          "type": "varchar(64)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "name": {
          "name": "name",
          "type": "text",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "email": {
          "name": "email",
          "type": "varchar(320)",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "loginMethod": {
          "name": "loginMethod",
          "type": "varchar(64)",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "role": {
          "name": "role",
          "type": "enum('user','admin')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "'user'"
        },
        "createdAt": {
          "name": "createdAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "updatedAt": {
          "name": "updatedAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "onUpdate": true,
          "default": "(now())"
        },
        "lastSignedIn": {
          "name": "lastSignedIn",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        }
      },
      "indexes": {},
      "foreignKeys": {},
      "compositePrimaryKeys": {
        "users_id": {
          "name": "users_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {
        "users_openId_unique": {
          "name": "users_openId_unique",
          "columns": [
            "openId"
          ]
        }
      },
      "checkConstraint": {}
    },
    "videos": {
      "name": "videos",
      "columns": {
        "id": {
          "name": "id",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": true
        },
        "userId": {
          "name": "userId",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "hash": {
          "name": "hash",
          "type": "varchar(24)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "sourceUrl": {
          "name": "sourceUrl",
          "type": "varchar(2048)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "platform": {
          "name": "platform",
          "type": "enum('youtube','facebook','tiktok','instagram','kwai')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "title": {
          "name": "title",
          "type": "varchar(140)",
          "primaryKey": false,
          "notNull": false,
          "autoincrement": false
        },
        "isActive": {
          "name": "isActive",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": true
        },
        "createdAt": {
          "name": "createdAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "updatedAt": {
          "name": "updatedAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "onUpdate": true,
          "default": "(now())"
        }
      },
      "indexes": {
        "videos_hash_unique": {
          "name": "videos_hash_unique",
          "columns": [
            "hash"
          ],
          "isUnique": true
        },
        "videos_user_created_idx": {
          "name": "videos_user_created_idx",
          "columns": [
            "userId",
            "createdAt"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "videos_userId_users_id_fk": {
          "name": "videos_userId_users_id_fk",
          "tableFrom": "videos",
          "tableTo": "users",
          "columnsFrom": [
            "userId"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "videos_id": {
          "name": "videos_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    },
    "visitor_accesses": {
      "name": "visitor_accesses",
      "columns": {
        "id": {
          "name": "id",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": true
        },
        "visitToken": {
          "name": "visitToken",
          "type": "varchar(32)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "videoId": {
          "name": "videoId",
          "type": "int",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "ipHash": {
          "name": "ipHash",
          "type": "varchar(128)",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "accessDate": {
          "name": "accessDate",
          "type": "date",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false
        },
        "accessedAt": {
          "name": "accessedAt",
          "type": "timestamp",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "(now())"
        },
        "adblockDetected": {
          "name": "adblockDetected",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": false
        },
        "captchaPassed": {
          "name": "captchaPassed",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": false
        },
        "isEligible": {
          "name": "isEligible",
          "type": "boolean",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": false
        },
        "blockReason": {
          "name": "blockReason",
          "type": "enum('none','adblock','access_limit','captcha_invalid')",
          "primaryKey": false,
          "notNull": true,
          "autoincrement": false,
          "default": "'none'"
        }
      },
      "indexes": {
        "accesses_visit_token_unique": {
          "name": "accesses_visit_token_unique",
          "columns": [
            "visitToken"
          ],
          "isUnique": true
        },
        "accesses_video_date_idx": {
          "name": "accesses_video_date_idx",
          "columns": [
            "videoId",
            "accessDate"
          ],
          "isUnique": false
        },
        "accesses_visitor_video_date_idx": {
          "name": "accesses_visitor_video_date_idx",
          "columns": [
            "ipHash",
            "videoId",
            "accessDate"
          ],
          "isUnique": false
        },
        "accesses_accessed_at_idx": {
          "name": "accesses_accessed_at_idx",
          "columns": [
            "accessedAt"
          ],
          "isUnique": false
        }
      },
      "foreignKeys": {
        "visitor_accesses_videoId_videos_id_fk": {
          "name": "visitor_accesses_videoId_videos_id_fk",
          "tableFrom": "visitor_accesses",
          "tableTo": "videos",
          "columnsFrom": [
            "videoId"
          ],
          "columnsTo": [
            "id"
          ],
          "onDelete": "cascade",
          "onUpdate": "no action"
        }
      },
      "compositePrimaryKeys": {
        "visitor_accesses_id": {
          "name": "visitor_accesses_id",
          "columns": [
            "id"
          ]
        }
      },
      "uniqueConstraints": {},
      "checkConstraint": {}
    }
  },
  "views": {},
  "_meta": {
    "schemas": {},
    "tables": {},
    "columns": {}
  },
  "internal": {
    "tables": {},
    "indexes": {}
  }
}