mirror of
				https://github.com/beego/bee.git
				synced 2025-10-30 10:43:22 +00:00 
			
		
		
		
	Generate fixes for model and controller
- use int64 for all places handling model id - use controller code from appcode if a matching model is found
This commit is contained in:
		
							
								
								
									
										171
									
								
								g_controllers.go
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								g_controllers.go
									
									
									
									
									
								
							| @@ -44,7 +44,16 @@ func generateController(cname, crupath string) { | ||||
| 	fpath := path.Join(fp, strings.ToLower(controllerName)+".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(controllerTpl, "{{packageName}}", packageName, -1) | ||||
| 		modelPath := path.Join(crupath, "models", strings.ToLower(controllerName)+".go") | ||||
| 		var content string | ||||
| 		if _, err := os.Stat(modelPath); err == nil { | ||||
| 			ColorLog("[INFO] Using matching model '%s'\n", controllerName) | ||||
| 			content = strings.Replace(controllerModelTpl, "{{packageName}}", packageName, -1) | ||||
| 			pkgPath := getPackagePath(crupath) | ||||
| 			content = strings.Replace(content, "{{pkgPath}}", pkgPath, -1) | ||||
| 		} else { | ||||
| 			content = strings.Replace(controllerTpl, "{{packageName}}", packageName, -1) | ||||
| 		} | ||||
| 		content = strings.Replace(content, "{{controllerName}}", controllerName, -1) | ||||
| 		f.WriteString(content) | ||||
| 		// gofmt generated source code | ||||
| @@ -132,3 +141,163 @@ func (c *{{controllerName}}Controller) Delete() { | ||||
| 	 | ||||
| } | ||||
| ` | ||||
|  | ||||
| var controllerModelTpl = `package {{packageName}} | ||||
|  | ||||
| import ( | ||||
| 	"{{pkgPath}}/models" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/astaxie/beego" | ||||
| ) | ||||
|  | ||||
| // oprations for {{controllerName}} | ||||
| type {{controllerName}}Controller struct { | ||||
| 	beego.Controller | ||||
| } | ||||
|  | ||||
| func (c *{{controllerName}}Controller) URLMapping() { | ||||
| 	c.Mapping("Post", c.Post) | ||||
| 	c.Mapping("GetOne", c.GetOne) | ||||
| 	c.Mapping("GetAll", c.GetAll) | ||||
| 	c.Mapping("Put", c.Put) | ||||
| 	c.Mapping("Delete", c.Delete) | ||||
| } | ||||
|  | ||||
| // @Title Post | ||||
| // @Description create {{controllerName}} | ||||
| // @Param	body		body 	models.{{controllerName}}	true		"body for {{controllerName}} content" | ||||
| // @Success 200 {int} models.{{controllerName}}.Id | ||||
| // @Failure 403 body is empty | ||||
| // @router / [post] | ||||
| func (c *{{controllerName}}Controller) Post() { | ||||
| 	var v models.{{controllerName}} | ||||
| 	json.Unmarshal(c.Ctx.Input.RequestBody, &v) | ||||
| 	if id, err := models.Add{{controllerName}}(&v); err == nil { | ||||
| 		c.Data["json"] = map[string]int64{"id": id} | ||||
| 	} else { | ||||
| 		c.Data["json"] = err.Error() | ||||
| 	} | ||||
| 	c.ServeJson() | ||||
| } | ||||
|  | ||||
| // @Title Get | ||||
| // @Description get {{controllerName}} by id | ||||
| // @Param	id		path 	string	true		"The key for staticblock" | ||||
| // @Success 200 {object} models.{{controllerName}} | ||||
| // @Failure 403 :id is empty | ||||
| // @router /:id [get] | ||||
| func (c *{{controllerName}}Controller) GetOne() { | ||||
| 	idStr := c.Ctx.Input.Params[":id"] | ||||
| 	id, _ := strconv.ParseInt(idStr, 0, 64) | ||||
| 	v, err := models.Get{{controllerName}}ById(id) | ||||
| 	if err != nil { | ||||
| 		c.Data["json"] = err.Error() | ||||
| 	} else { | ||||
| 		c.Data["json"] = v | ||||
| 	} | ||||
| 	c.ServeJson() | ||||
| } | ||||
|  | ||||
| // @Title Get All | ||||
| // @Description get {{controllerName}} | ||||
| // @Param	query	query	string	false	"Filter. e.g. col1:v1,col2:v2 ..." | ||||
| // @Param	fields	query	string	false	"Fields returned. e.g. col1,col2 ..." | ||||
| // @Param	sortby	query	string	false	"Sorted-by fields. e.g. col1,col2 ..." | ||||
| // @Param	order	query	string	false	"Order corresponding to each sortby field, if single value, apply to all sortby fields. e.g. desc,asc ..." | ||||
| // @Param	limit	query	string	false	"Limit the size of result set. Must be an integer" | ||||
| // @Param	offset	query	string	false	"Start position of result set. Must be an integer" | ||||
| // @Success 200 {object} models.{{controllerName}} | ||||
| // @Failure 403  | ||||
| // @router / [get] | ||||
| func (c *{{controllerName}}Controller) GetAll() { | ||||
| 	var fields []string | ||||
| 	var sortby []string | ||||
| 	var order []string | ||||
| 	var query map[string]string = make(map[string]string) | ||||
| 	var limit int64 = 10 | ||||
| 	var offset int64 = 0 | ||||
|  | ||||
| 	// fields: col1,col2,entity.col3 | ||||
| 	if v := c.GetString("fields"); v != "" { | ||||
| 		fields = strings.Split(v, ",") | ||||
| 	} | ||||
| 	// limit: 10 (default is 10) | ||||
| 	if v, err := c.GetInt64("limit"); err == nil { | ||||
| 		limit = v | ||||
| 	} | ||||
| 	// offset: 0 (default is 0) | ||||
| 	if v, err := c.GetInt64("offset"); err == nil { | ||||
| 		offset = v | ||||
| 	} | ||||
| 	// sortby: col1,col2 | ||||
| 	if v := c.GetString("sortby"); v != "" { | ||||
| 		sortby = strings.Split(v, ",") | ||||
| 	} | ||||
| 	// order: desc,asc | ||||
| 	if v := c.GetString("order"); v != "" { | ||||
| 		order = strings.Split(v, ",") | ||||
| 	} | ||||
| 	// query: k:v,k:v | ||||
| 	if v := c.GetString("query"); v != "" { | ||||
| 		for _, cond := range strings.Split(v, ",") { | ||||
| 			kv := strings.Split(cond, ":") | ||||
| 			if len(kv) != 2 { | ||||
| 				c.Data["json"] = errors.New("Error: invalid query key/value pair") | ||||
| 				c.ServeJson() | ||||
| 				return | ||||
| 			} | ||||
| 			k, v := kv[0], kv[1] | ||||
| 			query[k] = v | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	l, err := models.GetAll{{controllerName}}(query, fields, sortby, order, offset, limit) | ||||
| 	if err != nil { | ||||
| 		c.Data["json"] = err.Error() | ||||
| 	} else { | ||||
| 		c.Data["json"] = l | ||||
| 	} | ||||
| 	c.ServeJson() | ||||
| } | ||||
|  | ||||
| // @Title Update | ||||
| // @Description update the {{controllerName}} | ||||
| // @Param	id		path 	string	true		"The id you want to update" | ||||
| // @Param	body		body 	models.{{controllerName}}	true		"body for {{controllerName}} content" | ||||
| // @Success 200 {object} models.{{controllerName}} | ||||
| // @Failure 403 :id is not int | ||||
| // @router /:id [put] | ||||
| func (c *{{controllerName}}Controller) Put() { | ||||
| 	idStr := c.Ctx.Input.Params[":id"] | ||||
| 	id, _ := strconv.ParseInt(idStr, 0, 64) | ||||
| 	v := models.{{controllerName}}{Id: id} | ||||
| 	json.Unmarshal(c.Ctx.Input.RequestBody, &v) | ||||
| 	if err := models.Update{{controllerName}}ById(&v); err == nil { | ||||
| 		c.Data["json"] = "OK" | ||||
| 	} else { | ||||
| 		c.Data["json"] = err.Error() | ||||
| 	} | ||||
| 	c.ServeJson() | ||||
| } | ||||
|  | ||||
| // @Title Delete | ||||
| // @Description delete the {{controllerName}} | ||||
| // @Param	id		path 	string	true		"The id you want to delete" | ||||
| // @Success 200 {string} delete success! | ||||
| // @Failure 403 id is empty | ||||
| // @router /:id [delete] | ||||
| func (c *{{controllerName}}Controller) Delete() { | ||||
| 	idStr := c.Ctx.Input.Params[":id"] | ||||
| 	id, _ := strconv.ParseInt(idStr, 0, 64) | ||||
| 	if err := models.Delete{{controllerName}}(id); err == nil { | ||||
| 		c.Data["json"] = "OK" | ||||
| 	} else { | ||||
| 		c.Data["json"] = err.Error() | ||||
| 	} | ||||
| 	c.ServeJson() | ||||
| } | ||||
| ` | ||||
|   | ||||
| @@ -140,7 +140,7 @@ 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 int) (v *{{modelName}}, err error) { | ||||
| func Get{{modelName}}ById(id int64) (v *{{modelName}}, err error) { | ||||
| 	o := orm.NewOrm() | ||||
| 	v = &{{modelName}}{Id: id} | ||||
| 	if err = o.Read(v); err == nil { | ||||
| @@ -240,7 +240,7 @@ func Update{{modelName}}ById(m *{{modelName}}) (err error) { | ||||
|  | ||||
| // Delete{{modelName}} deletes {{modelName}} by Id and returns error if | ||||
| // the record to be deleted doesn't exist | ||||
| func Delete{{modelName}}(id int) (err error) { | ||||
| func Delete{{modelName}}(id int64) (err error) { | ||||
| 	o := orm.NewOrm() | ||||
| 	v := {{modelName}}{Id: id} | ||||
| 	// ascertain id exists in the database | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Pelle Johnsen
					Pelle Johnsen