メインコンテンツまでスキップ
バージョン: 0.13.0 (Previous)

👥 プロフィール

Profile サービスは、認証済み HTTP ルートを通じて、プロフィールレコード、アバター、プロフィールのフォロー、組織のフォロー、プロダクトへのいいねを管理します。

はじめに

読み書きする 4 つのコレクションを指定して services.profileService をマウントします。JSON リクエスト本文にはホストアプリケーションの express.json() ミドルウェアが必要です。Cookie トランスポートには、このルーターの前に cookie-parser も必要です。

import express from 'express';
import cookieParser from 'cookie-parser';
import { services } from '@nodeblocks/backend-sdk';

const app = express();
app.use(express.json());
app.use(cookieParser()); // `authMode` が 'cookie' の場合のみ必須。
app.use(
'/api',
services.profileService(
{ identities, profiles, organizations, products },
{
authSecrets: {
authEncSecret: process.env.AUTH_ENC_SECRET!,
authSignSecret: process.env.AUTH_SIGN_SECRET!,
},
authMode: 'bearer',
},
{ fileStorageDriver },
),
);
構成デフォルト / ソース動作効果
authSecrets.authEncSecret必須。ルートコンテキストに渡される認証ユーティリティの構成。
authSecrets.authSignSecret必須。ルートコンテキストに渡される認証ユーティリティの構成。
authMode省略または 'bearer'getBearerTokenInfo を選択保護されたルートは Bearer トークンを読み取ります。
authMode: 'cookie'設定時に getCookieTokenInfo を選択保護されたルートはアクセストークン Cookie を読み取ります。cookie-parser が必要です。
identity.typeIds指定時に管理者検査で読み取られる構成済み admin アイデンティティタイプ比較を有効にします。

よくあるタスク

タスク開始地点契約
プロフィールを作成または更新するcreateProfileFeaturecreateProfileFeatureupdateProfileSchemaupdateProfileRoute
プロフィール、そのフォロワー、または呼び出し元アイデンティティのプロフィールを読むgetProfileRoutegetProfileRoutegetProfileFollowersRoutefindProfilesByIdentityIdRoute
アバターアップロード URL を取得するgetAvatarUploadUrlFeaturegetAvatarUploadUrlFeaturegetSignedImageUploadUrlSchemagetAvatarUploadUrlRoute
フォローといいねの関係を管理するプロフィールブロックプロフィールブロックルートスキーマ
個別のエンドポイントを合成するcreateProfileFeatureプロフィール機能と以下のカスタム合成

Bearer HTTP ワークフロー

authMode を省略するか 'bearer' に設定した場合は、Bearer トークンを送信します。この保護された更新は、管理者またはプロフィール所有者に許可されます。

PROFILE_ID='profile-demo-001'
ACCESS_TOKEN='replace-with-a-valid-access-token'
curl -X PATCH "https://api.example.test/api/profiles/$PROFILE_ID" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
--data '{"name":"Example profile"}'

成功時、ルートは明示的なステータスディスクリプターなしで正規化済みプロフィールを返します。呼び出し元は管理者であるか PROFILE_ID を所有している必要があります。プロフィールの欠落は 404、ファイルストレージ失敗は 500 にマッピングされます。updateProfileSchemaupdateProfileRouteプロフィールバリデーターを参照してください。

authMode: 'cookie' を設定し、cookie-parser を登録して、Authorization ヘッダーの代わりに accessToken Cookie を送信します。同じ管理者または所有者の規則が適用されます。

PROFILE_ID='profile-demo-001'
ACCESS_TOKEN='replace-with-a-valid-access-token'
curl -X PATCH "https://api.example.test/api/profiles/$PROFILE_ID" \
-H "Cookie: accessToken=$ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
--data '{"name":"Example profile"}'

成功レスポンスは、明示的なステータスディスクリプターなしの正規化済みプロフィールです。Cookie がない場合、Cookie 認証は 401 をスローします。updateProfileRouteプロフィールバリデーターを参照してください。

カスタム機能の合成

この合成はフラグメントです。マウント前に profileService が提供するものと同じデータストア、構成、認証、省略可能なファイルストレージコンテキストが必要です。

import { partial } from 'ramda';
import { features, primitives, utils } from '@nodeblocks/backend-sdk';

const profileFeatureComposer = primitives.compose(features.createProfileFeature);
const profileRouter = primitives.defService(
partial(profileFeatureComposer, [{
authenticate: utils.getBearerTokenInfo,
configuration: { authSecrets },
dataStores: { identities, profiles, organizations, products },
fileStorageDriver,
}]),
);

app.use('/api', profileRouter);

リファレンスマップ

ページ目的
ブロック再利用可能なプロフィール操作とエラー。
機能スキーマからルートへのコンポーザー。
ハンドラーレガシーなルートパイプライン操作。
ルートパブリックエンドポイントマトリックス。
スキーマリクエストおよび保存形状の契約。
バリデーター認証および所有権ガード。

関連モジュール

Avatar はアバタースキーマと正規化処理を提供します。Identity はアイデンティティ検索とタイプ検査を提供します。OrganizationProduct は、フォローおよびいいねの対象リソースを提供します。共通バリデーター は共通ガードを、ファイルストレージ は署名付きアップロード、正規化、削除の動作を提供します。