🖼️ アバター
アバターは、APIレスポンスで保存されたアバターの参照を署名付きダウンロードURLに変換し、置換後の古いファイルを削除するための再利用可能なブロックを提供します。アバターフィーチャー、ハンドラー、ルート、バリデーター、サービスエクスポートはありません。
まずはここから
所有ドメインはこれらのエクスポートを独自のパイプラインに合成します。保存された avatarSchema の値を永続化し、オーナーを返す前に正規化してから、そのオーナーを更新した後に置換ファイルをクリーンアップします。以下のスニペットではホストがすでに fileStorageDriver を構成済みであると仮定しています。
アバターブロックごとに FileStorageDriver を渡します。normalizeAvatarOfOwner は objectId + '.' + extension(type) に対して署名付きURLを生成し、normalizeAvatarsOfOwners は各オーナーに対して同じ変換を実行し、deleteAvatarIfReplaced は前後のオブジェクトIDが異なる場合にのみそのキーを削除します。null アバターは null のままです。ストレージドライバの署名付きURLの有効期間とプロバイダー構成は file-storage ドライバー に委ねられます。
import { blocks } from '@nodeblocks/backend-sdk';
const storedAvatar = {
objectId: '550e8400-e29b-41d4-a716-446655440000',
type: 'image/png',
};
// `schemas.avatarSchema` は永続化された参照の契約です。
const result = await blocks.normalizeAvatarOfOwner(fileStorageDriver, {
id: 'owner-id',
avatar: storedAvatar,
});
if (result.isErr()) throw result.error;
// result.value.avatar は {type: 'image/png', url: '<署名付きダウンロードURL>'} です
正規化されたアバターでは元の保存済み objectId は返されません。署名に失敗するとブロックからではなく Err<AvatarBlockError> が生成されます。file-storage ドライバー のドライバー設定と エラー処理 の失敗した Result 値についてはそちらを参照してください。
よくあるタスク
| タスク | 最初のステップ | 契約 |
|---|---|---|
| アバターの参照を永続化する | avatarSchema | avatarSchema に保存された { objectId, type } 契約 |
| 1人のオーナーを安全に返す | normalizeAvatarOfOwner | normalizeAvatarOfOwner 経由の署名済み応答URL |
| 複数のオーナーを返す | normalizeAvatarsOfOwners | normalizeAvatarsOfOwners 経由の並列正規化 |
| 古いファイルを残さずにアバターを置換する | deleteAvatarIfReplaced | deleteAvatarIfReplaced 経由の条件付きクリーンアップ |
リファレンスマップ
| ページ | 目的 |
|---|---|
| ブロック | 正規化、クリーンアップ、結果、エラー契約。 |
| スキーマ | 保存済みアバター参照の検証。 |
関連モジュール
FileStorageDriver の設定には file-storage ドライバー を使用し、委譲された署名付きダウンロードと削除操作には file-storage ブロック を使用します。Profile サービス はすべてのアバターブロックを消費します。getOrganizationFollowersRoute と getProductLikersRoute も AvatarBlockError を 500 にマッピングし、フォローアーデータを正規化します。