1.0.1 • Published 5 months ago

@silyze/batch-repository v1.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

Batch Repository

Batch extensions for @mojsoski/ormm to perform bulk create, update, and delete operations efficiently.

Installation

npm install @silyze/batch-repository

Usage

Import and extend BatchRepository in your project:

import BatchRepository from "@silyze/batch-repository";
import { IModel } from "@mojsoski/ormm";

interface UserModel extends IModel {
  id: string;
  name: string;
  email: string;
}

class UserBatchRepository extends BatchRepository<"users", UserModel> {
  ...
}

const repo = new UserBatchRepository(databaseService);

API Reference

class BatchRepository<Table extends string, T extends IModel>

Extends ModelRepository<Table, T> and adds batch operations.

createBatch(items: CreateFilter<T>[]): Promise<string[]>

Insert multiple records in a single SQL INSERT statement.

  • Parameters:

    • items: Array of objects conforming to CreateFilter<T> (fields to insert).
  • Returns: Promise resolving to an array of created record IDs (string[]).

Example:

const newIds = await repo.createBatch([
  { name: "Alice", email: "alice@example.com" },
  { name: "Bob", email: "bob@example.com" },
]);
console.log(newIds); // e.g. ["1", "2"]

updateBatch(items: (UpdateFilter<T> & Index)[]): Promise<string[]>

Update multiple records concurrently by mapping individual UPDATE queries over the input array.

  • Parameters:

    • items: Array of objects combining UpdateFilter<T> (fields to update) and Index (must include an id field).
  • Returns: Promise resolving to an array of affected record IDs (string[]).

Example:

const updatedIds = await repo.updateBatch([
  { id: "1", email: "alice@newdomain.com" },
  { id: "2", name: "Robert" },
]);
console.log(updatedIds); // ["1", "2"]

removeBatch(ids: string[]): Promise<string[]>

Delete multiple records in a single SQL DELETE statement using an IN clause.

  • Parameters:

    • ids: Array of record IDs (string[]) to delete.
  • Returns: Promise resolving to an array of deleted record IDs (string[]).

Example:

const deletedIds = await repo.removeBatch(["1", "2", "3"]);
console.log(deletedIds); // ["1", "2", "3"]

Notes

  • createBatch constructs a single bulk INSERT for performance.
  • updateBatch uses concurrentMap under the hood, issuing parallel UPDATE queries.
  • removeBatch constructs a bulk DELETE with RETURNING "id".
1.0.1

5 months ago

1.0.0

5 months ago