Ejemplo n.º 1
0
func (mo *Model) finalize(m map[interface{}]interface{}) error {
	// types := mo.Database.Driver.Types()
	// for _, f := range mo.Fields {
	// 	f.Type = types[f.TypeInDB]
	// }

	createTimestamp := func(name string) {
		f := &Field{}
		f.def()
		f.Model = mo
		f.Name = name + "At"
		f.NameInEncoding = util.Snakecase(f.Name)
		f.NameInDB = f.Model.Table.Name + "_" + f.NameInEncoding
		f.TypeInDB = "timestamp"
		f.Type = f.Model.Database.Driver.Type(f.TypeInDB)
		f.Primitive = util.Primitive(f.Type)
		mo.Fields = append(mo.Fields, f)
	}

	if mo.CreatedAt {
		createTimestamp("Created")
	}
	if mo.UpdatedAt {
		createTimestamp("Updated")
	}
	if mo.DeletedAt {
		createTimestamp("Deleted")
	}

	createBy := func(name string) {
		f := &Field{}
		f.def()
		f.Model = mo
		f.Name = name + "By"
		f.NameInEncoding = util.Snakecase(f.Name)
		f.NameInDB = f.Model.Table.Name + "_" + f.NameInEncoding
		f.TypeInDB = "timestamp" // get timestamp type from driver
		f.Type = f.Model.Database.Driver.Type(f.TypeInDB)
		f.Primitive = util.Primitive(f.Type)
		mo.Fields = append(mo.Fields, f)
	}

	if mo.CreatedBy {
		createBy("Created")
	}
	if mo.UpdatedBy {
		createBy("Updated")
	}
	if mo.DeletedBy {
		createBy("Deleted")
	}

	// finalize relations

	return nil
}
Ejemplo n.º 2
0
func (f *Field) parse(name string, m map[interface{}]interface{}) error {
	f.def()
	f.Name = name
	f.NameInEncoding = util.Snakecase(f.Name)
	f.NameInDB = f.Model.Table.Name + "_" + f.NameInEncoding

	err := f.parseDefault(m)
	if err != nil {
		return err
	}

	err = f.parseType(m)
	if err != nil {
		return err
	}

	err = f.parseNull(m)
	if err != nil {
		return err
	}

	err = f.parseUnique(m)
	if err != nil {
		return err
	}

	err = f.parseInDB(m)
	if err != nil {
		return err
	}

	err = f.parseNameInDB(m)
	if err != nil {
		return err
	}

	err = f.parseWhere(m)
	if err != nil {
		return err
	}

	err = f.parseHaving(m)
	if err != nil {
		return err
	}

	err = f.parseOrderBy(m)
	if err != nil {
		return err
	}

	err = f.parseGroupBy(m)
	if err != nil {
		return err
	}

	err = f.parseCallbacks(m)
	if err != nil {
		return err
	}

	for _, a := range fieldAttrs {
		switch a {
		case "default":
			def, ok := m["default"]
			if ok {
				f.Default = def
			}
		}
	}

	// parse field wheres

	return nil
}