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
- 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);
See the projects using this package in action.
We are actively maintaining this library, please report any issues or suggestion for improvement at https://github.com/fractalerp/active-record-js/issues
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
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:release |
Build app optimized for production |
build:development |
Build app optimized for debugging. |
lint |
Lint all .js files. |
lint:fix |
Lint and fix all .ts files. |