Skip to main content
Version: 0.14.0 (Latest)

🧱 Location blocks

Location blocks は、@nodeblocks/backend-sdk からエクスポートされる再利用可能な階層および MongoDB 操作の blocks です。呼び出し元は Result 値を消費し、ルートは Location ブロックのエラーを HTTP 応答に変換します。

インベントリ

エクスポート種類入力結果 / 動作 / エラー
LocationBlockErrorエラークラスメッセージ、オプションのデータ基本 BlockError;それ自体に HTTP ステータスはない。
LocationNotFoundBlockErrorエラークラスメッセージ、オプションのデータ未発見ロケーション結果;ルートは 404 にマッピングする。
LocationUnexpectedDBErrorエラークラスメッセージ、オプションのデータDB/ミューテーション結果;ルートは 500 にマッピングする。
LocationConflictErrorエラークラスメッセージ、オプションのデータ子孫競合;ルートは 409 にマッピングする。
buildAncestorsFromParentヘルパーancestors, parent IDok(string[]) を返す。
buildLocationToCreateヘルパーbody, オプションの ancestorsok(location data) を返す。
buildDescendantsFilterヘルパーlocation IDok({ ancestors: { $in } }) を返す。
assertNoDescendantLocationsガードchild locationsok(true) または競合エラー。
getLocationByIdDB 読み取りcollection, IDプロジェクションされた location または not-found/DB エラー。
createLocationDB 作成collection, location作成された ID または DB エラー。
updateLocationDB 更新collection, update, IDtrue または not-found/DB エラー。
deleteLocationDB 削除collection, IDtrue または DB エラー。
findLocationsDB 検索collection, filterプロジェクションされた配列または DB エラー。
normalizeLocationノーマライザーlocation ドキュメントok(public location) を返す。

詳細

LocationBlockError

実装

BlockError を拡張し、そのコンストラクタは (message, data?) を受け取るが HTTP ステータスフィールドを持たない。Location ソースはコンストラクタを宣言しないため、サブクラスはその契約を継承する。Location ルートでの orThrow は HTTP マッピングを実行するが、この基本クラスは現在の Location ブロックでは構築されない。

LocationNotFoundBlockError

実装

getLocationById および updateLocation によって LocationNotFoundBlockError('Location not found') として作成される。createLocationRoutegetLocationRouteupdateLocationRoute はこれを 404 にマッピングする;deleteLocationRoute404 マッピングをリストするが、その現在のブロックチェーンはこのクラスを生成しない。

LocationUnexpectedDBError

実装

失敗した読み取り、挿入、更新、削除、またはクエリによって作成される。各データベースブロックに文書化された正確なメッセージを含む。createLocationRoutegetLocationRouteupdateLocationRoutedeleteLocationRoutefindLocationsRoute はこれを 500 にマッピングする。

LocationConflictError

実装

assertNoDescendantLocations によってのみ 'Dependent child locations still exist' メッセージで作成される;deleteLocationRoute はこれを 409 にマッピングする。

buildAncestorsFromParent

実装

(ancestorsOfParent: string[], parentId: string)Promise<Result<string[], never>> を返す:すべての値を文字列正規化し、親 ID を追加した祖先リストのコピー。失敗することはできない。createLocationRoute は真の body parentId が提供された場合にのみこれを呼び出す。

buildLocationToCreate

実装

(location: Record<string, unknown>, ancestors: string[] = [])Promise<Result<Record<string, unknown>, never>> を返す。body を保持し、ancestors を上書きし、真の parentId を文字列正規化し、欠落または偽の親に対して parentId: null を書き込む。createLocationRoute は永続化前にこれを使用する。

buildDescendantsFilter

実装

(locationId: string)Promise<Result<Record<string, unknown>, never>> を返す:{ ancestors: { $in: [String(locationId)] } } を含む。deleteLocationRoute はこれを findLocations に渡してすべての子孫を見つける。

assertNoDescendantLocations

実装

(childLocations: Record<string, unknown>[])Promise<Result<boolean, LocationBlockError>> を返す:空の配列の場合は ok(true)、それ以外の場合は err(new LocationConflictError('Dependent child locations still exist'))deleteLocationRoute によって使用される。

getLocationById

実装

(locationsCollection: Collection, locationId: string)Promise<Result<Record<string, unknown>, LocationBlockError>> を返す。findOne({ id: String(locationId) }, { projection: { _id: 0 } }) をクエリするため、_id は省略されるが階層フィールドは残る。LocationNotFoundBlockError('Location not found') または LocationUnexpectedDBError('Failed to get location by id') を返す。createLocationRoutegetLocationRouteupdateLocationRoute によって使用される。

createLocation

実装

(locationsCollection: Collection, location: Record<string, unknown>)Promise<Result<string, LocationBlockError>> を返す。createBaseEntity を適用し、idcreatedAtupdatedAt を追加し、結果を挿入して ok(baseEntity.id) を返す。insertedId が欠落しているか例外が発生した場合、LocationUnexpectedDBError('Failed to create location') を返す。createLocationRoute によって使用される。

updateLocation

実装

(locationsCollection: Collection, location: Record<string, unknown>, locationId: string)Promise<Result<boolean, LocationBlockError>> を返す。updateOne({ id: String(locationId) }, { $set: updateBaseEntity(location) }) を実行し、updatedAt を追加する;一致しない場合は not-found、変更がないか例外が発生した場合は LocationUnexpectedDBError('Failed to update location') を返す。updateLocationRoute によって使用される。

deleteLocation

実装

(locationsCollection: Collection, locationId: string)Promise<Result<boolean, LocationBlockError>> を返す。deleteOne({ id: String(locationId) }) を実行する;削除ゼロは LocationUnexpectedDBError('Location could not be deleted')、例外は LocationUnexpectedDBError('Failed to delete location') を返す。deleteLocationRoute によって使用される。

findLocations

実装

(locationsCollection: Collection, filter: Record<string, unknown>)Promise<Result<Record<string, unknown>[], LocationBlockError>> を返す。find(filter, { projection: { _id: 0 } }).toArray() を実行する;失敗は LocationUnexpectedDBError('Failed to find locations') を返す。deleteLocationRoute および findLocationsRoute によって使用される。

normalizeLocation

実装

(location: Record<string, unknown> & { _id: string; parentId: string; ancestors: string[] })Result<Record<string, unknown>, never> を返す。_idparentIdancestors を削除し、ok({ ...rest, parent: parentId }) を返す。現在の Location ルートはこれをcomposeしていない;カスタム呼び出し元は必要な場合にのみ使用する。