@fractalerp/active-record-js
v1.0.16
Published
Responsible for representing business data
Downloads
26
Maintainers
Readme
ACTIVE RECORD JS
A library responsible for representing business data.
This library follows the Active Record Pattern
by building a wrapper on top of popular orm such as Mongoose and Sequelize to support all kinds of databases
⚙️ How to use the package in project
- You should create the following environment variables in your node project.
RDBMS_DATABASE_URI="mysql://DATBASE_USER:DATABASE_PASSWORD@DATABASE_HOST:DATABASE_PORT/DATABASE_DB"
NOSQL_DATABASE_URI="mongodb://DATABASE_HOST:DATABASE_PORT/DATABASE_DB"
NOSQL_DATABASE_ADAPTER="mongodb"
- Once the variables have been set. You should create a model base on the active record
SchemaProperty
. See example below
import { ActiveRecord } from "@fractalerp/active-record-js"
export interface ITaskModelDocument {
name: string;
description: string;
}
const TaskModelSchema = {
name: {
type: String,
required: true,
unique: true
},
description: {
type: String,
default: null
}
};
export const TaskModel = new ActiveRecord<ITaskModelDocument>("Task", TaskModelSchema);
- Then use its methods to perform data management. The following methods are supported;
|Method|Description|
|------------------|-----------|
|find
|returns list of data objects|
|findOne
|returns one data item|
|create
|save item to the data store|
|update
|updates the record in the store|
|delete
|delete item from the data store|
Since we support all kinds of databases. The following are the respective methods of the two kinds of databases.
This only applies to NOSQL databases
|Method|Description|
|------------------|-----------|
|aggregate
|peform aggregate action based on a pipeline|
|index
|create an index in the document store|
This only applies to Relational databases
|Method|Description|
|------------------|-----------|
|query
|create a raw SQL
to send to database|
|beginTransaction
|start a transaction|
|commitTransaction
|persist a transaction|
|rollbackTransaction
|rollback a transaction|
Other than that, all the other ORM respective methods for Sequelize
and Mongoose
are supported by default.
- Finally you can use the model to peform data action. See example.
// create task
const task = await TaskModel.create({
name: 'Use fractalerp active record js',
description: 'Change all models'
});
// Find one task
const task = await TaskModel.findOne({ id: 'cbdabs-29232323-msasd'});
- You can also use the underlying ORM model and instance methods
// create task
const filter = { };
const countTasks = await TaskModel.model.countDocuments(filter);
🫶 Projects using this package
See the projects using this package in action.
🪲 Issues, suggestions and feature requests
We are actively maintaining this boilerplate, please report any issues or suggestion for improvement at https://github.com/fractalerp/active-record-js/issues
👩💻 Development and contribution
Prerequisite: Install git, node package manager, webpack CLI, grunt CLI
To contribute, fork and clone.
> git clone https://github.com/fractalerp/active-record-js.git
The code is in typescript. Use a typescript IDE of your choice, like Visual Studio Code or WebStorm.
To set up the development environment, run:
> npm install
To automatically compile, bundle and push code changes to the running test project, run:
> npm start
To run the project unit tests with code coverage, results can be found at dist/testresults/coverage/index.html
, run:
> npm run test:unit
Run the unit test continuously during development:
> npm run test:dev
Scripts
While developing, you will probably rely mostly on npm start
; however, there are additional scripts at your disposal:
|npm run <script>
|Description|
|------------------|-----------|
|start
|Build the project and monitor source and config for changes and rebuild. Start the dev server|
|watch
|Build the project and monitor source and config for changes and rebuild.|
|emit
|Output javascript code|
|test
|Runs lint, build, unit tests with mocha and generates a coverage report|
|test:dev
|Runs mocha and watches for changes to re-run tests; does not generate coverage reports.|
|test:unit
|Runs unit tests with mocha and generates a coverage report.|
|build:prod
|Build app optimized for production|
|build:dev
|Build app optimized for debugging.|
|lint
|Lint all .js
files.|
|lint:fix
|Lint and fix all .ts
files.|