{
  "content-type": "application/setfn-schema",
  "dbType": "sqlite3",
  "apiBuild": {
    "dbName": "resource_game",
    "dbEngine": "sqlite",
    "includeClient": false,
    "features": {
      "realtime": {
        "enabled": true,
        "eventProcessor": "shared-resource",
        "processorConfig": {
          "resourcesTable": "game_resources",
          "actionsTable": "game_actions",
          "inventoryTable": "game_inventory",
          "actionPower": 1,
          "rewardPerAction": 1,
          "maxClientAmount": 1,
          "broadcast": "namespace"
        },
        "actions": {
          "send": { "permissions": { "login": true } },
          "receive": { "permissions": { "login": true } }
        }
      },
      "upload": { "enabled": false, "actions": {} },
      "ai-chat": { "enabled": false, "actions": {} }
    }
  },
  "data": [
    {
      "table": { "name": "game_resources", "cmt": "몬스터, 작물, 퀴즈 풀 등 여러 사용자가 함께 갱신하는 상태" },
      "columns": [
        { "name": "id", "type": "serial4", "primary": true, "default": "auto_increment" },
        { "name": "code", "type": "varchar", "len": 80, "notnull": true, "unique": true, "cmt": "클라이언트에 노출하는 안정적인 자원 코드" },
        { "name": "kind", "type": "varchar", "len": 30, "notnull": true, "default": "monster", "cmt": "monster/plant/quiz" },
        { "name": "status", "type": "varchar", "len": 20, "notnull": true, "default": "active" },
        { "name": "current_value", "type": "int8", "notnull": true, "default": "10000", "cmt": "체력, 성장 잔여량 또는 남은 문제 수" },
        { "name": "max_value", "type": "int8", "notnull": true, "default": "10000" },
        { "name": "version", "type": "int8", "notnull": true, "default": "0", "cmt": "낙관적 동시성 버전" },
        { "name": "reward_item_code", "type": "varchar", "len": 80, "notnull": true, "default": "monster-core" },
        { "name": "_updated_at", "type": "timestamp", "default": "now()" }
      ],
      "permissions": {
        "security": { "login": true },
        "ops": {
          "list": { "login": true },
          "view": { "login": true },
          "create": { "login": true, "roles": ["admin"] },
          "update": { "login": true, "disabled": true },
          "delete": { "login": true, "roles": ["admin"] }
        }
      }
    },
    {
      "table": { "name": "game_actions", "cmt": "서버가 승인한 사용자 행동과 멱등키 이력" },
      "columns": [
        { "name": "id", "type": "serial4", "primary": true, "default": "auto_increment" },
        { "name": "action_key", "type": "varchar", "len": 80, "notnull": true, "unique": true },
        { "name": "resource_id", "type": "int8", "notnull": true, "index": true },
        { "name": "user_id", "type": "int8", "notnull": true, "index": true },
        { "name": "nickname", "type": "varchar", "len": 120, "notnull": true },
        { "name": "action_type", "type": "varchar", "len": 30, "notnull": true },
        { "name": "amount", "type": "int8", "notnull": true },
        { "name": "resulting_value", "type": "int8", "notnull": true },
        { "name": "resource_version", "type": "int8", "notnull": true },
        { "name": "reward_item_code", "type": "varchar", "len": 80, "notnull": true },
        { "name": "reward_quantity", "type": "int8", "notnull": true, "default": "0" },
        { "name": "_created_at", "type": "timestamp", "default": "now()" }
      ],
      "permissions": {
        "security": { "login": true },
        "ops": {
          "list": { "login": true },
          "view": { "login": true },
          "create": { "login": true, "disabled": true },
          "update": { "login": true, "disabled": true },
          "delete": { "login": true, "roles": ["admin"] }
        }
      }
    },
    {
      "table": { "name": "game_inventory", "cmt": "사용자별 보상 아이템 수량" },
      "columns": [
        { "name": "id", "type": "serial4", "primary": true, "default": "auto_increment" },
        { "name": "inventory_key", "type": "varchar", "len": 180, "notnull": true, "unique": true },
        { "name": "user_id", "type": "int8", "notnull": true, "index": true },
        { "name": "nickname", "type": "varchar", "len": 120, "notnull": true },
        { "name": "item_code", "type": "varchar", "len": 80, "notnull": true, "index": true },
        { "name": "quantity", "type": "int8", "notnull": true, "default": "0" },
        { "name": "_updated_at", "type": "timestamp", "default": "now()" }
      ],
      "permissions": {
        "security": { "login": true, "ownerColumn": "user_id" },
        "ops": {
          "list": { "login": true, "ownerOnly": true },
          "view": { "login": true, "ownerOnly": true },
          "create": { "login": true, "disabled": true },
          "update": { "login": true, "disabled": true },
          "delete": { "login": true, "disabled": true }
        }
      }
    }
  ]
}
