{
  "id": "0000_initial",
  "prevId": "",
  "version": "7",
  "dialect": "sqlite",
  "tables": {
    "blog_posts": {
      "name": "blog_posts",
      "columns": {
        "id": { "name": "id", "type": "integer", "primaryKey": true, "notNull": true, "autoincrement": true },
        "slug": { "name": "slug", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "title": { "name": "title", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "title_en": { "name": "title_en", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false },
        "content_md": { "name": "content_md", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "content_md_en": { "name": "content_md_en", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false },
        "cover_image": { "name": "cover_image", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "cover_width": { "name": "cover_width", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false, "default": 800 },
        "cover_height": { "name": "cover_height", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false, "default": 600 },
        "tags": { "name": "tags", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false },
        "has_breakpoint": { "name": "has_breakpoint", "type": "boolean", "primaryKey": false, "notNull": false, "autoincrement": false, "default": false },
        "status": { "name": "status", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "'draft'" },
        "like_count": { "name": "like_count", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false, "default": 0 },
        "dislike_count": { "name": "dislike_count", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false, "default": 0 },
        "publish_date": { "name": "publish_date", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false },
        "created_at": { "name": "created_at", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "CURRENT_TIMESTAMP" },
        "updated_at": { "name": "updated_at", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "CURRENT_TIMESTAMP" }
      },
      "indexes": {
        "blog_posts_slug_unique": { "name": "blog_posts_slug_unique", "columns": ["slug"], "isUnique": true },
        "idx_posts_status_date": { "name": "idx_posts_status_date", "columns": ["status", "publish_date"], "isUnique": false },
        "idx_posts_tags": { "name": "idx_posts_tags", "columns": ["tags"], "isUnique": false }
      },
      "foreignKeys": {},
      "compositePrimaryKeys": {},
      "uniqueConstraints": {}
    },
    "page_views": {
      "name": "page_views",
      "columns": {
        "id": { "name": "id", "type": "integer", "primaryKey": true, "notNull": true, "autoincrement": true },
        "view_date": { "name": "view_date", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "page_type": { "name": "page_type", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "blog_id": { "name": "blog_id", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false },
        "visitor_hash": { "name": "visitor_hash", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "pv_count": { "name": "pv_count", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false, "default": 1 },
        "created_at": { "name": "created_at", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "CURRENT_TIMESTAMP" }
      },
      "indexes": {
        "idx_views_unique": { "name": "idx_views_unique", "columns": ["view_date", "page_type", "blog_id", "visitor_hash"], "isUnique": true }
      },
      "foreignKeys": {
        "page_views_blog_id_blog_posts_id_fk": { "name": "page_views_blog_id_blog_posts_id_fk", "tableFrom": "page_views", "tableTo": "blog_posts", "columnsFrom": ["blog_id"], "columnsTo": ["id"], "onDelete": "no action", "onUpdate": "no action" }
      },
      "compositePrimaryKeys": {},
      "uniqueConstraints": {}
    },
    "user_events": {
      "name": "user_events",
      "columns": {
        "id": { "name": "id", "type": "integer", "primaryKey": true, "notNull": true, "autoincrement": true },
        "user_id": { "name": "user_id", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false },
        "blog_id": { "name": "blog_id", "type": "integer", "primaryKey": false, "notNull": false, "autoincrement": false },
        "event_type": { "name": "event_type", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "action_meta": { "name": "action_meta", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false },
        "visitor_hash": { "name": "visitor_hash", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false },
        "created_at": { "name": "created_at", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "CURRENT_TIMESTAMP" }
      },
      "indexes": {
        "idx_events_type_date": { "name": "idx_events_type_date", "columns": ["event_type", "created_at"], "isUnique": false },
        "idx_events_blog": { "name": "idx_events_blog", "columns": ["blog_id"], "isUnique": false }
      },
      "foreignKeys": {
        "user_events_user_id_users_id_fk": { "name": "user_events_user_id_users_id_fk", "tableFrom": "user_events", "tableTo": "users", "columnsFrom": ["user_id"], "columnsTo": ["id"], "onDelete": "no action", "onUpdate": "no action" },
        "user_events_blog_id_blog_posts_id_fk": { "name": "user_events_blog_id_blog_posts_id_fk", "tableFrom": "user_events", "tableTo": "blog_posts", "columnsFrom": ["blog_id"], "columnsTo": ["id"], "onDelete": "no action", "onUpdate": "no action" }
      },
      "compositePrimaryKeys": {},
      "uniqueConstraints": {}
    },
    "users": {
      "name": "users",
      "columns": {
        "id": { "name": "id", "type": "integer", "primaryKey": true, "notNull": true, "autoincrement": true },
        "email": { "name": "email", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "password_hash": { "name": "password_hash", "type": "text", "primaryKey": false, "notNull": true, "autoincrement": false },
        "nickname": { "name": "nickname", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false },
        "language": { "name": "language", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "'zh'" },
        "role": { "name": "role", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "'visitor'" },
        "created_at": { "name": "created_at", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false, "default": "CURRENT_TIMESTAMP" },
        "last_login_at": { "name": "last_login_at", "type": "text", "primaryKey": false, "notNull": false, "autoincrement": false }
      },
      "indexes": {
        "idx_users_email": { "name": "idx_users_email", "columns": ["email"], "isUnique": true }
      },
      "foreignKeys": {},
      "compositePrimaryKeys": {},
      "uniqueConstraints": {}
    }
  },
  "enums": {},
  "_meta": {
    "columns": {},
    "schemas": {},
    "tables": {}
  }
}
