1
0
mirror of https://github.com/beego/bee.git synced 2024-11-23 11:50:55 +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], "/")
packageName = p[i+1 : len(p)-1]
}
ColorLog("[INFO] Using '%s' as model name\n", modelName)
ColorLog("[INFO] Using '%s' as package name\n", packageName)
fp := path.Join(crupath, "models", p)
@ -28,9 +27,16 @@ func generateModel(mname, fields, crupath string) {
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 {
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)
f.WriteString(content)
// gofmt generated source code
formatSourceCode(fpath)
@ -42,26 +48,54 @@ func generateModel(mname, fields, crupath string) {
}
}
var modelTpl = `package {{packageName}}
const (
BASE_MODEL_TPL = `package {{packageName}}
// 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"
"fmt"
"reflect"
"strings"
{{timePkg}}
"github.com/astaxie/beego/orm"
)
{{modelStruct}}
func init() {
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) {
func Add{{modelName}}(m *structures.{{modelName}}) (id int64, err error) {
o := orm.NewOrm()
id, err = o.Insert(m)
return
@ -69,9 +103,9 @@ func Add{{modelName}}(m *{{modelName}}) (id int64, err error) {
// Get{{modelName}}ById retrieves {{modelName}} by Id. Returns error if
// 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()
v = &{{modelName}}{Id: id}
v = &structures.{{modelName}}{Id: id}
if err = o.Read(v); err == nil {
return v, nil
}
@ -83,7 +117,7 @@ func Get{{modelName}}ById(id int64) (v *{{modelName}}, err error) {
func GetAll{{modelName}}(query map[string]string, fields []string, sortby []string, order []string,
offset int64, limit int64) (ml []interface{}, err error) {
o := orm.NewOrm()
qs := o.QueryTable(new({{modelName}}))
qs := o.QueryTable(new(structures.{{modelName}}))
// query k=v
for k, v := range query {
// 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...)
if _, err := qs.Limit(limit, offset).All(&l, fields...); err == nil {
if len(fields) == 0 {
@ -154,9 +188,9 @@ func GetAll{{modelName}}(query map[string]string, fields []string, sortby []stri
// Update{{modelName}} updates {{modelName}} by Id and returns error if
// 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()
v := {{modelName}}{Id: m.Id}
v := structures.{{modelName}}{Id: m.Id}
// ascertain id exists in the database
if err = o.Read(&v); err == nil {
var num int64
@ -171,14 +205,15 @@ func Update{{modelName}}ById(m *{{modelName}}) (err error) {
// the record to be deleted doesn't exist
func Delete{{modelName}}(id int64) (err error) {
o := orm.NewOrm()
v := {{modelName}}{Id: id}
v := structures.{{modelName}}{Id: id}
// ascertain id exists in the database
if err = o.Read(&v); err == nil {
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)
}
}
return
}
`
)

View File

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