tomi77/node-bookshelf-django

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Django models for Bookshelf

[![Node.js CI](https://github.com/tomi77/node-bookshelf-django/actions/workflows/node.js.yml/badge.svg)](https://github.com/tomi77/node-bookshelf-django/actions/workflows/node.js.yml)
[![CodeQL](https://github.com/tomi77/node-bookshelf-django/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/tomi77/node-bookshelf-django/actions/workflows/codeql-analysis.yml)
![Downloads](https://img.shields.io/npm/dt/bookshelf-django.svg)

## Table of contents

* [Installation](#installation)
* [Usage](#usage)
* [Available models / collections](#available-models--collections)
  * [Django.Session](#djangosession)
  * [Django.Sessions](#djangosessions)
  * [Django.Site](#djangosite)
  * [Django.Sites](#djangosites)
  * [Django.FlatPage](#djangoflatpage)
  * [Django.FlatPages](#djangoflatpages)
  * [Django.Redirect](#djangoredirect)
  * [Django.Redirects](#djangoredirects)
  * [Django.ContentType](#djangocontenttype)
  * [Django.ContentTypes](#djangocontenttypes)
  * [Django.Auth.Permission](#djangoauthpermission)
  * [Django.Auth.Permissions](#djangoauthpermissions)
  * [Django.Auth.Group](#djangoauthgroup)
  * [Django.Auth.Groups](#djangoauthgroups)
  * [Django.Auth.User](#djangoauthuser)
  * [Django.Auth.Users](#djangoauthusers)
* [Testing your project](#testing-your-project)

## Installation

### NPM

~~~bash
npm install bookshelf-django --save
~~~

### Yarn

~~~bash
yarn add bookshelf-django
~~~

## Usage

Load models to ``registry``

~~~js
require('bookshelf-django')(bookshelf);

var AuthUser = bookshelf.model('Django.Auth.User');
~~~

or load model/collection

~~~js
var AuthUser = require('bookshelf-django')(bookshelf).Auth.User;
~~~

## Available models / collections

### Django.Session

Django session framework model

### Django.Sessions

Django session framework collection

### Django.Site

Django site model

### Django.Sites

Django site collection

### Django.FlatPage

Django flat page model

### `toString() -> string`

Returns string representation of a permission.

~~~js
const FlatPage = bookshelf.model('Django.FlatPage')

FlatPage.forge({id: 1})
.fetch()
.then(function(flat_page) {
  console.log(flat_page.toString())
})
~~~

### Django.FlatPages

Django flat pages collection

### Django.Redirect

Django redirect model

### `toString() -> string`

Returns string representation of a redirect.

~~~js
const Redirect = bookshelf.model('Django.Redirect')

Redirect.forge({id: 1})
.fetch()
.then(function(redirect) {
  console.log(redirect.toString())
})
~~~

### Django.Redirects

Django redirects collection

### Django.ContentType

Django content type model

### Django.ContentTypes

Django content type collection

### Django.Auth.Permission

Permission model

#### `toString() -> string`

Returns string representation of a permission.

~~~js
const AuthPermission = bookshelf.model('Django.Auth.Permission')

AuthPermission.forge({id: 1})
.fetch({withRelated: 'contentType'})
.then(function(permission) {
  console.log(permission.toString())
})
~~~

#### `toStringAsync() -> Promise<string>`

Returns `Promise` with string representation of a permission.

~~~js
const AuthPermissions = bookshelf.collection('Django.Auth.Permissions')

AuthPermission.forge({id: 1})
.fetch({withRelated: 'contentType'})
.then(function(permission) {
  return permission.toStringAsync()
}).then(function(permission) {
  console.log(permission)
})
~~~

#### `stringify(permissionModel) -> string`

_Parameters_

* ``permissionModel`` `Django.Auth.Permission`

  `Django.Auth.Permission` object

Stringify a `Django.Auth.Permission` object.

~~~js
const AuthPermission = bookshelf.model('Django.Auth.Permission')

AuthPermission.forge({id: 1})
.fetch()
.then(AuthPermission.stringify)
.then(function(permission) {
  console.log(permission)
})
~~~

### Django.Auth.Permissions

Permission collection

### Django.Auth.Group

Groups of permissions model

#### `getPermissions() -> Promise<Django.Auth.Permissions>`

Collection of permissions of group permissions.

~~~js
const AuthPermission = bookshelf.model('Django.Auth.Permission')
const AuthGroup = bookshelf.model('Django.Auth.Group')

AuthGroup.forge()
.fetch({withRelated: ['permissions', 'permissions.contentType']})
.then(function(permissions) {
  return permissions.getPermissions()
}).then(function(permissions) {
  console.log(permissions.map(AuthPermission.stringify))
})
~~~

### Django.Auth.Groups

Groups of permissions collection

#### `getPermissions() -> Promise<Django.Auth.Permissions>`

Collection of unique permissions of group permissions.

~~~js
const AuthPermission = bookshelf.model('Django.Auth.Permission')
const AuthGroups = bookshelf.collection('Django.Auth.Groups')

AuthGroups.all()
.fetch({withRelated: ['permissions', 'permissions.contentType']})
.then(function(permissions) {
  return permissions.getPermissions()
}).then(function(permissions) {
  console.log(permissions.map(AuthPermission.stringify))
})
~~~

### Django.Auth.User

Django user collection

#### `getPermissions() -> Promise<Django.Auth.Permissions>`

Collection of unique permissions of group permissions and permissions.

~~~js
const AuthPermission = bookshelf.model('Django.Auth.Permission')
const AuthUser = bookshelf.model('Django.Auth.User')

AuthUser.forge({id: 1})
.fetch()
.then(function(user) {
  return user.getPermissions()
}).then(function(permissions) {
  console.log(permissions.map(AuthPermission.stringify))
})
~~~

### Django.Auth.Users

Django user collection

## Testing your project

In `beforeAll` hook runs knex migrations in order

* Django
* Your project

All migrations must have own migration table (`tableName` property).

~~~js
before(() => {
  knex.migrate.latest({directory: 'node_modules/bookshelf-django/migrations/', tableName: 'knex_migrations_django'})
}).then(() => {
  knex.migrate.latest({directory: 'migrations/', tableName: 'knex_migrations_my_project'})
})
~~~

In `afterAll` hook runs knex migrations in reverse order

* Your project
* Django

~~~js
after(() => {
  knex.migrate.rollback({directory: 'migrations/', tableName: 'knex_migrations_my_project'})
}).then(() => {
  knex.migrate.rollback({directory: 'node_modules/bookshelf-django/migrations/', tableName: 'knex_migrations_django'})
})
~~~