Skip to content

Latest commit

 

History

History
792 lines (709 loc) · 40.2 KB

README-JSDOC-TR.md

File metadata and controls

792 lines (709 loc) · 40.2 KB

Bu modül yerine pg-generator modülünü kullanın. (Daha Yeni & İyi)

pg-generator bu modülün bir sonraki versiyonudur. Çok daha sezgisel, uyarlanabilir ve kolay kullanımlıdır.

Sequelize'den daha fazlasını oluşturabilir. Üstelik Sequelize'ı da daha iyi oluşturur.

pg-generator linkleri:

Açıklama

Bu modül PostgreSQL veri tabanındann otomatik olarak Sequelize modellerini oluşturur. Veri tabanınızı inceleyerek her bir tablo için ayrı bir model dosyası oluşturur. Varsayılan konfigürasyon ayarları olabildiğince dikkatli seçilmiştir ve doğrudan değişiklik yapmadan kullanıma uygundur. Yine de dilerseniz konfigürasyon aracılığı ile bir çok davranış biçimini değiştirebilirsiniz. Bu doküman varsayılan konfigürasyona göre hazırlanmıştır. Dokümanda ilgili yerlerde konfigürasyon parametreleri ve varsayılan değerleri (Konfigürasyon parametresi:varsayılan değer) şeklinde belirtilmiştir.

Kullanım

Adım 1: npm -g komutu ile global olarak kurun.

Bu şekilde modülü ve CLI komutunu kurmuş olursunuz.

$ npm install -g sequelize-pg-generator

Adım 2: Model dosyalarını oluşturun.

Open terminal, go to your app.js root and create your models automatically into 'model' directory.

$ cd path/to/my/node-app.js
$ spgen -d my_database -u my_user -p my_password

Adım 3: Kendi node.js uygulamanızda modelleri kullanın

Kendi uygulamanızda otomatik olarak oluşturulmuş olan Sequelize modellerini kullanın. Aşağıda örnekler bulabilirsiniz.

var orm = require('./model');
orm.setup('veri_tabanim', 'kullanıcı', 'sifre', {
    host: '127.0.0.1',
    logging: false,
    native: false
});
var sequelize = orm.sequelize;
var contact = orm.model('public.contact'); // Şema kullanmayacak şekilde konfigüre edilebilir.

Windows Kullanıcıları

Windows işletim sisteminde kurulum yapmak için bazı ipuçları. Bu modül pg modülünü kullanır. Eğer Windows üzerinde pg-native modülünü kullanmak isterseniz aşağıdaki noktalara dikkat ederek kurabilirsiniz:

  • Python 2 kurulu olmalı. Bu yazı yazılırken Python 3 uyumluluğu yoktu.

  • Python'un kurulu olduğu klasörü çevresel değişkenlerden (environment variables) path ve PYTHONPATH içine eklemelisiniz.

  • PostgreSQL pg_config ve libpg.dll içeren klasörler'de path içine eklenmiş olmalı. Genellikle PostgreSQL bin ve lib klasörlerini eklemeniz yeterlidir. (Örneğin: C:\Program Files\PostgreSQL\9.3\bin C:\Program Files\PostgreSQL\9.3\lib)

  • Visual Studio Build Tools (C:\Program Files (x86)\MSBuild) sisteminizde kurulu olmalı. VS 2012 sonrasında otomatik olarak kurulmaktadır. Eğer bu modülün kurulumu sırasında npm farklı bir Visual Studio sürümü sorarse sizde kurulu versiyonu aşağıdaki gibi kullanabilirsiniz:

    npm install -g sequelize-pg-generator --msvs_version=2013

CLI Seçenekleri

spgen [seçenekler]
-h, --host [host]               Veri tabanının IP adresi veya host ismi.
    --port [port]               Veri tabanına bağlanmak için kullanılacak port
-d, --database [veri tabanı]    Veri tabanı ismi
-u, --user [kullanıcı]          Veri tabanına bağlanmak için kullanıcı ismi
-p, --password [şifre]          Veri tabanına bağlanmak için şifre
-s, --schema [schema]           Virgülle ayrılmış veri tabanı şemaları ismi (boşluk olmamalı).
-o, --output [output]           Dosyaların üretileceği yer.
-c, --config [config]           Konfigürasyon dosyasının yeri.
-t, --templateName              Hazır template klasörlerinden verilen isimde olanı kullanılır.
    --nolog                     Log çıktısı yazmayı durdurur.
    --resetConfig               Konfigürasyonu resetler. (Yan yol. Yayında kullanılması önerilmez.)
    --throwError                Hatayı konsola yazmak yerine error çıktısı üretir.
  • Tamamen dokümante edilmiştir. (JSDoc HTML dosyaları doc dizini altındadır.),
  • Test edilmiştir,
  • Üretilen dosyalar başka bir modül gerektirmez,
  • Çoklu PostgreSQL şema (schema) detseği,
  • Tekten çoğa (One to many) ilişki desteği (hasMany ve belongsTo),
  • Çoktan çoğan (Many to many) ilişki desteği (hasMany through ve belongsToMany),
  • Şemalar arası ilişki desteği. (Örneğin public.firma tablosundan ozel_sema.musteri tablosuna),
  • Yüksek oranda konfigüre edilebilir,
  • Tamamen özelleştirilebilir,
  • CLI desteği,
  • Model ve ilişkiler için akıllı isimlendirme,
  • Otomatik üretilen dosyalara kolayca müdahale,
  • Hariç tutulan tablolar,
  • Debug,
  • Tabloya özel konfigürasyon,
  • İsimleri ve alias'leri kontrol ederek çakışmaları önler.

UYARI: belongsToMany

Sequelize 2.0 RC3 ve öncesi sürümlerde çoktan çoğa (many to many) ilişkiler için belongsToMany özelliği yoktur. Bu versiyondan sonra ise hasMany through ilişkiler ise yayından kalkacaktır (deprecated). Bu konuyla ilgili davranış konfigürasyonla ayarlanabilir. (Config: generate.hasManyThrough:false and generate.belongsToMany:true)

Özellikler

Üretilen Dosyalar Başka Modül Gerektirmez

Üretilen dosyalar çekirdek node modülleri ve Sequelize dışında herhangi bir modül gerektirmez.

Çoklu Şema (schema) Detseği

Çoklu PostgreSQL şemalarını destekler. public dışında şemaları da kullanabilirsiniz. Kullanıcı komut satırından veya konfigürasyon dosyasından hangi şemaların işleneceğini seçebilir. Birden fazla şema dahil edilmesi durumunda modeller başına şema isimleri eklenerek ile beraber üretilebilir. (Config: generate.useSchemaName: true, database.schema: ["public"]) Bu sayede değişik şemalardaki aynı isimli tablolarda çakışma yaşanmaz.

contact = orm.model('public.kisi'); // kisi tablosu için Sequelize modelini verir.

Şema Ön Eki Olmadan

Kullanıcı isterse model isimlerine şema ismi eklenmesini durdurabilir.

// Konfigürasyon dosyasında
{...
    generate{
        useSchemaName: false
    }
}

contact = orm.model('kisi'); // kisi tablosu için Sequelize modelini verir.

Tekten Çoğa (One To Many) İlişki Desteği

Bu modül otomatik olarak tekten çoğa ilişkileri tespit eder ve model.hasMany ve model.belongsTo sequelize ilişkilerini oluşturur.

Çoktan Çoğa (Many To Many) İlişki Desteği

Eğer iki tablo bir ara birleşim tablosu ile bağlıysa, sequelize-pg-generator otomatik olarak bunu tespit eder ve many to many sequelize ilişkisini oluşturur. Eğer bir tabloda birden fazla yabancı anahtar (foreign key) varsa o tablo ara bağlantı tablosu kabul edilir.

                 hasMany              hasMany
TABLO:   urun ------------< kalem >------------ sepet
ALANLAR: id                sepet_id (FK)        id
         isim              urun_id (FK)         musteri_id (FK)
         renk              miktar

Bu modül belongsToMany ilişkilerini ve hasMany through ilişkilerini otomatik oluşturabilir. Bu yazı tarihi ile Sequelize master dalı hasMany through ilişkilerini kaldırılacak (deprecated) olarak işaretledi. Kullandığınız Sequelize versiyonuna göre istediğiniz ilişki türünün oluşturulmasını konfigürasyondan ayarlayabilirsiniz.

Şemalar Arası İlişki Desteği

Değişik şemalarda bulunan tablolar arasındaki ilişkileri tespit eder. Örneğin public.firma tablosundan ozel_sema.musteri tablosuna olan ilişki tespit edilebilir.

Yüksek Oranda Konfigüre Edilebilir

sequelize-pg-generator konfigürasyon için config mdülünü kullanır. Ayrıca CLI vasıtası ile çağırırken de özel bir konfigürasyon dosyası kullanabilirsiniz. Konfigürasyon parametrelerinin açıklamalarını bu dokümanda aşağıda bulabilirsiniz.

Tamamaen Özelleştirilebilir

sequelize-pg-generator model dosyalarını üretmek için consolidate uyumlu template'leri kullanır. Varsayılan template engine olarak Swig kullanılmaktadır. Kullanıcı orjinal template'lere dokunmadan kendi taslaklarının olduğu yeri konfigürasyon aracılığı ile belirterek onların kullanılmasını sağlayabilir. (Config: template.folder and template.engine:'swig') Kendi template'lerini kullanmak isteyenlerin bu modülün template dizinini incelemeri önerilir.

Özel template dizininde en azından şu üç dosya bulunmalıdır. index.ext Varsayılan template dosyası. ext yerine kendi template'lerinizi uzantısını yazın. index.js Bu dosya üretilen dosyalarla beraber kopyalanır. Amacı üretilen dosyaları kullanmaktır. utils.js Bu dosya üretilen dosyalarla beraber kopyalanır. Yardımcı fonksiyonlar içerir.

CLI Desteği

Eğer bu modülü önerildiği gibi npm -g ile global olarak kurduysanız spgen komutu model dosyaları üretmek için sisteminizde her yerden kullanılabilir.

İlişki İsimlerini Kolayca Özelleştirebilirsiniz

Eğer otomatik oluşturulan ilişki isimleri sizin için yeterince akıllı değilse, bu isimleri kolayca değiştirebilirsiniz. İlk kullanımdan sonra hedef klasörde alias.json isimli bir dosy oluşturulacaktır. Oluşturulan her ilişki ismi bu dosyada mevcuttur. Değiştirmek istediğiniz ismi burada tanımlarsanız, ileride model dosyaları oluşturulurken buradaki isimlere öncelik verilecektir. Bazı isimler sizin için uygunsa değerini null olarak bırakın.

Model ve İlişkiler İçin Akıllı İsimlendirme

sequelize-pg-generator model isimlendirmesi için tablo veya şema.tablo isimlendirmesini kullanır. İlişkiler için yabancı anahtar isimlerini ve veri tabanında tanımlı ilişki isimlerini kullanır. (Veri tabanında ilişkileri düzgün isimlendiriyorsunuz değil mi?) Konfigürasyondan ayarlanarak camel case (tabloAdi) veya dokunulmamış (tablo_adi) şekilde isimlendirilmiş metodlar kullanılabilir. İsimlendirme teamülleri Sequelize modülü tavsiyelerine göre ayarlanmıştır ve 'as' parametresine atama yapılarak isimlendirme yapılır.

                  product_cart_line_items              cart_cart_line_items
TABLO:   product -------------------------< line_item >--------------------- cart
ALANLAR: id                                 cart_id (FK)                     id
         name                               product (FK)                     customer_id (FK)
         color                              quantity

DİKKAT: line_item.cart_id alanı _id son eki içermesine rağmen line_item.product _id son eki içermemektedir. Bu tutarsız gibi gözüken durum kasten bu örnek için yapılmıştır.

Nesne Tipi              İsimlendirme Kuralı
----------              -------------------
Model                   tabloAdi veya schema.tabloAdi
hasMany                 Veri tabanındaki ilişki adının çoğulu. Baştaki tablo adı otomatik silinebilir.
                        (Config: generate.stripFirstTableFromHasMany:true)
belongsTo               Yabancı anahtarın tekil hali. Eğer dış anahtar ismi _id iel bitiyorsa silinir. Aksi durumda
                        alan ismi ile çakışmaması için başına 'related' ön eki eklenir.
                        (Config: generate.prefixForBelongsTo:'related')
belongsToMany           Birleşim tablosu adı + birleşim tablosundaki diğer tabloya işaret eden yabancı anahtarın çoğul hali.
hasMany({through:..})   Birleşim tablosu adı + birleşim tablosundaki diğer tabloya işaret eden yabancı anahtarın çoğul hali. (Sequelize'de kaldırılacak)

Örnek yapı için sonuçlar:

İlişki                  as                                  Detaylar
------                  --                                  --------
product.hasMany         as:'cartLineItems'                  (Çoğul) 'product' tablo ismi 'product_cart_line_items' ilişki
                                                            isminin başından silinmiştir.
product.belongsToMany   as:'cartLineItemCarts'              (Çoğul) _id eki 'cart_id' yabancı anahtar isminin sonundan
                                                            silinmiştir ve başına ilişki adı başındaki tablo adı olmadan eklenmiştir.
product.hasMany Through as:'cartLineItemCarts'              (Çoğul) _id eki 'cart_id' yabancı anahtar isminin sonundan
                                                            silinmiştir ve başına ilişki adı başındaki tablo adı olmadan eklenmiştir.
cart.hasMany            as:'cartLineItems'                  (Çoğul) 'cart' tablo ismi 'cart_cart_line_items' ilişki
                                                            isminin başından silinmiştir.
cart.belongsToMany      as:'relatedCartLineItemProducts'    (Çoğul) _id eki olmadığından 'related' ön eki ve başına ilişki adı
                                                            başındaki tablo adı olmadan eklenmiştir.
cart.hasMany Through    as:'relatedCartLineItemProducts'    (Çoğul) _id eki olmadığından 'related' ön eki ve başına ilişki adı
                                                            başındaki tablo adı olmadan  eklenmiştir.
lineItem.belongsTo      as:'relatedProduct'                 (Tekil) _id eki olmadığından 'related' ön eki eklenmiştir.
lineItem.belongsTo      as:'cart'                           (Tekil) _id eki 'cart_id' yabancı anahtar isminin sonundan silinmiştir.

Bir çok özellik gibi, oluşturulan dosyalara yıkıcı olmayan bir şekilde aşağıda açıklandığı şekilde müdahale edebilirsiniz.

Otomatik Üretilen Dosyalara Kolayca Müdahale

Varsayılan olarak otomatik oluşturulan dosyalar path/to/model/definition-files dizininde tutulur. Ayrıca burada 'definition-files-custom' isimli bir dizin de oluşturulur. Kullanıcılar 'definition-files-custom' dizininde model dosyaları ile aynı isimde dosyalar oluşturarak orjinal dosyaların içeriğini değiştirebilir ve gerekli müdahaleleri güvenli bir şekilde yapabilirler. Bu modifikasyonları daha da kolay hale getirmek için utils isimli bir modül de model dizininde oluşturulur.

Bu modifikasyonlar yıkıcı değildir, çünkü bu dosyalar orjinal dosyadan miras alarak (inherit) orjinal dosyaya dokunulmadan değişiklik yapma şansı tanırlar. Varsayılan index.js dosyası miras alan bu dosya mevcut ise orjinal dosyayı çağırmaz ve miras alan dosyayı kullanır. Burada dikkat edilmesi gereken bu müdahalelerin henüz Sequelize nesnesi oluşturulmadan önce yapılıyor olmasıdır.

Örneğin cart isimli tablo için 'definition-files/cart.js' dosyası oluşturulur. Kullanıcı 'definition-files-custom/cart.js' isimli bir dosya oluşturarak aşağıdaki örnekte olduğu gibi istediği özelliklere müdahale edebilir. Tüm özellikler için otomatik oluşturulmuş dosyaların içine bakabilirsiniz.

"use strict";
var orm     = require('../index.js'),
    model   = require('../definition-files/public_cart.js'),
    util    = require('../utils.js')(model),
    Seq     = orm.Sequelize();

module.exports = model;

util.getAttribute('id').validate = {... Some Sequelize Validations}; // Sequelize validation ekleyin.
util.getRelation('relatedProducts').details.as = 'soldItems';        // Varsayılan ilişki ismini beğenmediniz mi? Değiştirin.
util.renameAttribute('customerId', 'clientId');                      // Alanın ismini değiştirin.

Hariç Tutulan Tablolar

Bazı tabloların otomatik üretimin dışında bırakılması mümkündür. Konfigürasyonda (Config generate.skipTable:[]) dizisi hariç bırakılacak tabloları tanımlamak için kullanılır. sequelize-pg-generator bu tabloları ve ayrıca bu tablolara olan ve bu tablolardan başka tablolara olan ilişkileri oluşturmaz.

Debug

Sizin yazdığınız uygulamadan ilk çağrılıp çalıştırıldığında, varsayılan index.js dosyası model dizininde debug.js isimli bir dosya oluşturur. Bu dosya incelenerek index.js'nin ne tip bir kod kullandığı anlaşılabilir. index.js dosyası yerine doğrudan modeller kullanılmak istenseydi bu şekilde bir kod kullanılıyor olacaktı. Ancak bu tip statik bir dosya kullanılsaydı, yıkıcı olmayan bir şekilde müdahalelere izin vermek çok zor olacaktı.

İsim çakışmalarını önler

sequelize-pg-generator isim çakışmalarını önlemek için aynı tabloda aynı isim/alias sahibi başka bir alan veya ilişki var mı kontrol eder. Varsa uyarır.

Tabloya Özel Konfigürasyon

Bazı tablolar için diğer tablolardan farklı olarak özel kurallar tanımlamak gerekebilir. Bu gibi durumlarda konfigürasyon tablo seviyesinde özel değişikliklere izin verir. Tüm 'generate' ve 'tableOptions' başlığı altında toplanan konfigürasyon parametreleri 'generateOverride' and 'tableOptionsOverride' başlıkları ile tabloya özel olarak değiştirilebilir.

Aşağıdaki örnekte contact tablosunun kendine özgü konfigürasyonlara sahip olması gösterilmiştir.

"generate": {
    "columnDescription": true,
    "tableDescription": true,
    ...
},
"generateOverride": {
    "contact": {
        "tableDescription": false
    }
},
"tableOptions": {
    "timestamps": false,
    "camelCase": true,
    "paranoid": false,
    ...
},
"tableOptionsOverride": {
    "contact": {
        "paranoid": true
    }
}
...

Konfigürasyon

Konfigürasyon parametreleri ve varsayılan değerleri aşağıda açıklanmıştır. Konfigürasyon "sequelize-pg-generator" anahtarı altında toplanmıştır, çünkü sequelize-pg-generator konfigürasyonunuzu kendi uygulamanız içerisindeki konfigürasyon ile birleştirmek isteyebilirsiniz. Bu seyede sequelize-pg-generator konfigürasyon ayarlarının isimleri sizin konfigürasyonunuzla çakışmaz. config buna izin vermektedir.

database

host string Veri tabanının IP adresi veya host ismi.
port number Veri tabanına bağlanmak için kullanılacak port.
database string Veri tabanı ismi.
user string Veri tabanına bağlanmak için kullanıcı ismi.
password string Veri tabanına bağlanmak için şifre.
schema Array(string) Otomatik dosyaların üretileceği veri tabanı şemaları ismi.

template

engine string Dosyaları üretmek için kullanılacak olan template engine. [consolidate](https://www.npmjs.com/package/consolidate) uyumlu tüm engine'ler kullanılabilir.
extension string Template dosyalarının dosya uzantısı.
folder string Template dosyalarının yer aldığı dizin.

output

log boolean Otomatik dosyaları üretirken log çıktısı üret.
folder string Dosyaların üretileceği yer.
beautify boolean Dosyaları [js-beautifier](http://jsbeautifier.org) kullanarak formatla.
indent number Üretilen dosyalarda her bir tab karakteri için kaç boşluk kullanılacağı.
preserveNewLine boolean Üretilen dosyada taslaklardan gelen yeni satır (new line) karakterlerini koru.
warning boolean Eğer true olarak ayarlanırsa otomatik dosyalara ilgili dosyaya nasıl müdahale edileceğini anlatan bir yorum (comment) eklenir.

generate

stripFirstTableFromHasMany boolean Eğer true olrak ayarlanırsa has many ilişkilerinde ilişkinin isminde eğer varsa ilk baştaki tablo adı silinir. Örneğin: "product" tablosu için "product_cart_line_items" ilişki ismi "cart_line_items" olarak isimlendirilir.
addTableNameToManyToMany boolean Eğer true olarak ayarlanırsa çoktan çoğa olan ilişkilerde (many to many) ilişkinin ismi'nin (as parametresi) başına birleşim tablosunun ismi eklenir. Bu isim çakışmalarını önlemekte yardımcı olur.
addRelationNameToManyToMany boolean Eğer true olarak ayarlanırsa çoktan çoğa olan ilişkilerde (many to many) ilişkinin ismi'nin (as parametresi) başına ilişki ismi eklenir. Bu isim çakışmasını addTableNameToManyToMany seçeneğine göre daha iyi önler, çünkü aynı birleşim tablosuna ikiden fazla tablo bağlı olabilir.
stripFirstTableNameFromManyToMany boolean Eğer true olrak ayarlanırsa çoktan çoğa (many to many) ilişkilerinde ilişkinin isminde eğer varsa ilk baştaki tablo adı silinir. Örneğin: "product" tablosu için "product_cart_line_items" ilişki ismi "cart_line_items" olarak isimlendirilir.
hasManyThrough boolean Has many through ilişkileri hasMany(modelName, { through: '..' } şeklinde yapılandırılır. Sequelize version 2.0 RC3 ve sonrasında has many through ilişkileri kaldırılacak (DEPRECATED) olarak işaretlenmiştir. Bu versiyondan sonra has many through yerine belongToMany kullanmalısınız. hasManyThrough ve belongsToMany aynı tabloda aynı anda true olamaz.
belongsToMany boolean belongsToMany ilişkileri kullanılır. Bu ilişki türü Sequelize version 2.0 RC4 ve sonrasında gelmiştir. Önceki Sequelize versiyonları bu ayar true iken çalışmazlar. hasManyThrough ve belongsToMany aynı tabloda aynı anda true olamaz.
prefixForBelongsTo string belongsTo ilişkileri yabancı anahtar isminden "_id" eki atılarak isimlendirilir. Eğer yabancı anahtar "_id" eki içermiyorsa belongsTo ilişkilerinin alan isimleri ile karışmasını önlemek için başına bu ayarda belirtilen ön ek eklenir. "Model ve İlişkiler İçin Akıllı İsimlendirme" bölümüne bakabilirsiniz.
useSchemaName boolean Eğer true olarak ayarlanırsa oluşturulan dosya isimlerinin ve model isimlerinin başına model isimleri eklenir. Bu ayar çoklu şema kullanan veri tabanlarında değişik şemalarda aynı isimdeki tabloların çakışmasını önlemek için kullanılır.
modelCamelCase boolean Şema isimlerinde camel case (schemaName gibi) kullanılmasını sağlar.
relationAccessorCamelCase boolean İlişki accessor metodlarında camel case (relationName gibi) kullanılmasını sağlar.
columnAccessorCamelCase boolean Alan accessor metodlarında camel case (alanAdi gibi) kullanılmasını sağlar.
columnDefault boolean Veri tabanı alanlarındaki varsayılan değerlerin Sequelize modelinde de oluşturulmasını sağlar. UYARI: SQL fonksiyonları henüz desteklenmemektedir. Sequelize'nin istediği şekilde bunları oluşturmak zordur. Bu nedenle bu işin veri tabanı sisteminde halledilmesi daha doğru olacaktır. Öte yandan bu değeri true yapıp, hatalı alanları müdahale ederek değiştirebilirsiniz.
columnDescription boolean Alan açıklamalarını oluşturulan modele ekle.
columnAutoIncrement boolean Otomatik artırım (auto increment) alanlarının modelde işaretlenmesini sağla.
tableDescription boolean Tablo açıklamalarını oluşturulan modele ekle.
dataTypeVariable string Sequelize veri tiplerini tanımlamak için nesneye bağlı "Sequelize.BOOLEAN" gibi bir değişken kullanır.This ayar bu değişkenin isminin ayarlanmasını sağlar.
skipTable Array(string) Hariç tutulan tabloların listesi.

tableOptions

Kullanıcı buraya istediği Sequelize.define opsiyonlarını (options) ekleyebilir. Bu opsiyonlar doğrudan Sequelize.define metoduna iletilir. Opsiyonlar için Sequelize dokümantasyonu incelenebilir. Bazı örnekler:
timestamps boolean createdAt ve updatedAt zaman damgası alanlarını modele ekler.

Varsayılan Konfigürasyon Ayarları

Varsayılan konfigürasyon ayarları aşağıda listelenmiştir.

module.exports = {
    "sequelize-pg-generator": {
        "database": {
            "host": "127.0.0.1",
            "port": 5432,
            "user": "user",
            "password": "password",
            "database": "",
            "schema": ["public"]
        },
        "template": {
            "engine": "swig",
            "extension": "html",
            "folder": path.join(__dirname, '..', 'template')
        },
        "output": {
            "log": true,
            "folder": "./model",
            "beautify": true,
            "indent": 4,
            "preserveNewLines": false,
            "warning": true
        },
        "generate": {
            "stripFirstTableFromHasMany": true,
            "addTableNameToManyToMany": false,
            "addRelationNameToManyToMany": true,
            "stripFirstTableNameFromManyToMany": true,
            "hasManyThrough": false,
            "belongsToMany": true,
            "prefixForBelongsTo": "related",
            "useSchemaName": true,
            "modelCamelCase": true,
            "relationAccessorCamelCase": true,
            "columnAccessorCamelCase": true,
            "columnDefault": false,
            "columnDescription": true,
            "columnAutoIncrement": true,
            "tableDescription": true,
            "dataTypeVariable": "Seq",
            "skipTable": []
        },
        "tableOptions": {
            "timestamps": false
        }
    }
};

DİKKAT: Konfigürasyonun Singleton Davranışı

Bu modül konfigürasyon için require('config') komutu ile config modülünü kullanır. Config modülü bu yazının yazıldığı sırada singleton yapısındaydı. Bu nedenle yapılan her çağrıya aynı nesneyi döndürüyordu. Sonuç olarak sonraki çağrılarda konfigürasyon dosyası değiştirilse ya da sequelize-pg-generator constructor çağrılırken başka bir konfigürasyon dosyası gösterilse bile ilk konfigürasyon dönüyor.

Normal kullanımda bu herhangi bir sorun teşkil etmez, çünkü sequelize-pg-generator aynı proses içinde genellikle sadece bir kere çağrılır. Ancak bu davranış test etmeyi engellemektedir. Kullanıcı da herhangi bir nedenle bu davranıştan kaçınmak isteyebilir. Bunu aşmak için, yan yol kullanan "resetConfig" isimli bir opsiyon eklenmiştir. Eğer bu seçenek true olarak ayarlanırsa konfigürasyon resetlenir ve yeniden okunur. Bunu yapabilmek için sequelize-pg-generator config modülünü node cache'den siler. lorenwest tarafından github hatalar bölümünde tavsiye edilen bu ara çözüm düşük verimde bir yöntemdir.

Bunu aktive etmek için resetConfig ayarını true olarak vermeniz veya cli'den çağırırken --resetConfig eklemeniz yeterlidir.

var generator = require('sequelize-pg-generator');
generator(function (err) {
    if (err) { callback(err); }
}, {
    database: 'my_database',
    resetConfig: true
);

sequelize-pg-creator aşağıdaki kodu kullanır:

global.NODE_CONFIG = null;
delete require.cache[require.resolve('config')];
config = require('config');

Template Değişkenleri (Template'leri Özelleştirme)

Özel template'ler oluşturmak için kullanıcı varsayılan template dizinini kopyalayabilir veya sıfırdan kendisi oluşturarak "template.folder" konfigürasyon ayarını yeni kullanılacak olan dizini gösterecek şekilde ayarlar. 3 dosya gereklidir: index.ext (.ext kullandığınız template engine'in kullandığı dosya uzantısıdır), index.js, utils.js.

index.js ve utils.js dosyaları doğrudan hedef dizine kopyalanır. index.ext template ise model dosyalarını üretmek için her tablo için çağrılır.

Template içerisinde kullanılacak olan değişkenler ve açıklamaları aşağıda verilmiştir. Eğer bir değer tanımlanmamışsa (undefined ise), o değerin key'i üretilen dosyalara hiç yazılmayacaktır.

mainScript Hedef dizinde üretilen index.js dosyasının patikası.
warning Bu değişken konfigürasyon içerisinde özelleştirme ile ilgili uyarı mesajının gösterilmesi ile ilgili ayarın ne olduğunu tutar.
table Tablo detaylarını, alanları ve ilişkileri vb. tutan nesne.
table.modelName Tablo için model ismi.
table.tableName Tablonun ismi.
table.schema Tablonun PostgreSQL şema (schema) ismi
table.comment Tablonun açıklaması.
table.baseFileName Dosya isminin base kısmı.
SPECIAL Konfigürasyon dosyasında Sequelize.define metoduna iletilmek için ayarlanan opsiyonlar da table nesnesi altında bulunur. Örneğin: table.timestamps
table.columns Tablonun alanlarını içeren dizi.
table.columns[n].source 'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.columns[n].type Alanın Sequelize tipi.
table.columns[n].accessorName Alana erişmek için kullanılacak olan accessor metodunun ismi.
table.columns[n].name Alanın ismi.
table.columns[n].primaryKey Eğer bu alan birincil anahtarsa bu değer true olur.
table.columns[n].autoIncrement Eğer bu alan otomatik artırılan (auto increment) bir alansa bu değer true olur.
table.columns[n].allowNull Eğer bu alan NULL değerine izin veriyorsa bu değer true olur.
table.columns[n].defaultValue Alan için veri tabanındaki varsayılan değer.
table.columns[n].unique Alan bir unique anahtar ise veya kompozit bir unique anahtarın parçası ise unique anahtar ismini içeren değer.
table.columns[n].comment Alanın veri tabnındaki açıklaması.
table.columns[n].references Eğer bu alanın bir referansı varsa, bu değer alanın referans ettiği tablonun adını içerir.
table.columns[n].referencesKey Eğer bu alanın bir referansı varsa, bu değer alanın referans ettiği alanın adını içerir.
table.columns[n].onUpdate Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.columns[n].onDelete Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.hasManies Tablonun hasMany ilişkilerini içeren dizi.
table.hasManies[n].type İlişkinin tipini gösteren 'hasMany' değeri.
table.hasManies[n].source 'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.hasManies[n].name İlişkinin veri tabanındaki ismi.
table.hasManies[n].model Bu ilişkinin referans ettiği modelin ismi.
table.hasManies[n].as İlişki için alias ismi. Bu alias ismi Sequelize içerisinden bu ilişkiye erişmek için kullanılır.
table.hasManies[n].targetSchema İlişkinin referans ettiği PostgreSQL şemanın (schema) ismi.
table.hasManies[n].targetTable İlişkinin referans ettiği tablonun ismi.
table.hasManies[n].foreignKey İlişkinin referans ettiği tablodaki yabancı anahtar alanının ismi.
table.hasManies[n].onDelete Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.hasManies[n].onUpdate Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.hasManies[n].through Eğer bu bir through (many to many) ilişki ise ara birleşim tablosunun ismi. Through ilişkiler Sequelize 2.0 RC4 itibari ile kaldırılacak (DEPRECATED) olarak işaretlendi.
table.belongsTos Tablonun belongsTo ilişkilerini içeren dizi.
table.belongsTos[n].type İlişkinin tipini gösteren 'belongsTo' değeri.
table.belongsTos[n].source 'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.belongsTos[n].name İlişkinin veri tabanındaki ismi.
table.belongsTos[n].model Bu ilişkinin referans ettiği modelin ismi.
table.belongsTos[n].as İlişki için alias ismi. Bu alias ismi Sequelize içerisinden bu ilişkiye erişmek için kullanılır.
table.belongsTos[n].targetSchema İlişkinin referans ettiği PostgreSQL şemanın (schema) ismi.
table.belongsTos[n].targetTable İlişkinin referans ettiği tablonun ismi.
table.belongsTos[n].foreignKey Bu tablodaki bu ilişkiye ait olan yabancı anahtar alanının ismi.
table.belongsTos[n].onDelete Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsTos[n].onUpdate Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsToManies Tablonun belongsToMany ilişkilerini içeren dizi. belongsToMany ilişkilleri Sequelize 2.0 RC4 ve sonraki versiyonlarda mevcuttur.
table.belongsToManies[n].type İlişkinin tipini gösteren 'belongsToMany' değeri.
table.belongsToManies[n].source 'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.belongsToManies[n].name İlişkinin veri tabanındaki ismi.
table.belongsToManies[n].model Bu ilişkinin referans ettiği modelin ismi.
table.belongsToManies[n].as İlişki için alias ismi. Bu alias ismi Sequelize içerisinden bu ilişkiye erişmek için kullanılır.
table.belongsToManies[n].targetSchema İlişkinin referans ettiği PostgreSQL şemanın (schema) ismi.
table.belongsToManies[n].targetTable İlişkinin referans ettiği tablonun ismi.
table.belongsToManies[n].foreignKey Ara birleşim tablosundan bu tabloya referans veren yabancı anahtar alanının ismi.
table.belongsToManies[n].otherKey Ara birleşim tablosundan diğer hedef tabloya referans veren yabancı anahtar alanının ismi.
table.belongsToManies[n].onDelete Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsToManies[n].onUpdate Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsToManies[n].through Ara birleşim tablosunun ismi.
table.relations Tüm türlerdeki ilişkilerin birleşik listesini içeren dizi. Bu dizi hasMany ilişkileri, hasMany through ilişkileri, belongsTo ilişkileri, belongsToMany ilişkilerinin hepsini içerir.

Örnekler

Eager Loading

sequelize-pg-generator ilişkileri "as" kullanarak isimlendirir. Aksi takdirde aynı tablolar arasında tanımlanacak olan birden fazla ilişki çakışır. Örneğin:

account has many contacts as primaryContacts (account -----< contact)

account has many contacts as secondaryContacts (account ----< contact)

Bu durumda sequelize.js "as" isminin eager loading sırasında "as" parametresi olarak verilmesini istiyor..

account = orm.model('public.account'); // Can be configured without schema.
contact = orm.model('public.contact'); // Can be configured without schema.
account.findAll({ include: [ { model: contact, as: "primaryContacts" } ] }).then(function(data) {
    console.log(data[0].primaryContacts[0].name);
});

API