Skip to content

kingsquare/swagger-sequelize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Generate Sequelize model definitions from a Swagger 2.0 schema

Prequisites:

Currently, the project simply maps Swagger-datatypes to their Sequelize counterpart.

Sample usage:

var swaggerSequelize = require('swagger-sequelize');
var fs = require('fs');
var Sequelize = require('sequelize');

var sequelize = new Sequelize('<your uri>');
var swaggerSpec = JSON.parse(fs.readFileSync('<your swagger.json>', 'utf-8'));

var MyModel =  sequelize.define('MyModel', swaggerSequelize.generate(swaggerSpec.definitions.MyModel));

// ... do stuff with MyModel e.g. to setup your tables:

MyModel.sync({force: true})

In case you want to read from a swagger.yaml rather than from a swagger.json, you could replace the JSON-import

var swaggerSpec = JSON.parse(fs.readFileSync('<your swagger.json>', 'utf-8'));

with a YAML-import

var yaml = require('js-yaml');
var swaggerSpec = yaml.safeLoad(fs.readFileSync('<your swagger.yaml>', 'utf8'));

To be consistent, one should "officially" add js-yaml to the project:

npm install --save js-yaml

Primary key

To make your primary key work in Sequelize one may need to mark "x-primary-key": true in the model definition in swagger.json:

"definitions": {
    "Document": {
        "properties": {
            "id": {
                "type": "integer",
                "format": "int32",
                "description": "Unique Identifier representing a document",
                "x-primary-key": true
            },

And in swagger.yaml, it would be:

definitions:
  # Model definition
  Document:
    properties:
      id:
        type: integer
        format: int32
        description: Unique Identifier representing a document
        x-primary-key: true

Additional parametrization

In the same way as with x-primary-key, you can parameterize the attributes x-autoincrement, x-unique and x-allow-null

Default value for UUID fields

It is possible to set default values for fields with uuid format

JSON
"definitions": {
    "Document": {
        "properties": {
            "id": {
                "type": "string",
                "format": "uuid",
                "default": "Sequelize.UUIDV4"
            },
YAML
definitions:
  # Model definition
  Document:
    properties:
      id:
        type: string
        format: uuid
        default: Sequelize.UUIDV4

About

Generate Sequelize model definitions from a Swagger 2.0 schema

Resources

Stars

Watchers

Forks

Packages

No packages published