{"id":18431507,"url":"https://github.com/ahmedadelfahim/objectionjs-repository","last_synced_at":"2025-08-19T18:53:25.622Z","repository":{"id":220565240,"uuid":"605473065","full_name":"AhmedAdelFahim/objectionjs-repository","owner":"AhmedAdelFahim","description":"Repository pattern implementation on top of KnexJS and ObjectionJS","archived":false,"fork":false,"pushed_at":"2025-03-20T12:58:02.000Z","size":665,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-15T00:11:38.007Z","etag":null,"topics":["database","knexjs","nodejs","objectionjs","repository-pattern"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/objectionjs-repository","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AhmedAdelFahim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-23T08:25:22.000Z","updated_at":"2025-03-20T12:58:06.000Z","dependencies_parsed_at":"2024-02-07T14:31:44.046Z","dependency_job_id":"8cc9133b-6683-4b7e-a511-04323ac6ed81","html_url":"https://github.com/AhmedAdelFahim/objectionjs-repository","commit_stats":null,"previous_names":["ahmedadelfahim/objectionjs-repository"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAdelFahim%2Fobjectionjs-repository","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAdelFahim%2Fobjectionjs-repository/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAdelFahim%2Fobjectionjs-repository/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmedAdelFahim%2Fobjectionjs-repository/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AhmedAdelFahim","download_url":"https://codeload.github.com/AhmedAdelFahim/objectionjs-repository/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248981270,"owners_count":21193147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","knexjs","nodejs","objectionjs","repository-pattern"],"created_at":"2024-11-06T05:25:04.865Z","updated_at":"2025-04-15T00:11:49.402Z","avatar_url":"https://github.com/AhmedAdelFahim.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ObjectionJS Repository - A Repository Pattern for KnexJS \u0026 ObjectionJS\n\nObjectionJS Repository is a lightweight library that implements the repository pattern on top of [KnexJS](https://www.npmjs.com/package/knex) and [ObjectionJS](https://www.npmjs.com/package/objection), making it easy to manage database queries in your Node.js applications. It simplifies CRUD operations while supporting transactions, filtering, and query optimization.\n\n[![Latest Stable Version](https://img.shields.io/npm/v/objectionjs-repository.svg?style=for-the-badge)](https://www.npmjs.com/package/objectionjs-repository)\n[![License](https://img.shields.io/npm/l/objectionjs-repository.svg?style=for-the-badge)](https://www.npmjs.com/package/objectionjs-repository)\n[![NPM Downloads](https://img.shields.io/npm/dt/objectionjs-repository.svg?style=for-the-badge)](https://www.npmjs.com/package/objectionjs-repository)\n[![NPM Downloads](https://img.shields.io/npm/dm/objectionjs-repository.svg?style=for-the-badge)](https://www.npmjs.com/package/objectionjs-repository)\n## Content\n\n1. [Installation](https://www.npmjs.com/package/objectionjs-repository#installation)\n1. [Usage](https://www.npmjs.com/package/objectionjs-repository#usage)\n1. [API](https://www.npmjs.com/package/objectionjs-repository#api)\n    1. [getOne](https://www.npmjs.com/package/objectionjs-repository#getoneconditions-options)\n    1. [getAll](https://www.npmjs.com/package/objectionjs-repository#getallconditions-options)\n    1. [create](https://www.npmjs.com/package/objectionjs-repository#createdata-options)\n    1. [createMany](https://www.npmjs.com/package/objectionjs-repository#createmanydata-options)\n    1. [update](https://www.npmjs.com/package/objectionjs-repository#updateconditions-data-options)\n    1. [delete](https://www.npmjs.com/package/objectionjs-repository#deleteconditions-options)\n1. [Options](https://www.npmjs.com/package/objectionjs-repository#options)\n1. [Tests](https://www.npmjs.com/package/objectionjs-repository#tests)\n1. [Support](https://www.npmjs.com/package/objectionjs-repository#support)\n\n## Why Use ObjectionJS Repository?\n* Simplifies CRUD operations with KnexJS and ObjectionJS.\n* Implements the Repository Pattern, making code maintainable.\n* Supports transactions, filtering, and query optimizations.\n* Designed for Node.js applications that need efficient database access.\n\n## Installation\n\n```bash\n$ npm i objectionjs-repository\n```\n\n## Usage\n\n```javascript\n// Define Interface\nexport interface IUser {\n  id: number;\n  age: number;\n  name: string;\n}\n\n// Define Model\nexport default class User extends Model {\n  static get tableName() {\n    return TABLES.USER;\n  }\n}\n\n// Define Repository\nimport { BaseRepository } from 'objectionjs-repository';\n\nexport class UserRepository extends BaseRepository\u003cIUser\u003e {\n  constructor(knexInstance: Knex) {\n    super(User, knexInstance);\n  }\n}\n\n```\n\nthen you can use defined repository\n\n```javascript\n   const userRepo = new UserRepository(knexInstance);\n   const user = await userRepo.getOne({ age: 25 })\n```\n\n## API\n\n#### getOne(conditions, [options])\nconditions is object contains any column in this table.\u003c/br\u003e\noptions is **IFindingOptions**.\u003c/br\u003e\nreturn selected row or undefined\n#### getAll(conditions, [options])\nconditions is object contains any column in this table.\u003c/br\u003e\noptions is **IFindingOptions**.\u003c/br\u003e\nreturn selected rows or empty array.\n\n#### create(data, [options])\ndata to be inserted.\u003c/br\u003e\noptions is **ICreationOptions**.\n\n#### createMany(data, [options])\narray to be inserted.\u003c/br\u003e\noptions is **ICreationOptions**.\n\n#### update(conditions, data, [options])\nconditions is object contains any column in this table.\u003c/br\u003e\ndata to be updated.\u003c/br\u003e\noptions is **IUpdatingOptions**.\n\n#### delete(conditions, [options])\nconditions is object contains any column in this table. \u003c/br\u003e\noptions is **IDeletionOptions**.\n\n## Options\n\n#### IFindingOptions\n\n```javascript\nIFindingOptions {\n  // select specific columns\n  select?: string[];\n  // database Transaction\n  trx?: Knex.Transaction;\n  // lock selected rows or not\n  forUpdate?: boolean;\n  // select where column not in array\n  whereNotIn?: {\n    field: string;\n    values: any;\n  }[];\n  // select where column in array\n  whereIn?: {\n    field: string;\n    values: any;\n  }[];\n  // select where columns is null\n  whereNull?: string[];\n  // select where columns is not null\n  whereNotNull?: string[];\n}\n```\n\n#### ICreationOptions\n```javascript\nICreationOptions {\n  // database Transaction\n  trx?: Knex.Transaction;\n}\n```\n\n#### IUpdatingOptions\n```javascript\nIUpdatingOptions {\n  // database Transaction\n  trx?: Knex.Transaction;\n  // select where column not in array\n  whereNotIn?: {\n    field: string;\n    values: any;\n  }[];\n  // select where column in array\n  whereIn?: {\n    field: string;\n    values: any;\n  }[];\n\n  // select where columns is null\n  whereNull?: string[];\n  // select where columns is not null\n  whereNotNull?: string[];\n}\n```\n\n#### IDeletionOptions\n```javascript\nIDeletionOptions {\n  // database Transaction\n  trx?: Knex.Transaction;\n  // select where column not in array\n  whereNotIn?: {\n    field: string;\n    values: any;\n  }[];\n  // select where column in array\n  whereIn?: {\n    field: string;\n    values: any;\n  }[];\n  // select where columns is null\n  whereNull?: string[];\n  // select where columns is not null\n  whereNotNull?: string[];\n}\n```\n\n## Tests\n\nTo run the test suite, first install the dependencies and rename .env.sample to .env and set connection url for postgres database in .env then run `npm test`:\n\n```bash\n$ npm install\n$ npm test\n```\n\n## Support\n\nFeel free to open issues on [github](https://github.com/AhmedAdelFahim/objectionjs-repository).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmedadelfahim%2Fobjectionjs-repository","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahmedadelfahim%2Fobjectionjs-repository","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmedadelfahim%2Fobjectionjs-repository/lists"}