変更履歴 API(監査ログ)
:LiTarget: 用途
誰がいつ何を変更したかを記録する変更履歴 API。GET で時系列取得・POST で追加。
:LiSparkle: 特徴
- 全変更の自動記録
- ユーザー別フィルタ
- 時系列ソート
- CSV出力
:LiCode: 実コード(SCALE Base より自動抽出)
:LiInfo:
scale-crm:functions/api/changes.tsの中身そのもの。コピペ即可。
// GET /api/changes?since=<ISO8601>
// 指定時刻以降に更新されたキーを返す(30秒ポーリング用)
import { corsResponse, corsError, handleOptions } from '../_lib/cors';
interface Env { DB: D1Database }
export const onRequestOptions = () => handleOptions();
export const onRequestGet: PagesFunction<Env> = async ({ request, env }) => {
try {
const url = new URL(request.url);
const since = url.searchParams.get('since') || new Date(Date.now() - 60000).toISOString();
const limit = parseInt(url.searchParams.get('limit') || '500', 10);
const { results } = await env.DB.prepare(
'SELECT key, value, updated_at, updated_by FROM app_data WHERE updated_at > ? ORDER BY updated_at LIMIT ?'
).bind(since, limit).all();
return corsResponse({
ok: true,
since,
now: new Date().toISOString(),
count: results.length,
changes: results,
});
} catch (e: any) {
return corsError(e.message);
}
};
:LiFolder: ソースファイルのパス
/Users/oogushiyuuki/株式会社SCALE/scale-lead/functions/api/changes.ts
:LiHandPointer: 使い方
対象プロジェクトに該当ファイルをコピーして、props を流し込むだけ。
:LiAlertCircle: 注意事項
- 依存パッケージを忘れず追加