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 }
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 }