{
  "content-type": "application/setfn-schema",
  "dbType": "sqlite3",
  "apiBuild": {
    "dbName": "gomoku",
    "dbEngine": "sqlite",
    "includeClient": false,
    "features": {
      "realtime": {
        "enabled": true,
        "eventProcessor": "turn-based-board",
        "processorConfig": {
          "gamesTable": "gomoku_games",
          "movesTable": "gomoku_moves",
          "playersTable": "gomoku_players",
          "boardSize": 19,
          "winLength": 5,
          "winScore": 3,
          "drawScore": 1,
          "lossScore": 0,
          "turnTimeSeconds": 180,
          "waitingRoomTTLSeconds": 1800,
          "maxWaitingRoomsPerUser": 3
        },
        "actions": {
          "send": { "permissions": { "login": true } },
          "receive": { "permissions": { "login": true } }
        }
      },
      "upload": {
        "enabled": false,
        "uploadScope": "team",
        "uploadTargetPath": "/@team/.AppData/webspace/gomoku/uploads/",
        "actions": {
          "upload": { "permissions": { "login": true } },
          "read": { "permissions": { "login": true } }
        }
      },
      "ai-chat": {
        "enabled": false,
        "allowTools": false,
        "primaryModel": "",
        "fallbackModel": "",
        "systemPrompt": "",
        "actions": {
          "use": { "permissions": { "login": true } }
        }
      }
    }
  },
  "data": [
    {
      "table": { "name": "gomoku_games", "cmt": "실시간 오목 대국방과 승패 결과" },
      "columns": [
        { "name": "id", "type": "serial4", "primary": true, "default": "auto_increment" },
        { "name": "room_code", "type": "text", "notnull": true, "unique": true, "cmt": "공유용 방 코드" },
        { "name": "status", "type": "text", "notnull": true, "default": "waiting", "cmt": "waiting/playing/finished" },
        { "name": "black_user_id", "type": "int4", "notnull": true },
        { "name": "white_user_id", "type": "int4" },
        { "name": "current_turn", "type": "text", "notnull": true, "default": "black" },
        { "name": "winner_user_id", "type": "int4" },
        { "name": "result", "type": "text", "notnull": true, "default": "ongoing", "cmt": "ongoing/win/draw" },
        { "name": "move_count", "type": "int4", "notnull": true, "default": "0" },
        { "name": "board_size", "type": "int4", "notnull": true, "default": "19" },
        { "name": "win_length", "type": "int4", "notnull": true, "default": "5" },
        { "name": "black_time_ms", "type": "int4", "notnull": true, "default": "180000", "cmt": "흑 차례의 한 수 제한시간(ms)" },
        { "name": "white_time_ms", "type": "int4", "notnull": true, "default": "180000", "cmt": "백 차례의 한 수 제한시간(ms)" },
        { "name": "turn_started_at", "type": "timestamp", "cmt": "현재 차례가 시작된 서버 시각" },
        { "name": "finish_reason", "type": "text", "cmt": "five_in_a_row/board_full/timeout" },
        { "name": "finished_at", "type": "timestamp" },
        { "name": "_created_at", "type": "timestamp", "default": "now()" },
        { "name": "_updated_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": ["superuser"] }
        }
      }
    },
    {
      "table": { "name": "gomoku_moves", "cmt": "서버 검증을 통과한 착수 이력" },
      "columns": [
        { "name": "id", "type": "serial4", "primary": true, "default": "auto_increment" },
        { "name": "game_id", "type": "int4", "notnull": true, "index": true },
        { "name": "move_no", "type": "int4", "notnull": true },
        { "name": "user_id", "type": "int4", "notnull": true },
        { "name": "stone", "type": "text", "notnull": true },
        { "name": "row", "type": "int4", "notnull": true },
        { "name": "col", "type": "int4", "notnull": true },
        { "name": "result", "type": "text", "notnull": true, "default": "ongoing" },
        { "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": ["superuser"] }
        }
      }
    },
    {
      "table": { "name": "gomoku_players", "cmt": "회원별 승/패/무와 누적 점수" },
      "columns": [
        { "name": "id", "type": "serial4", "primary": true, "default": "auto_increment" },
        { "name": "user_id", "type": "int4", "notnull": true, "unique": true },
        { "name": "nickname", "type": "text", "notnull": true },
        { "name": "wins", "type": "int4", "notnull": true, "default": "0" },
        { "name": "losses", "type": "int4", "notnull": true, "default": "0" },
        { "name": "draws", "type": "int4", "notnull": true, "default": "0" },
        { "name": "score", "type": "int4", "notnull": true, "default": "0", "cmt": "승 3점, 무 1점, 패 0점" },
        { "name": "_updated_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": ["superuser"] }
        }
      }
    }
  ]
}
