コンテンツにスキップ

API ルーティング(routes/)

routes/ 配下の HTTP ルーターを 現行実装に合わせて統合して記述します。
本ページのパスは 各ルーターの「マウント先」からの相対パスです(実際の URL は app.use() 側の Base Path に依存)。

概要

  • 責務:HTTP エンドポイントの入口。静的 HTML の配信、設定値の取得、ローカルプレイリストの取得、ビュー切替、クラウド同期テスト、ドアベル通知を提供。
  • 関連モジュールroutes/index.js がエクスポート):
  • kioskRoutes, testRoutes, viewRoutes, localPlaylistRoutes, configRoutes, doorbellRoutes
  • 主な依存controllers/*, services/*, config/*, public/*, middlewares/errorHandler.js

共通仕様

  • Content-Type:JSON を返す API は application/json。静的ページ配信は text/html
  • エラー処理:一部は try/catchres.status(4xx/5xx) を直接返す。next(err) は現行ルートでは使用していない。
  • 認証/認可:現状コード上は未実装(必要に応じて今後追加)。

早見表(エンドポイント一覧・相対パス)

Group Method Path 概要 成功時レスポンス 備考
Config GET / 端末ローカル設定を返す { autoPlaylist, screenRotation } 失敗時はデフォルト
Kiosk GET / public/kiosk.html を配信 HTML
LocalPlaylist GET / playlist.json を読み取り→正規化して返却 { records: Item[] } ない場合は空配列を書き出し
GET /thumbnail サムネイル取得のプレースホルダ 200 "not yet implemented" contentId/deviceId 必須
Test GET /csi-snapshot CSI カメラの JPEG スナップショット image/jpeg cameraController 委譲
POST /cloud-sync クラウド正本型の同期テスト { success, ... } cloudContentSync を実行
View GET /switch/:view ビュー切替イベントを送出 { status: "OK", target } ioLocal.emit('switchView', view)
Doorbell POST /test ドアベル押下の擬似イベント送信 { ok: true, result } AWS IoT へ publish
POST /start-call 通話開始ダミー応答 { success, callId, joinUrlDevice, ... } 実装はスタブ

各ルーター詳細

Config(routes/configRoutes.js

  • GET /:端末ローカル設定を返す。
    読み取り元/var/lib/signage_local/localSettings.json
    フォールバック{ autoPlaylist: false, screenRotation: 'right' }

Kiosk(routes/kioskRoutes.js

  • GET /public/kiosk.html を送信。

Local Playlist(routes/localPlaylistRoutes.js

  • GET /:ローカルの playlist.json を読み取り、正規化された配列を返す。
    パスpath.join(config.CONTENTS_DIR, 'playlist.json')
    入力想定:各要素 { contentId, order?, duration? }file でも可)
    正規化type は拡張子で推定(.mp4/.movvideo、それ以外 → image
    レスポンス{ records: { file, type, order, duration }[] }

  • GET /thumbnail:プレースホルダ(未実装)。
    QuerycontentId, deviceId 必須(未指定は 400
    現状は 200 'Thumbnail route not yet implemented' を返す

Test(routes/testRoutes.js

  • GET /csi-snapshotcameraController.getCsiSnapshot に委譲(image/jpeg)。
  • POST /cloud-synccloudContentSync.syncOnceFromCloud を実行(DEVICE_IDSERVER_URL を使用)。

View(routes/viewRoutes.js

  • GET /switch/:viewioLocal.emit('switchView', view) を送出し、{ status: 'OK', target: view } を返却。

Note

  • ioLocalsockets/localSocket から取得していますが、現行コードでは ioLocal を export していないため、依存の実体が不明です。
    TODO: ioLocal の注入/公開方法を確認し、本記述を確定(根拠: signage-server/routes/viewRoutes.js, signage-server/sockets/localSocket.js)。

Doorbell(routes/doorbellRoutes.js

  • POST /testpublishDoorbellTest({ deviceId }) を実行。
    deviceIdbody または query から取得。

  • POST /start-call:通話開始のスタブ応答を返す。
    CALL_UI_BASE_URL が未設定の場合は https://example.com を使用。

メモや注意(全体)

  • マウントパス:実際の URL は app.use() の設定に依存(例:app.use('/api/test', testRoutes) など)。
  • 静的配信res.sendFile() のベースは __dirname/../public/。デプロイ時の相対位置に留意。