Generating Models
==================

First create a package named db_models. Create one file for every table. The function name and file name should match.
After write your models. We recommend to create a new package with name generate and put a generate.go for generating models you want.
It will go to create a models package and write files in to it.

An example db table ``your/project/db_models/account.go``

.. code-block:: golang

    package db_models

    import (
	    "github.com/MrSametBurgazoglu/enterprise/models"
	    "github.com/google/uuid"
    )

    func Account() *models.Table {
        idField := models.UUIDField("ID").DefaultFunc(uuid.New)

        tb := &models.Table{
            Fields: []models.FieldI{
                idField,
                models.StringField("Name"),
                models.StringField("Surname"),
                models.UUIDField("DenemeID").SetNillable(),
                models.UintField("Serial").AddSerial(),
            },
            Relations: []*models.Relation{
                models.ManyToOne(DenemeName, idField.DBName, "deneme_id"),
                models.ManyToMany(GroupName, "account_id", "group_id", "id", AccountGroupName),
            },
        }

        tb.SetTableName(AccountName)
        tb.SetIDField(idField)
        tb.AddIndex("name_surname_index", "Name", "Surname")

        return tb
    }

An example auto-generator table ``your/project/generate/generate.go``
When this executed it will create a new package in current directory called models and put your generated db models in it.

.. code-block:: golang

    package main

    import (
       "github.com/MrSametBurgazoglu/enterprise/generate"
       "your/project/db_models"
    )

    func main() {
        generate.Models(
            db_models.Account(),
            db_models.Group(),
        )
    }