1
0
mirror of https://github.com/beego/bee.git synced 2024-11-23 17:00:56 +00:00

Complete model modification

This commit is contained in:
MingZong 2016-04-01 17:17:51 +08:00
parent 2106cf4a38
commit e6815f495e
2 changed files with 166 additions and 127 deletions

View File

@ -14,7 +14,6 @@ func generateModel(mname, fields, crupath string) {
i := strings.LastIndex(p[:len(p)-1], "/") i := strings.LastIndex(p[:len(p)-1], "/")
packageName = p[i+1 : len(p)-1] packageName = p[i+1 : len(p)-1]
} }
ColorLog("[INFO] Using '%s' as model name\n", modelName) ColorLog("[INFO] Using '%s' as model name\n", modelName)
ColorLog("[INFO] Using '%s' as package name\n", packageName) ColorLog("[INFO] Using '%s' as package name\n", packageName)
fp := path.Join(crupath, "models", p) fp := path.Join(crupath, "models", p)
@ -28,9 +27,16 @@ func generateModel(mname, fields, crupath string) {
fpath := path.Join(fp, strings.ToLower(modelName)+".go") fpath := path.Join(fp, strings.ToLower(modelName)+".go")
if f, err := os.OpenFile(fpath, os.O_CREATE|os.O_EXCL|os.O_RDWR, 0666); err == nil { if f, err := os.OpenFile(fpath, os.O_CREATE|os.O_EXCL|os.O_RDWR, 0666); err == nil {
defer f.Close() defer f.Close()
content := strings.Replace(modelTpl, "{{packageName}}", packageName, -1) var content string
if fields != "" {
generateStructure(modelName,fields,crupath)
content = strings.Replace(CRUD_MODEL_TPL, "{{packageName}}", packageName, -1)
pkgPath := getPackagePath(crupath)
content = strings.Replace(content, "{{pkgPath}}", pkgPath, -1)
} else {
content = strings.Replace(BASE_MODEL_TPL, "{{packageName}}", packageName, -1)
}
content = strings.Replace(content, "{{modelName}}", modelName, -1) content = strings.Replace(content, "{{modelName}}", modelName, -1)
f.WriteString(content) f.WriteString(content)
// gofmt generated source code // gofmt generated source code
formatSourceCode(fpath) formatSourceCode(fpath)
@ -42,48 +48,76 @@ func generateModel(mname, fields, crupath string) {
} }
} }
var modelTpl = `package {{packageName}} const (
BASE_MODEL_TPL = `package {{packageName}}
import ( // Add{{modelName}} insert a new {{modelName}} into database and returns
// last inserted Id on success.
func Add{{modelName}}() () {
}
// Get{{modelName}}ById retrieves {{modelName}} by Id. Returns error if
// Id doesn't exist
func Get{{modelName}}ById() () {
}
// GetAll{{modelName}} retrieves all {{modelName}} matches certain condition. Returns empty list if
// no records exist
func GetAll{{modelName}}() () {
}
// Update{{modelName}} updates {{modelName}} by Id and returns error if
// the record to be updated doesn't exist
func Update{{modelName}}ById() () {
}
// Delete{{modelName}} deletes {{modelName}} by Id and returns error if
// the record to be deleted doesn't exist
func Delete{{modelName}}() () {
}
`
CRUD_MODEL_TPL = `package {{packageName}}
import (
"{{pkgPath}}/structures"
"errors" "errors"
"fmt" "fmt"
"reflect" "reflect"
"strings" "strings"
{{timePkg}}
"github.com/astaxie/beego/orm" "github.com/astaxie/beego/orm"
) )
{{modelStruct}} // Add{{modelName}} insert a new {{modelName}} into database and returns
// last inserted Id on success.
func init() { func Add{{modelName}}(m *structures.{{modelName}}) (id int64, err error) {
orm.RegisterModel(new({{modelName}}))
}
// Add{{modelName}} insert a new {{modelName}} into database and returns
// last inserted Id on success.
func Add{{modelName}}(m *{{modelName}}) (id int64, err error) {
o := orm.NewOrm() o := orm.NewOrm()
id, err = o.Insert(m) id, err = o.Insert(m)
return return
} }
// Get{{modelName}}ById retrieves {{modelName}} by Id. Returns error if // Get{{modelName}}ById retrieves {{modelName}} by Id. Returns error if
// Id doesn't exist // Id doesn't exist
func Get{{modelName}}ById(id int64) (v *{{modelName}}, err error) { func Get{{modelName}}ById(id int64) (v *structures.{{modelName}}, err error) {
o := orm.NewOrm() o := orm.NewOrm()
v = &{{modelName}}{Id: id} v = &structures.{{modelName}}{Id: id}
if err = o.Read(v); err == nil { if err = o.Read(v); err == nil {
return v, nil return v, nil
} }
return nil, err return nil, err
} }
// GetAll{{modelName}} retrieves all {{modelName}} matches certain condition. Returns empty list if // GetAll{{modelName}} retrieves all {{modelName}} matches certain condition. Returns empty list if
// no records exist // no records exist
func GetAll{{modelName}}(query map[string]string, fields []string, sortby []string, order []string, func GetAll{{modelName}}(query map[string]string, fields []string, sortby []string, order []string,
offset int64, limit int64) (ml []interface{}, err error) { offset int64, limit int64) (ml []interface{}, err error) {
o := orm.NewOrm() o := orm.NewOrm()
qs := o.QueryTable(new({{modelName}})) qs := o.QueryTable(new(structures.{{modelName}}))
// query k=v // query k=v
for k, v := range query { for k, v := range query {
// rewrite dot-notation to Object__Attribute // rewrite dot-notation to Object__Attribute
@ -129,7 +163,7 @@ func GetAll{{modelName}}(query map[string]string, fields []string, sortby []stri
} }
} }
var l []{{modelName}} var l []structures.{{modelName}}
qs = qs.OrderBy(sortFields...) qs = qs.OrderBy(sortFields...)
if _, err := qs.Limit(limit, offset).All(&l, fields...); err == nil { if _, err := qs.Limit(limit, offset).All(&l, fields...); err == nil {
if len(fields) == 0 { if len(fields) == 0 {
@ -150,13 +184,13 @@ func GetAll{{modelName}}(query map[string]string, fields []string, sortby []stri
return ml, nil return ml, nil
} }
return nil, err return nil, err
} }
// Update{{modelName}} updates {{modelName}} by Id and returns error if // Update{{modelName}} updates {{modelName}} by Id and returns error if
// the record to be updated doesn't exist // the record to be updated doesn't exist
func Update{{modelName}}ById(m *{{modelName}}) (err error) { func Update{{modelName}}ById(m *structures.{{modelName}}) (err error) {
o := orm.NewOrm() o := orm.NewOrm()
v := {{modelName}}{Id: m.Id} v := structures.{{modelName}}{Id: m.Id}
// ascertain id exists in the database // ascertain id exists in the database
if err = o.Read(&v); err == nil { if err = o.Read(&v); err == nil {
var num int64 var num int64
@ -165,20 +199,21 @@ func Update{{modelName}}ById(m *{{modelName}}) (err error) {
} }
} }
return return
} }
// Delete{{modelName}} deletes {{modelName}} by Id and returns error if // Delete{{modelName}} deletes {{modelName}} by Id and returns error if
// the record to be deleted doesn't exist // the record to be deleted doesn't exist
func Delete{{modelName}}(id int64) (err error) { func Delete{{modelName}}(id int64) (err error) {
o := orm.NewOrm() o := orm.NewOrm()
v := {{modelName}}{Id: id} v := structures.{{modelName}}{Id: id}
// ascertain id exists in the database // ascertain id exists in the database
if err = o.Read(&v); err == nil { if err = o.Read(&v); err == nil {
var num int64 var num int64
if num, err = o.Delete(&{{modelName}}{Id: id}); err == nil { if num, err = o.Delete(&structures.{{modelName}}{Id: id}); err == nil {
fmt.Println("Number of records deleted in database:", num) fmt.Println("Number of records deleted in database:", num)
} }
} }
return return
} }
` `
)

View File

@ -53,7 +53,7 @@ func generateStructure(cname, fields, crupath string) {
content = strings.Replace(STRUCTURE_TPL, "{{packageName}}", packageName, -1) content = strings.Replace(STRUCTURE_TPL, "{{packageName}}", packageName, -1)
content = strings.Replace(content, "{{structStruct}}", structStruct, -1) content = strings.Replace(content, "{{structStruct}}", structStruct, -1)
if hastime { if hastime {
content = strings.Replace(content, "{{timePkg}}", `import("time")`, -1) content = strings.Replace(content, "{{timePkg}}", `"time"`, -1)
} else { } else {
content = strings.Replace(content, "{{timePkg}}", "", -1) content = strings.Replace(content, "{{timePkg}}", "", -1)
} }
@ -138,14 +138,18 @@ func getType(ktype string) (kt, tag string, hasTime bool) {
const ( const (
BAST_STRUCTURE_TPL = `package {{packageName}} BAST_STRUCTURE_TPL = `package {{packageName}}
type {{structureName}}Struct struct { type {{structureName}} struct {
} }
` `
STRUCTURE_TPL = `package {{packageName}} STRUCTURE_TPL = `package {{packageName}}
import(
"github.com/astaxie/beego/orm"
{{timePkg}} {{timePkg}}
)
{{structStruct}} {{structStruct}}