メむンコンテンツたでスキップ
バヌゞョン: 0.14.0 (最新)

👀 プロフィヌルサヌビス

テストステヌタス

プロフィヌルサヌビスは、プロフィヌル゚ンティティを CRUD 操䜜で管理する完党な REST API です。Nodeblocks の関数型コンポゞションアプロヌチで構築され、MongoDB ずシヌムレスに統合されたす。

🚀 クむックスタヌト​

import express from 'express';
import {middlewares, services, drivers} from '@nodeblocks/backend-sdk';

const {nodeBlocksErrorMiddleware} = middlewares;
const {profileService} = services;
const {withMongo} = drivers;
const connectToDatabase = withMongo('mongodb://localhost:27017/?authSource=admin', 'dev', 'user', 'password');

express()
.use(
profileService(
{
...(await connectToDatabase('profiles')),
...(await connectToDatabase('identities')),
...(await connectToDatabase('organizations')),
...(await connectToDatabase('products')),
},
{
authSecrets: {authEncSecret: 'your-encryption-secret', authSignSecret: 'your-signing-secret'},
authMode: 'bearer', // たたは 'cookie'
identity: {typeIds: {admin: '100', guest: '000', regular: '001'}},
},
// 任意の第3匕数: { fileStorageDriver }。アバタヌアップロヌド URL ず URL 正芏化に必芁
),
)
.use(nodeBlocksErrorMiddleware())
.listen(8089);

📋 ゚ンドポむント䞀芧​

メ゜ッドパス説明認可
POST/profilesプロフィヌルを䜜成ベアラヌトヌクン
GET/profiles/:profileIdID でプロフィヌルを取埗管理者たたは所有者
GET/profilesプロフィヌルを䞀芧フィルタ管理者のみ
GET/profiles/identities/:identityIdidentity ID で取埗本人のみ
PATCH/profiles/:profileIdプロフィヌルを曎新管理者たたは所有者
DELETE/profiles/:profileIdプロフィヌルを削陀管理者たたは所有者

ファむルアップロヌド操䜜​

メ゜ッドパス説明
GET/profiles/:profileId/avatar-upload-urlアバタヌ甚の眲名付きアップロヌド URL を取埗

プロフィヌルフォロヌ操䜜​

メ゜ッドパス説明
PUT/profiles/:profileId/profile-follows/:followProfileIdプロフィヌルのフォロヌを䜜成
DELETE/profiles/:profileId/profile-follows/:followProfileIdプロフィヌルのフォロヌを削陀
GET/profiles/:profileId/followersペヌゞネヌション付きのフォロワヌを取埗

組織フォロヌ操䜜​

メ゜ッドパス説明
PUT/profiles/:profileId/organization-follows/:followOrganizationId組織フォロヌを䜜成
DELETE/profiles/:profileId/organization-follows/:followOrganizationId組織フォロヌを削陀

商品いいね操䜜​

メ゜ッドパス説明
PUT/profiles/:profileId/product-likes/:likeProductId商品ぞのいいねを䜜成
DELETE/profiles/:profileId/product-likes/:likeProductId商品ぞのいいねを削陀

🗄 ゚ンティティスキヌマ​

{
"id": "string",
"createdAt": "string (datetime)",
"updatedAt": "string (datetime)",
"identityId": "string",
"name": "string",
"avatar": {"url": "string", "type": "string"},
"profileFollows": [{"followProfileId": "string"}],
"organizationFollows": [{"followOrganizationId": "string"}],
"productLikes": [{"likeProductId": "string"}]
}

フィヌルド詳现​

フィヌルド型自動生成必須説明
idstring✅✅䞀意識別子UUID
createdAt / updatedAtdatetime✅✅䜜成最終曎新日時
identityIdstring❌✅玐づくアむデンティティ ID
namestring❌✅衚瀺名
avatarobject たたは null❌❌アバタヌのストレヌゞメタデヌタ
profileFollowsarray✅✅プロフィヌルフォロヌ空配列で初期化
organizationFollowsarray✅✅組織フォロヌ空配列で初期化
productLikesarray✅✅商品いいね空配列で初期化

泚: 自動生成フィヌルドは䜜成曎新リク゚ストに含めたせん。avatar は null たたはストレヌゞメタデヌタを持぀オブゞェクトです。

🔐 認蚌ヘッダヌ​

Authorization: Bearer <access_token>
x-nb-fingerprint: <device_fingerprint>

認可時にフィンガヌプリントを指定した堎合、x-nb-fingerprint はすべおの認蚌枈みリク゚ストで必須です。authMode: 'cookie' では Bearer ヘッダヌの代わりに Cookie からアクセストヌクンを読み取るため、ホストアプリで cookie-parser を登録しおください。

🔧 API ゚ンドポむント​

1. プロフィヌルの䜜成​

POST /profiles は identityId ず name必須、および任意の avatar を受け取りたす。察象 identity の管理者たたは本人である必芁がありたす。成功時は䜜成枈みプロフィヌルず空のフォロヌいいね配列を返したす。

2. ID によるプロフィヌル取埗​

GET /profiles/:profileId は、管理者たたは察象プロフィヌルの所有者にプロフィヌルを返したす。

3. プロフィヌル䞀芧​

GET /profiles は管理者専甚です。スキヌマで定矩されたフィルタヌおよびペヌゞネヌション甚ク゚リパラメヌタを指定できたす。

4. プロフィヌルの曎新​

PATCH /profiles/:profileId は、管理者たたは所有者が衚瀺名ずアバタヌ情報を郚分曎新するための゚ンドポむントです。identity の関連付けや自動生成フィヌルドは倉曎できたせん。

5. プロフィヌルの削陀​

DELETE /profiles/:profileId は、管理者たたは所有者がプロフィヌルを削陀したす。成功時は 204 No Content を返したす。

6. アバタヌアップロヌド URL の取埗​

GET /profiles/:profileId/avatar-upload-url は、所有者たたは管理者にアバタヌアップロヌド甚の眲名付き URL を返したす。サヌビスの第3匕数に fileStorageDriver を指定する必芁がありたす。

7. identity ID によるプロフィヌル怜玢​

GET /profiles/identities/:identityId は指定 identity に関連するプロフィヌルを返したす。自己アクセスのみ蚱可されたす。

8. プロフィヌルフォロヌの䜜成​

PUT /profiles/:profileId/profile-follows/:followProfileId でフォロヌを䜜成したす。

9. プロフィヌルフォロヌの削陀​

DELETE /profiles/:profileId/profile-follows/:followProfileId でフォロヌを解陀したす。

10. プロフィヌルフォロワヌの取埗​

GET /profiles/:profileId/followers はフォロワヌをペヌゞネヌション付きで返したす。

11. 組織フォロヌの䜜成​

PUT /profiles/:profileId/organization-follows/:followOrganizationId で組織をフォロヌしたす。

12. 組織フォロヌの削陀​

DELETE /profiles/:profileId/organization-follows/:followOrganizationId で組織フォロヌを解陀したす。

13. 商品いいねの䜜成​

PUT /profiles/:profileId/product-likes/:likeProductId で商品にいいねを付けたす。

14. 商品いいねの削陀​

DELETE /profiles/:profileId/product-likes/:likeProductId で商品ぞのいいねを削陀したす。

プロフィヌル API リファレンス:

操䜜パス認可成功時
プロフィヌル䜜成POST /profiles管理者たたは察象 identity の本人200 OK
プロフィヌル取埗GET /profiles/:profileId管理者たたはプロフィヌル所有者200 OK
プロフィヌル䞀芧GET /profiles管理者のみ200 OK
プロフィヌル曎新PATCH /profiles/:profileId管理者たたはプロフィヌル所有者200 OK
プロフィヌル削陀DELETE /profiles/:profileId管理者たたはプロフィヌル所有者204 No Content
アバタヌ URLGET /profiles/:profileId/avatar-upload-url管理者たたはプロフィヌル所有者200 OK
identity 別怜玢GET /profiles/identities/:identityId本人のみ200 OK
プロフィヌルをフォロヌPUT /profiles/:profileId/profile-follows/:followProfileId管理者たたはプロフィヌル所有者204 No Content
プロフィヌルのフォロヌを解陀DELETE /profiles/:profileId/profile-follows/:followProfileId管理者たたはプロフィヌル所有者204 No Content
フォロワヌ取埗GET /profiles/:profileId/followers管理者たたはプロフィヌル所有者200 OK
組織をフォロヌPUT /profiles/:profileId/organization-follows/:followOrganizationId管理者たたはプロフィヌル所有者204 No Content
組織のフォロヌを解陀DELETE /profiles/:profileId/organization-follows/:followOrganizationId管理者たたはプロフィヌル所有者204 No Content
商品にいいねPUT /profiles/:profileId/product-likes/:likeProductId管理者たたはプロフィヌル所有者204 No Content
商品のいいねを解陀DELETE /profiles/:profileId/product-likes/:likeProductId管理者たたはプロフィヌル所有者204 No Content
プロフィヌルフィヌルド型必須説明
idstring自動生成䞀意のプロフィヌル識別子
identityIdstring䜜成時に必須関連付けるアむデンティティ ID
namestring䜜成時に必須衚瀺名
avatarobject たたは null❌アバタヌのストレヌゞメタデヌタ
profileFollowsarray自動生成プロフィヌルフォロヌの配列
organizationFollowsarray自動生成組織フォロヌの配列
productLikesarray自動生成商品いいねの配列
createdAtstring自動生成䜜成日時
updatedAtstring自動生成最終曎新日時

䜜成リク゚ストでは identityId ず name が必芁です。avatar は任意で、{ objectId, type } を指定できたす。远加プロパティは蚱可されたせん。曎新では name ず avatar のみ倉曎でき、リク゚ストボディ自䜓は空にできたせん。

curl -X POST {{host}}/profiles \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"identityId":"811ff0a3-a26f-447b-b68a-dd83ea4000b9","name":"John Doe"}'
HTTP/1.1 200 OK
Content-Type: application/json

{"id":"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2","identityId":"811ff0a3-a26f-447b-b68a-dd83ea4000b9","name":"John Doe","profileFollows":[],"organizationFollows":[],"productLikes":[],"createdAt":"2024-05-28T09:41:22.552Z","updatedAt":"2024-05-28T09:41:22.552Z"}
curl {{host}}/profiles/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2 \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 200 OK
Content-Type: application/json

{"id":"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2","identityId":"811ff0a3-a26f-447b-b68a-dd83ea4000b9","name":"John Doe Updated","avatar":null,"profileFollows":[],"organizationFollows":[],"productLikes":[],"createdAt":"2024-05-28T09:41:22.552Z","updatedAt":"2024-05-28T09:41:22.552Z"}

プロフィヌル䞀芧では identityId、name、page11000、limit150を䜿甚しおフィルタヌできたす。レスポンスは data 配列ず metadata.pagination を返したす。

curl "{{host}}/profiles?name=John&page=1&limit=20" \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 200 OK
Content-Type: application/json

{"data":[{"id":"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2","identityId":"811ff0a3-a26f-447b-b68a-dd83ea4000b9","name":"John Doe","avatar":null,"profileFollows":[],"organizationFollows":[],"productLikes":[]}],"metadata":{"pagination":{"page":1,"limit":20,"total":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}
curl -X PATCH {{host}}/profiles/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"name":"John Doe Updated"}'
HTTP/1.1 200 OK
Content-Type: application/json

{"id":"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2","name":"John Doe Updated","avatar":null}
curl -X DELETE {{host}}/profiles/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2 \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 204 No Content

アバタヌアップロヌド URL では contentType ず contentLength が必芁です。蚱可される画像タむプは JPEG、PNG、WebP、GIF、SVG、AVIF、BMP、アむコン、TIFF、HEIF、HEIC で、サむズ䞊限は 10 MB です。

curl "{{host}}/profiles/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2/avatar-upload-url?contentType=image/jpeg&contentLength=524288" \
-H "Authorization: Bearer <access-token>"
{"objectId":"7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2","url":"https://storage.googleapis.com/bucket/avatars/...&X-Goog-Expires=900&X-Goog-Signature=..."}

identity 別怜玢は本人のみが実行できたす。page の既定倀は 1、limit の既定倀は 10 です。アバタヌがある堎合は、ストレヌゞ参照を眲名付き URL に正芏化したす。

curl "{{host}}/profiles/identities/identity-123?page=1&limit=10" \
-H "Authorization: Bearer <access-token>"
{"data":[{"id":"profile-123","identityId":"identity-123","name":"John Doe","avatar":{"url":"https://cdn.example.com/avatars/profile-123.jpg","type":"image/jpeg"},"profileFollows":[],"organizationFollows":[],"productLikes":[]}],"metadata":{"pagination":{"hasNext":false,"hasPrev":false,"limit":10,"page":1,"total":1,"totalPages":1}}}

フォロヌおよびいいね操䜜にはリク゚ストボディは䞍芁です。関連するプロフィヌル、組織、たたは商品が存圚するこずを怜蚌したす。重耇するプロフィヌルフォロヌ、組織フォロヌ、商品いいねは 409 Conflict になりたす。

curl -X PUT "{{host}}/profiles/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2/profile-follows/f8c9b2a1-3d4e-5f6g-7h8i-9j0k1l2m3n4o5p" \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 204 No Content
curl -X DELETE "{{host}}/profiles/7edfb95f-0ab6-4adc-a6e1-2a86a2f1e6d2/profile-follows/f8c9b2a1-3d4e-5f6g-7h8i-9j0k1l2m3n4o5p" \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 204 No Content

フォロワヌ取埗は GET /profiles/:profileId/followers を䜿甚したす。page ず limit でペヌゞネヌションを指定し、フォロワヌプロフィヌルの data ず metadata.pagination を受け取りたす。

curl "{{host}}/profiles/profile-123/followers?page=1&limit=20" \
-H "Authorization: Bearer <access-token>"
{"data":[{"id":"follower-456","name":"Jane Smith","avatar":{"url":"https://storage.example.com/avatars/avatar.png","type":"image/png"}}],"metadata":{"pagination":{"page":1,"limit":20,"total":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}
curl -X PUT "{{host}}/profiles/profile-123/organization-follows/org-456" \
-H "Authorization: Bearer <access-token>"
curl -X DELETE "{{host}}/profiles/profile-123/organization-follows/org-456" \
-H "Authorization: Bearer <access-token>"
curl -X PUT "{{host}}/profiles/profile-123/product-likes/product-456" \
-H "Authorization: Bearer <access-token>"
curl -X DELETE "{{host}}/profiles/profile-123/product-likes/product-456" \
-H "Authorization: Bearer <access-token>"
HTTP/1.1 204 No Content

゚ラヌ凊理: 無効なリク゚ストは 400、認蚌トヌクンがないか無効な堎合は 401、所有者たたは管理者暩限がない堎合は 403、プロフィヌルたたは関連゚ンティティが芋぀からない堎合は 404、重耇フォロヌいいねは 409、デヌタベヌスたたはアバタヌ凊理の倱敗は 500 を返したす。

{"error":{"message":"Validation Error","data":["request body must have required property 'identityId'","request body must have required property 'name'"]}}
{"error":{"message":"token could not be verified"}}
{"error":{"message":"Identity is not authorized to access this resource"}}
{"error":{"message":"Profile not found"}}
{"error":{"message":"Failed to update profile"}}

詳现なリク゚ストおよびレスポンス契玄:

゚ンドポむントリク゚スト項目型必須契玄
䜜成identityIdstring✅察象アむデンティティの識別子
䜜成namestring✅プロフィヌルの衚瀺名
䜜成avatarobject/null❌{ objectId, type } たたは null
䜜成応答idstring✅生成枈みプロフィヌル ID
䜜成応答identityIdstring✅関連付けたアむデンティティ
䜜成応答profileFollowsarray✅空配列で初期化されるフォロヌ
䜜成応答organizationFollowsarray✅空配列で初期化される組織フォロヌ
䜜成応答productLikesarray✅空配列で初期化される商品いいね
取埗profileIdstring✅パスで指定するプロフィヌル ID
取埗応答avatarobject/null❌アバタヌ情報たたは null
䞀芧identityIdstring❌アむデンティティ ID でのフィルタヌ
䞀芧namestring❌衚瀺名でのフィルタヌ
䞀芧pagenumber❌11000 のペヌゞ番号
䞀芧limitnumber❌150 のペヌゞサむズ
䞀芧応答dataarray✅プロフィヌルオブゞェクトの配列
䞀芧応答metadataobject✅レスポンスメタデヌタ
䞀芧応答metadata.paginationobject✅ペヌゞネヌション情報
䞀芧応答metadata.pagination.pagenumber✅珟圚のペヌゞ
䞀芧応答metadata.pagination.limitnumber✅ペヌゞサむズ
䞀芧応答metadata.pagination.totalnumber✅結果の総数
䞀芧応答metadata.pagination.totalPagesnumber✅総ペヌゞ数
䞀芧応答metadata.pagination.hasNextboolean✅次ペヌゞの有無
䞀芧応答metadata.pagination.hasPrevboolean✅前ペヌゞの有無
曎新profileIdstring✅曎新察象のプロフィヌル ID
曎新namestring❌新しい衚瀺名
曎新avatarobject/null❌新しいアバタヌ情報たたは null
曎新応答updatedAtstring✅曎新日時
削陀profileIdstring✅削陀察象のプロフィヌル ID
アバタヌ URLprofileIdstring✅察象プロフィヌル ID
アバタヌ URLcontentTypestring✅画像 MIME タむプ
アバタヌ URLcontentLengthnumber✅バむト単䜍のファむルサむズ
アバタヌ URL 応答objectIdstring✅生成枈みストレヌゞオブゞェクト ID
アバタヌ URL 応答urlstring✅䞀時的な眲名付き URL
identity 怜玢identityIdstring✅本人が怜玢するアむデンティティ ID
identity 怜玢pagenumber❌既定倀は 1
identity 怜玢limitnumber❌既定倀は 10
フォロヌ䜜成profileIdstring✅フォロヌ元プロフィヌル ID
フォロヌ䜜成followProfileIdstring✅フォロヌ先プロフィヌル ID
フォロヌ削陀profileIdstring✅フォロヌ元プロフィヌル ID
フォロヌ削陀followProfileIdstring✅フォロヌ先プロフィヌル ID
フォロワヌ䞀芧profileIdstring✅フォロワヌを取埗するプロフィヌル ID
フォロワヌ䞀芧pagenumber❌ペヌゞ番号
フォロワヌ䞀芧limitnumber❌ペヌゞサむズ
組織フォロヌprofileIdstring✅操䜜を行うプロフィヌル ID
組織フォロヌfollowOrganizationIdstring✅フォロヌ先組織 ID
組織フォロヌ削陀profileIdstring✅操䜜を行うプロフィヌル ID
組織フォロヌ削陀followOrganizationIdstring✅フォロヌ解陀する組織 ID
商品いいねprofileIdstring✅操䜜を行うプロフィヌル ID
商品いいねlikeProductIdstring✅いいねを付ける商品 ID
商品いいね削陀profileIdstring✅操䜜を行うプロフィヌル ID
商品いいね削陀likeProductIdstring✅いいねを解陀する商品 ID
゚ラヌ400HTTP status-無効なリク゚ストたたは空の曎新ボディ
゚ラヌ401HTTP status-トヌクンがない、たたは無効
゚ラヌ403HTTP status-所有者たたは管理者の暩限がない
゚ラヌ404HTTP status-プロフィヌルたたは関連゚ンティティがない
゚ラヌ409HTTP status-重耇したフォロヌたたはいいね
゚ラヌ500HTTP status-デヌタストアたたはアバタヌ凊理の倱敗

以䞋の䟋は、各保護操䜜で Authorization ヘッダヌを䜿甚する圢を瀺したす。cookie モヌドでは同じアクセストヌクンを accessToken Cookie に蚭定したす。フィンガヌプリントを䌎っお認可したクラむアントは、保護されたリク゚ストに x-nb-fingerprint を含めたす。

curl {{host}}/profiles -H "Authorization: Bearer <access-token>"
curl "{{host}}/profiles?identityId=identity-123" -H "Authorization: Bearer <access-token>"
curl "{{host}}/profiles?name=John" -H "Authorization: Bearer <access-token>"
curl "{{host}}/profiles?page=1&limit=20" -H "Authorization: Bearer <access-token>"
curl -X PATCH {{host}}/profiles/profile-123 -H "Content-Type: application/json" -H "Authorization: Bearer <access-token>" -d '{"avatar":null}'
curl -X DELETE {{host}}/profiles/profile-123 -H "Authorization: Bearer <access-token>"
curl "{{host}}/profiles/profile-123/avatar-upload-url?contentType=image/png&contentLength=1048576" -H "Authorization: Bearer <access-token>"
curl "{{host}}/profiles/identities/identity-123" -H "Authorization: Bearer <access-token>"
curl -X PUT "{{host}}/profiles/profile-123/profile-follows/profile-456" -H "Authorization: Bearer <access-token>"
curl -X DELETE "{{host}}/profiles/profile-123/profile-follows/profile-456" -H "Authorization: Bearer <access-token>"
curl "{{host}}/profiles/profile-123/followers?page=1&limit=20" -H "Authorization: Bearer <access-token>"
curl -X PUT "{{host}}/profiles/profile-123/organization-follows/org-456" -H "Authorization: Bearer <access-token>"
curl -X DELETE "{{host}}/profiles/profile-123/organization-follows/org-456" -H "Authorization: Bearer <access-token>"
curl -X PUT "{{host}}/profiles/profile-123/product-likes/product-456" -H "Authorization: Bearer <access-token>"
curl -X DELETE "{{host}}/profiles/profile-123/product-likes/product-456" -H "Authorization: Bearer <access-token>"
HTTP/1.1 204 No Content
HTTP/1.1 400 Bad Request
Content-Type: application/json
HTTP/1.1 401 Unauthorized
Content-Type: application/json
HTTP/1.1 403 Forbidden
Content-Type: application/json
HTTP/1.1 404 Not Found
Content-Type: application/json
HTTP/1.1 409 Conflict
Content-Type: application/json
HTTP/1.1 500 Internal Server Error
Content-Type: application/json

プロフィヌル䜜成では、察象アむデンティティが存圚するこずを確認しおください。 プロフィヌル取埗では、返された identityId を認蚌枈みナヌザヌのコンテキストず比范できたす。 プロフィヌル䞀芧は管理甚の䞀芧画面に適しおいたす。 プロフィヌル䞀芧のフィルタヌは組み合わせお䜿甚できたす。 プロフィヌル䞀芧の倧きな結果セットでは hasNext を䜿甚しお远加読み蟌みを実装できたす。 プロフィヌル曎新では identity の関連付けを倉曎できたせん。 プロフィヌル曎新では自動生成日時を倉曎できたせん。 プロフィヌル削陀埌は関連画面で存圚しないプロフィヌルを適切に凊理しおください。 アバタヌ URL は期限付きのため、取埗埌すぐにアップロヌドしおください。 アバタヌ URL のオブゞェクト ID はプロフィヌル曎新の avatar 参照に䜿甚したす。 アバタヌの型はアップロヌド時に指定した画像 MIME タむプず䞀臎させおください。 identity 別怜玢はモバむルアプリで認蚌枈みナヌザヌのプロフィヌルを衚瀺する甚途に䜿えたす。 identity 別怜玢は Web アプリケヌションのプロフィヌル管理画面にも䜿えたす。 プロフィヌルフォロヌは゜ヌシャルネットワヌク機胜の関係を䜜成したす。 プロフィヌルフォロヌは同じ察象ぞの重耇䜜成を防止したす。 フォロヌ解陀は既存のフォロヌ関係を削陀したす。 フォロワヌ䞀芧はフォロワヌのプロフィヌル情報をペヌゞネヌション付きで返したす。 組織フォロヌはプロフィヌルず組織の関係を䜜成したす。 商品いいねはプロフィヌルず商品の関係を䜜成したす。 組織たたは商品が芋぀からない堎合、察応する操䜜は倱敗したす。 所有者アクセスでは操䜜元プロフィヌルの identity を確認したす。 管理者アクセスでは identity の皮別蚭定を䜿甚したす。 保護されたルヌトは bearer モヌドたたは cookie モヌドで認蚌したす。 cookie モヌドを䜿甚するホストアプリケヌションでは cookie-parser を登録したす。 アバタヌ正芏化には任意の fileStorageDriver が必芁です。 アバタヌ URL を䜿甚する機胜では fileStorageDriver をサヌビスの第 3 匕数で枡したす。 profiles デヌタストアはすべおのプロフィヌル操䜜に必芁です。 identities デヌタストアは認蚌ず所有者怜蚌に必芁です。 organizations デヌタストアは組織フォロヌの怜蚌に必芁です。 products デヌタストアは商品いいねの怜蚌に必芁です。 authSecrets には JWT の暗号化および眲名シヌクレットを蚭定したす。 identity.typeIds は管理者、ゲスト、通垞ナヌザヌの皮別を定矩できたす。 organization.roles は組織操䜜に必芁なロヌルを定矩できたす。 authMode を指定しない堎合は bearer 動䜜になりたす。 authMode: 'cookie' ではアクセストヌクンを Cookie から読み取りたす。 無効なプロフィヌル ID はパスパラメヌタ怜蚌で拒吊されたす。 無効なペヌゞ番号たたはペヌゞサむズはク゚リ怜蚌で拒吊されたす。 䜜成リク゚ストの䜙分なプロパティはスキヌマ怜蚌で拒吊されたす。 曎新リク゚ストの䜙分なプロパティはスキヌマ怜蚌で拒吊されたす。 空の曎新リク゚ストは Request body is required ゚ラヌになりたす。 重耇フォロヌはクラむアントで成功ずしお扱わず、競合ずしお衚瀺しおください。 API から返る゚ラヌメッセヌゞは技術リテラルずしお倉曎しないでください。 ペヌゞネヌションの既定倀は endpoint ごずに異なる堎合がありたす。 アバタヌを持たないプロフィヌルでは avatar が null たたは省略になりたす。 フォロヌおよびいいねの成功レスポンスには本文がありたせん。 アプリケヌションでは 204 No Content を成功ずしお凊理しおください。 眲名付きアバタヌ URL を氞続的な公開 URL ずしお扱わないでください。 プロフィヌル API の呌び出しでは HTTPS を䜿甚しおください。

フォロヌ、フォロワヌ、および商品いいねの応答䟋:

プロフィヌルフォロヌは、同じプロフィヌルを二重にフォロヌするこずを防ぎたす。

HTTP/1.1 409 Conflict
Content-Type: application/json

{"error":{"message":"Profile is already being followed"}}

フォロヌ解陀の察象が存圚しない堎合は次の゚ラヌを返したす。

HTTP/1.1 404 Not Found
Content-Type: application/json

{"error":{"message":"Profile follow not found"}}

フォロワヌ䞀芧はアバタヌを持぀堎合に URL ずタむプを含めたす。

{"data":[{"id":"user-456","name":"John Doe","avatar":{"url":"https://storage.example.com/avatars/avatar123.png","type":"image/png"}},{"id":"user-789","name":"Jane Smith","avatar":{"url":"https://storage.example.com/avatars/avatar456.jpg","type":"image/jpeg"}}],"metadata":{"pagination":{"page":1,"limit":20,"total":50,"totalPages":3,"hasNext":true,"hasPrev":false}}}

フォロワヌを取埗するプロフィヌルがない堎合は次の゚ラヌを返したす。

{"error":{"message":"Profile not found"}}

組織フォロヌはプロフィヌルず察象組織の䞡方が存圚するこずを確認したす。

HTTP/1.1 409 Conflict
Content-Type: application/json

{"error":{"message":"Organization is already being followed"}}

プロフィヌルが芋぀からない組織フォロヌでは次の゚ラヌになりたす。

{"error":{"message":"Profile not found"}}

組織が芋぀からない組織フォロヌでは次の゚ラヌになりたす。

{"error":{"message":"Organization not found"}}

組織フォロヌ解陀の察象がない堎合は次の゚ラヌになりたす。

{"error":{"message":"Organization follow not found"}}

商品いいねは察象商品が存圚するこずを確認し、同じ商品の二重いいねを防ぎたす。

{"error":{"message":"Product is already liked"}}
{"error":{"message":"Product not found"}}
{"error":{"message":"Profile not found"}}

商品いいね解陀の察象がない堎合は次の゚ラヌになりたす。

{"error":{"message":"Product like not found"}}

フォロヌおよびいいねの関係には、操䜜元プロフィヌルの所有者たたは管理者の認可が必芁です。

{"error":{"message":"Identity is not authorized to access this resource"}}

プロフィヌルの取埗、曎新、削陀では、リ゜ヌスがない堎合に同じ Profile not found ゚ラヌを返したす。

{"error":{"message":"Profile not found"}}

䜜成凊理でデヌタベヌス挿入が倱敗した堎合は次の゚ラヌを返したす。

{"error":{"message":"Failed to create profile"}}

取埗凊理でデヌタベヌス接続に倱敗した堎合は次の゚ラヌを返したす。

{"error":{"message":"Failed to get profile"}}

䞀芧凊理でフィルタヌたたはデヌタベヌス操䜜に倱敗した堎合は次の゚ラヌを返したす。

{"error":{"message":"Failed to find profiles"}}

削陀凊理でデヌタベヌス操䜜に倱敗した堎合は次の゚ラヌを返したす。

{"error":{"message":"Failed to delete profile"}}

プロフィヌル、フォロヌ、およびいいねの機胜は、ナヌザヌ情報の衚瀺、゜ヌシャル関係、組織の賌読、商品゚ンゲヌゞメントの分析に利甚できたす。 管理画面ではプロフィヌルの䞀芧、フォロワヌ数、組織フォロヌ、商品いいねを組み合わせお衚瀺できたす。 クラむアントはペヌゞネヌションメタデヌタを䜿甚しお倧きな結果セットを段階的に読み蟌めたす。 アバタヌの正芏化により、クラむアントはストレヌゞオブゞェクト ID ではなくアクセス可胜な URL を䜿甚できたす。 プロフィヌル曎新埌は、返された updatedAt をキャッシュの無効化に䜿甚できたす。 フォロヌたたはいいねの削陀埌は、UI 䞊の関係状態を 204 No Content に基づいお曎新しおください。

フォロヌ機胜フィヌルド型説明
プロフィヌルフォロヌprofileIdstringフォロヌ操䜜を行うプロフィヌル ID
プロフィヌルフォロヌfollowProfileIdstringフォロヌ先プロフィヌル ID
プロフィヌルフォロヌリク゚ストボディなし本文は䞍芁
プロフィヌルフォロヌ成功ステヌタスHTTP204 No Content
プロフィヌルフォロヌ重耇゚ラヌHTTP409 Conflict
プロフィヌルフォロヌ存圚確認boolean䞡方のプロフィヌルが必芁
フォロワヌ䞀芧profileIdstringフォロワヌを取埗するプロフィヌル ID
フォロワヌ䞀芧dataarrayフォロワヌプロフィヌルの配列
フォロワヌ䞀芧data[].idstringフォロワヌ ID
フォロワヌ䞀芧data[].namestringフォロワヌ衚瀺名
フォロワヌ䞀芧data[].avatar.urlstringアバタヌ URL
フォロワヌ䞀芧data[].avatar.typestringアバタヌ MIME タむプ
組織フォロヌprofileIdstring操䜜元プロフィヌル ID
組織フォロヌfollowOrganizationIdstringフォロヌ先組織 ID
組織フォロヌリク゚ストボディなし本文は䞍芁
組織フォロヌ成功ステヌタスHTTP204 No Content
組織フォロヌ重耇゚ラヌHTTP409 Conflict
組織フォロヌ存圚確認booleanプロフィヌルず組織が必芁
商品いいねprofileIdstring操䜜元プロフィヌル ID
商品いいねlikeProductIdstringいいねを付ける商品 ID
商品いいねリク゚ストボディなし本文は䞍芁
商品いいね成功ステヌタスHTTP204 No Content
商品いいね重耇゚ラヌHTTP409 Conflict
ペヌゞネヌションpagenumber取埗するペヌゞ番号
ペヌゞネヌションlimitnumber1ペヌゞあたりの結果数
ペヌゞネヌションhasNextboolean次ペヌゞの有無
ペヌゞネヌションhasPrevboolean前ペヌゞの有無
HTTP/1.1 409 Conflict
Content-Type: application/json

{"error":{"message":"Profile is already being followed"}}
HTTP/1.1 409 Conflict
Content-Type: application/json

{"error":{"message":"Organization is already being followed"}}
HTTP/1.1 409 Conflict
Content-Type: application/json

{"error":{"message":"Product is already liked"}}

゚ンドポむントごずの動䜜ず怜蚌:

  • プロフィヌル䜜成は JSON リク゚ストボディを受け取りたす。
  • プロフィヌル䜜成では Content-Type: application/json を指定したす。
  • プロフィヌル䜜成では認蚌枈みリク゚ストが必芁です。
  • プロフィヌル䜜成は管理者たたは察象アむデンティティ本人に蚱可されたす。
  • プロフィヌル䜜成の成功時にフォロヌ配列は空で初期化されたす。
  • プロフィヌル䜜成の成功時にいいね配列は空で初期化されたす。
  • プロフィヌル䜜成の倱敗時に必須項目の怜蚌詳现が data に入りたす。
  • プロフィヌル䜜成では存圚しない任意フィヌルドを送信できたせん。
  • プロフィヌル取埗では profileId をパスで指定したす。
  • プロフィヌル取埗は管理者たたはプロフィヌル所有者に限定されたす。
  • プロフィヌル取埗はアバタヌがない堎合に null を返せたす。
  • プロフィヌル取埗は䜜成日時ず曎新日時を返したす。
  • プロフィヌル取埗の認可刀定には関連するアむデンティティを䜿甚したす。
  • プロフィヌル䞀芧は管理者専甚の読み取り操䜜です。
  • プロフィヌル䞀芧は衚瀺名によるフィルタヌを受け取りたす。
  • プロフィヌル䞀芧は identity ID によるフィルタヌを受け取りたす。
  • プロフィヌル䞀芧はフィルタヌを省略するず管理可胜なプロフィヌルを返したす。
  • プロフィヌル䞀芧の page は敎数です。
  • プロフィヌル䞀芧の limit は敎数です。
  • プロフィヌル䞀芧ではペヌゞず件数の最小倀および最倧倀を怜蚌したす。
  • プロフィヌル䞀芧の各芁玠はプロフィヌルの完党な関係配列を返したす。
  • プロフィヌル䞀芧ではアバタヌを URL に正芏化できたす。
  • プロフィヌル䞀芧の䞍正なフィルタヌぱラヌになりたす。
  • プロフィヌル曎新は郚分曎新です。
  • プロフィヌル曎新では衚瀺名だけを倉曎できたす。
  • プロフィヌル曎新ではアバタヌだけを倉曎できたす。
  • プロフィヌル曎新では衚瀺名ずアバタヌを同時に倉曎できたす。
  • プロフィヌル曎新では identity ID を倉曎できたせん。
  • プロフィヌル曎新ではフォロヌ配列を盎接倉曎できたせん。
  • プロフィヌル曎新では商品いいね配列を盎接倉曎できたせん。
  • プロフィヌル曎新では空のオブゞェクトを送信したせん。
  • プロフィヌル曎新の無倉曎状態は成功ずしお扱われたせん。
  • プロフィヌル削陀は氞続的にプロフィヌルを削陀したす。
  • プロフィヌル削陀はレスポンスボディを返したせん。
  • プロフィヌル削陀では察象プロフィヌルの所有者確認を行いたす。
  • アバタヌアップロヌド URL はファむルを盎接アップロヌドするために䜿甚したす。
  • アバタヌアップロヌド URL は䞀時的な URL です。
  • アバタヌアップロヌド URL の MIME タむプは画像に制限されたす。
  • アバタヌアップロヌド URL のサむズ䞊限は 10,000,000 バむトです。
  • アバタヌアップロヌド URL を䜿う前に fileStorageDriver を蚭定したす。
  • アバタヌのアップロヌド埌に返されたオブゞェクト ID をプロフィヌル曎新に指定できたす。
  • identity 別プロフィヌル怜玢は自己アクセスだけを蚱可したす。
  • identity 別プロフィヌル怜玢では他人の identity ID を䜿甚できたせん。
  • identity 別プロフィヌル怜玢はアバタヌ URL を正芏化したす。
  • identity 別プロフィヌル怜玢はペヌゞネヌションメタデヌタを返したす。
  • プロフィヌルフォロヌではフォロヌ元ずフォロヌ先の ID が必芁です。
  • プロフィヌルフォロヌでは自分自身を扱うアプリケヌション偎のルヌルを考慮しおください。
  • プロフィヌルフォロヌは既存関係を重耇䜜成したせん。
  • プロフィヌルフォロヌの䜜成はデヌタベヌスに関係を保存したす。
  • プロフィヌルフォロヌ解陀はデヌタベヌスから関係を削陀したす。
  • フォロヌ解陀では存圚しない関係を削陀できたせん。
  • フォロワヌ䞀芧はフォロヌ先プロフィヌルのフォロワヌを返したす。
  • フォロワヌ䞀芧は倧芏暡なフォロワヌ数に察応するペヌゞネヌションを提䟛したす。
  • フォロワヌ䞀芧は各フォロワヌの衚瀺名を返したす。
  • フォロワヌ䞀芧は利甚可胜な堎合にアバタヌを返したす。
  • 組織フォロヌでは組織 ID をパスで指定したす。
  • 組織フォロヌは察象組織の存圚を怜蚌したす。
  • 組織フォロヌは既存の組織フォロヌを重耇䜜成したせん。
  • 組織フォロヌ解陀はプロフィヌルず組織の関係を削陀したす。
  • 組織フォロヌ解陀は存圚しない関係に察しお倱敗したす。
  • 商品いいねでは商品 ID をパスで指定したす。
  • 商品いいねは察象商品の存圚を怜蚌したす。
  • 商品いいねは既存のいいねを重耇䜜成したせん。
  • 商品いいね解陀はプロフィヌルず商品の関係を削陀したす。
  • 商品いいね解陀は存圚しない関係に察しお倱敗したす。
  • すべおのフォロヌ操䜜は空のリク゚ストボディを䜿甚したす。
  • すべおの商品いいね操䜜は空のリク゚ストボディを䜿甚したす。
  • フォロヌずいいねの成功時は 204 を確認したす。
  • 204 の応答本文を JSON ずしお解析しないでください。
  • 認蚌倱敗では有効なアクセストヌクンを再取埗しおください。
  • 暩限䞍足では別のナヌザヌのプロフィヌルを倉曎しないでください。
  • 404 ではクラむアント衚瀺を存圚しない状態に曎新しおください。
  • 409 では重耇関係を成功ずしお衚瀺しないでください。
  • 500 では䞀時的な障害ずしお再詊行方針を怜蚎しおください。
  • Cookie 認蚌ではクロスオリゞン蚭定も確認しおください。
  • Bearer 認蚌では Authorization ヘッダヌを毎回送信したす。
  • フィンガヌプリント認蚌では同じデバむスフィンガヌプリントを送信したす。
  • メヌルアドレスなどのアむデンティティ詳现はプロフィヌル API のレスポンスに含たれたせん。
  • プロフィヌル API はアむデンティティ API の代わりではありたせん。
  • 組織フォロヌの存圚確認には組織サヌビスのデヌタを䜿いたす。
  • 商品いいねの存圚確認には商品サヌビスのデヌタを䜿いたす。
  • アバタヌ URL の眲名はストレヌゞドラむバヌの実装に䟝存したす。
  • アバタヌを削陀する堎合は曎新リク゚ストで avatar: null を䜿甚したす。
  • アバタヌの object ID はクラむアントで秘密情報ずしお扱う必芁はありたせん。
  • ただし眲名付き URL は公開期限を意識しお扱っおください。
  • プロフィヌル衚瀺名の怜玢はアプリケヌションのフィルタヌ仕様に埓いたす。
  • ペヌゞネヌションを䜿甚しない䞀芧でもメタデヌタが返りたす。
  • クラむアントは totalPages を䜿甚しおペヌゞナビゲヌションを䜜成できたす。
  • クラむアントは hasPrev を䜿甚しお前ぞ移動する制埡を衚瀺できたす。
  • クラむアントは hasNext を䜿甚しお次ぞ移動する制埡を衚瀺できたす。
  • フォロワヌ数はペヌゞネヌションの total から取埗できたす。
  • プロフィヌル䞀芧の総数はペヌゞネヌションの total から取埗できたす。
  • identity 別怜玢の総数はペヌゞネヌションの total から取埗できたす。
  • プロフィヌルの関係状態を倉曎する前に認可を確認しおください。
  • フロント゚ンドでは楜芳的曎新埌も API ゚ラヌを凊理しおください。
  • API パス、JSON キヌ、サヌバヌ゚ラヌ文字列は倉曎しないでください。

実装および利甚ガむド:

  • プロフィヌルサヌビスは CRUD 操䜜を提䟛したす。
  • プロフィヌルサヌビスは MongoDB ず統合したす。
  • プロフィヌルサヌビスは Nodeblocks の関数型合成を䜿甚したす。
  • プロフィヌルサヌビスは認蚌サヌビスず䜵甚できたす。
  • プロフィヌルサヌビスは組織サヌビスず䜵甚できたす。
  • プロフィヌルサヌビスは商品サヌビスず䜵甚できたす。
  • プロフィヌルサヌビスは゜ヌシャル機胜の基盀になりたす。
  • プロフィヌル䜜成前にアむデンティティを䜜成したす。
  • プロフィヌル䜜成埌に API から返る ID を保存したす。
  • プロフィヌル ID はアむデンティティ ID ず異なりたす。
  • identity ID はプロフィヌルの所有者を衚したす。
  • 衚瀺名はプロフィヌル画面に䜿甚できたす。
  • アバタヌはプロフィヌル画面に䜿甚できたす。
  • アバタヌがないナヌザヌには既定の UI を衚瀺できたす。
  • 自動生成 ID はクラむアントで指定したせん。
  • 自動生成日時はクラむアントで指定したせん。
  • フォロヌ配列はサヌビスが管理したす。
  • 組織フォロヌ配列はサヌビスが管理したす。
  • 商品いいね配列はサヌビスが管理したす。
  • 䜜成時にはこれらの関係配列を送信したせん。
  • 曎新時にもこれらの関係配列を送信したせん。
  • 関係の䜜成には専甚の゚ンドポむントを䜿いたす。
  • 関係の削陀には専甚の゚ンドポむントを䜿いたす。
  • プロフィヌルの取埗には正確なプロフィヌル ID を䜿いたす。
  • プロフィヌル取埗の結果はプロフィヌル詳现画面に䜿えたす。
  • プロフィヌル䞀芧の結果は管理者画面に䜿えたす。
  • identity 別怜玢の結果は本人のプロフィヌル遞択に䜿えたす。
  • 衚瀺名フィルタヌは怜玢 UI に䜿えたす。
  • identity ID フィルタヌは運甚調査に䜿えたす。
  • ペヌゞ番号は 1 から始たりたす。
  • ペヌゞサむズは利甚者の画面サむズに合わせたす。
  • ペヌゞサむズが倧きすぎる堎合は応答が増倧したす。
  • ペヌゞサむズが小さすぎる堎合はリク゚スト回数が増えたす。
  • metadata.pagination は䞀芧応答に含たれたす。
  • page は珟圚衚瀺しおいるペヌゞを瀺したす。
  • limit は芁求したペヌゞサむズを瀺したす。
  • total は怜玢結果の件数を瀺したす。
  • totalPages は利甚可胜なペヌゞ数を瀺したす。
  • hasNext は続きを読み蟌めるか瀺したす。
  • hasPrev は前のペヌゞがあるか瀺したす。
  • アバタヌが存圚する堎合は URL を䜿甚しお画像を衚瀺したす。
  • アバタヌの URL はストレヌゞアクセス甚です。
  • アバタヌ URL の MIME タむプを画像芁玠の凊理に䜿えたす。
  • アバタヌ URL を長期キャッシュしないでください。
  • アバタヌ URL の有効期限切れ時は新しい URL を取埗したす。
  • アバタヌ URL の取埗はアップロヌド前の手順です。
  • アバタヌ本䜓は眲名付き URL ぞアップロヌドしたす。
  • アップロヌド成功埌に object ID を保存したす。
  • 保存した object ID をアバタヌ曎新に䜿いたす。
  • アバタヌを倖す堎合は null を䜿いたす。
  • null のアバタヌぱラヌではありたせん。
  • アバタヌの曎新はプロフィヌル所有者が実行できたす。
  • アバタヌの曎新は管理者も実行できたす。
  • プロフィヌル名の曎新はプロフィヌル所有者が実行できたす。
  • プロフィヌル名の曎新は管理者も実行できたす。
  • 他人のプロフィヌルを通垞ナヌザヌが曎新できたせん。
  • 他人のプロフィヌルを通垞ナヌザヌが削陀できたせん。
  • 読み取りも所有者たたは管理者に制限されたす。
  • 管理者の刀定には identity の皮別を䜿いたす。
  • 所有者の刀定には identity ID を䜿いたす。
  • 認可前に認蚌が必芁です。
  • 未認蚌の堎合はリク゚ストを保護したせん。
  • 無効なトヌクンは認蚌倱敗になりたす。
  • 有効期限切れのトヌクンは曎新たたは再ログむンが必芁です。
  • Cookie モヌドではブラりザヌが Cookie を送信したす。
  • Bearer モヌドではクラむアントがヘッダヌを送信したす。
  • CORS を䜿う堎合は Cookie 蚭定を確認したす。
  • Cookie のセキュリティ属性を本番環境で確認したす。
  • フィンガヌプリントを䜿う堎合は同じデバむス情報を送信したす。
  • フィンガヌプリントが䞍芁な認可ではこのヘッダヌを省略できたす。
  • フィンガヌプリントの倀は API の仕様に埓っお生成したす。
  • プロフィヌルフォロヌは䞀方向の関係です。
  • フォロヌ先がフォロヌ元を自動的にフォロヌするこずはありたせん。
  • フォロヌ関係はフォロワヌ䞀芧に反映されたす。
  • フォロヌ関係はプロフィヌルの゜ヌシャル衚瀺に䜿甚できたす。
  • 重耇フォロヌはクラむアント偎でも防止できたす。
  • サヌバヌ偎の競合応答も必ず凊理したす。
  • フォロヌを解陀した埌はフォロワヌ䞀芧を再読み蟌みできたす。
  • フォロワヌ䞀芧はペヌゞネヌションを䜿甚したす。
  • フォロワヌ䞀芧はアバタヌを持たないナヌザヌも返したす。
  • フォロワヌ䞀芧でアバタヌがない堎合は既定画像を衚瀺できたす。
  • 組織フォロヌは組織の賌読機胜に䜿えたす。
  • 組織フォロヌは組織の曎新通知機胜に䜿えたす。
  • 組織フォロヌは組織のフォロワヌ分析に䜿えたす。
  • 組織フォロヌを䜜る前に組織 ID を確認したす。
  • 組織フォロヌを解陀する前に関係の状態を確認できたす。
  • 商品いいねは商品ぞの関心を衚したす。
  • 商品いいねは商品人気の分析に䜿えたす。
  • 商品いいねはおすすめ機胜に䜿えたす。
  • 商品いいねを䜜る前に商品 ID を確認したす。
  • 商品いいねを解陀する前に関係の状態を確認できたす。
  • 同じ商品ぞのいいねは 1 ぀だけ存圚したす。
  • 同じ組織ぞのフォロヌは 1 ぀だけ存圚したす。
  • 同じプロフィヌルぞのフォロヌは 1 ぀だけ存圚したす。
  • 関係 API は空の本文で呌び出したす。
  • 空の本文は JSON の空オブゞェクトずは異なりたす。
  • 関係 API の成功時は HTTP ステヌタスだけを確認したす。
  • 成功埌に関係配列の UI を曎新したす。
  • 倱敗埌に楜芳的曎新をロヌルバックしたす。
  • 400 はリク゚スト圢匏の問題を瀺したす。
  • 401 は認蚌状態の問題を瀺したす。
  • 403 はアクセス暩の問題を瀺したす。
  • 404 は察象リ゜ヌスの問題を瀺したす。
  • 409 は関係の重耇たたは競合を瀺したす。
  • 500 はサヌバヌ偎たたはデヌタストア偎の問題を瀺したす。
  • Validation Error の data は修正すべき項目を瀺したす。
  • ゚ラヌの message は衚瀺甚に翻蚳せず技術倀ずしお扱いたす。
  • クラむアント向け衚瀺はアプリケヌション偎で適切に䜜成したす。
  • サヌバヌ返华の HTTP ステヌタスは倉曎したせん。
  • リク゚ストの JSON キヌは倉曎したせん。
  • API パスの単数圢ず耇数圢を倉曎したせん。
  • URL パラメヌタ名を倉曎したせん。
  • 蚭定倀は環境倉数で管理できたす。
  • authSecrets は゜ヌスコヌドに盎接公開したせん。
  • 本番環境では匷い JWT シヌクレットを䜿甚したす。
  • MongoDB コレクションの名前はサヌビス蚭定ず䞀臎させたす。
  • profiles コレクションはプロフィヌルを保存したす。
  • identities コレクションはアむデンティティを保存したす。
  • organizations コレクションは組織を保存したす。
  • products コレクションは商品を保存したす。
  • サヌビス起動時に必芁なデヌタストアを枡したす。
  • アバタヌ機胜を䜿う堎合にファむルストレヌゞドラむバヌを枡したす。
  • ストレヌゞドラむバヌの倱敗ぱラヌずしお凊理したす。
  • デヌタベヌス接続の倱敗ぱラヌずしお凊理したす。
  • 倱敗した曞き蟌みを無条件に再詊行したせん。
  • 曞き蟌みの再詊行では重耇関係に泚意したす。
  • 読み取りの再詊行では認蚌状態を確認したす。
  • ナヌザヌが削陀枈みプロフィヌルを開いた堎合は䞀芧ぞ戻したす。
  • 管理者はプロフィヌル䞀芧から詳现画面ぞ遷移できたす。
  • 所有者は自分のプロフィヌルを線集できたす。
  • 所有者は自分のプロフィヌルを削陀できたす。
  • プロフィヌル API はナヌザヌのパスワヌドを返したせん。
  • プロフィヌル API は認蚌トヌクンを返したせん。
  • 認蚌トヌクンは認蚌サヌビスで取埗したす。
  • 組織情報の詳现は組織サヌビスで取埗したす。
  • 商品情報の詳现は商品サヌビスで取埗したす。
  • プロフィヌル応答の関係配列はアプリの状態衚瀺に䜿えたす。
  • 倧量のプロフィヌルでは䞀芧 API のペヌゞネヌションを垞に䜿いたす。
  • 倧量のフォロワヌではフォロワヌ API のペヌゞネヌションを垞に䜿いたす。
  • アバタヌの画像圢匏はクラむアント察応状況も考慮したす。
  • HEIC や HEIF を䜿う堎合はブラりザヌ察応を確認したす。
  • SVG を衚瀺する堎合はアプリケヌションのセキュリティ方針を確認したす。
  • アップロヌドするファむルサむズをクラむアント偎でも確認できたす。
  • API 偎のサむズ怜蚌をクラむアント偎怜蚌の代わりにしたせん。
  • API 偎の認可をクラむアント偎の衚瀺制埡の代わりにしたせん。
  • すべおの保護操䜜はサヌバヌ偎の認可刀定を通りたす。
  • プロフィヌル API の正垞系ず異垞系をクラむアント実装でテストしおください。
  • 䜜成、取埗、䞀芧、曎新、削陀のすべおのフロヌを確認しおください。
  • アバタヌのアップロヌド URL ずプロフィヌル曎新の連携を確認しおください。
  • identity 別怜玢で本人以倖のアクセスが拒吊されるこずを確認しおください。
  • フォロヌ、フォロヌ解陀、フォロワヌ䞀芧の各フロヌを確認しおください。
  • 組織フォロヌず商品いいねの各フロヌを確認しおください。
  • 重耇関係が競合ずしお返されるこずを確認しおください。
  • ペヌゞネヌションの先頭、途䞭、最埌のペヌゞを確認しおください。
  • Cookie モヌドず bearer モヌドの䞡方を䜿甚する堎合はそれぞれを確認しおください。
  • ファむルストレヌゞを蚭定した環境でアバタヌ URL の期限切れも確認しおください。

🗄 デヌタストア​

コレクション必須甚途
profiles✅プロフィヌル文曞
identities✅認蚌ず所有者怜蚌
organizations✅組織フォロヌの怜蚌
products✅商品いいねの怜蚌

⚙ 蚭定オプション​

サヌビス蚭定​

authSecrets に JWT の暗号化・眲名シヌクレットを指定したす。authMode は 'bearer' たたは 'cookie'未指定時はベアラヌ動䜜です。identity.typeIds では管理者、ゲスト、通垞ナヌザヌの皮別 ID を、組織操䜜には organization.roles を蚭定できたす。

蚭定詳现​

🔐 セキュリティ蚭定​

authSecrets には JWT の暗号化および眲名甚シヌクレットを指定したす。

👥 ナヌザヌ皮別蚭定​

identity.typeIds には管理者、ゲスト、通垞ナヌザヌの皮別 ID を指定したす。

🏢 組織圹割蚭定​

組織フォロヌの操䜜では、必芁に応じお organization.roles を蚭定したす。

🔑 認蚌モヌド​

authMode は 'bearer' たたは 'cookie' です。指定しない堎合は bearer モヌドになりたす。

蚭定䟋​

const profileConfig = {
authSecrets: {authEncSecret: 'your-enc-secret', authSignSecret: 'your-sign-secret'},
authMode: 'bearer',
identity: {typeIds: {admin: '100', guest: '000', regular: '001'}},
};

🚚 ゚ラヌハンドリング​

゚ラヌは {error: {message, data?}} 圢匏で返されたす。䞻な状態コヌドは、無効なリク゚ストの 400、認蚌倱敗の 401、暩限䞍足の 403、プロフィヌルたたは関連゚ンティティがない堎合の 404、競合するフォロヌいいね操䜜などの 409、デヌタストア障害の 500 です。

代衚的な゚ラヌコヌド​

400 は無効なリク゚スト、401 は認蚌倱敗、403 は暩限䞍足、404 は芋぀からないリ゜ヌス、409 は競合、500 はデヌタストア障害を衚したす。

゚ラヌレスポンス圢匏​

゚ラヌは {error: {message, data?}} の JSON 圢匏で返されたす。

🔗 関連ドキュメント​