Prequisites:
- Create a description of your REST service in a JSON format (see http://swagger.io/)
- Create your app and install (see http://docs.sequelizejs.com/en/latest/)
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
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
In the same way as with x-primary-key
, you can parameterize the attributes x-autoincrement
, x-unique
and x-allow-null
It is possible to set default values for fields with uuid
format
"definitions": {
"Document": {
"properties": {
"id": {
"type": "string",
"format": "uuid",
"default": "Sequelize.UUIDV4"
},
definitions:
# Model definition
Document:
properties:
id:
type: string
format: uuid
default: Sequelize.UUIDV4