mirror of
				https://github.com/beego/bee.git
				synced 2025-10-31 22:43:24 +00:00 
			
		
		
		
	support object ref model
This commit is contained in:
		
							
								
								
									
										16
									
								
								apiapp.go
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								apiapp.go
									
									
									
									
									
								
							| @@ -298,7 +298,7 @@ type ObjectController struct { | |||||||
| 	beego.Controller | 	beego.Controller | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title create | // @Title Create | ||||||
| // @Description create object | // @Description create object | ||||||
| // @Param	body		body 	models.Object	true		"The object content" | // @Param	body		body 	models.Object	true		"The object content" | ||||||
| // @Success 200 {string} models.Object.Id | // @Success 200 {string} models.Object.Id | ||||||
| @@ -342,7 +342,7 @@ func (o *ObjectController) GetAll() { | |||||||
| 	o.ServeJSON() | 	o.ServeJSON() | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title update | // @Title Update | ||||||
| // @Description update the object | // @Description update the object | ||||||
| // @Param	objectId		path 	string	true		"The objectid you want to update" | // @Param	objectId		path 	string	true		"The objectid you want to update" | ||||||
| // @Param	body		body 	models.Object	true		"The body" | // @Param	body		body 	models.Object	true		"The body" | ||||||
| @@ -363,7 +363,7 @@ func (o *ObjectController) Put() { | |||||||
| 	o.ServeJSON() | 	o.ServeJSON() | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title delete | // @Title Delete | ||||||
| // @Description delete the object | // @Description delete the object | ||||||
| // @Param	objectId		path 	string	true		"The objectId you want to delete" | // @Param	objectId		path 	string	true		"The objectId you want to delete" | ||||||
| // @Success 200 {string} delete success! | // @Success 200 {string} delete success! | ||||||
| @@ -391,7 +391,7 @@ type UserController struct { | |||||||
| 	beego.Controller | 	beego.Controller | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title createUser | // @Title CreateUser | ||||||
| // @Description create users | // @Description create users | ||||||
| // @Param	body		body 	models.User	true		"body for user content" | // @Param	body		body 	models.User	true		"body for user content" | ||||||
| // @Success 200 {int} models.User.Id | // @Success 200 {int} models.User.Id | ||||||
| @@ -405,7 +405,7 @@ func (u *UserController) Post() { | |||||||
| 	u.ServeJSON() | 	u.ServeJSON() | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title Get | // @Title GetAll | ||||||
| // @Description get all Users | // @Description get all Users | ||||||
| // @Success 200 {object} models.User | // @Success 200 {object} models.User | ||||||
| // @router / [get] | // @router / [get] | ||||||
| @@ -434,7 +434,7 @@ func (u *UserController) Get() { | |||||||
| 	u.ServeJSON() | 	u.ServeJSON() | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title update | // @Title Update | ||||||
| // @Description update the user | // @Description update the user | ||||||
| // @Param	uid		path 	string	true		"The uid you want to update" | // @Param	uid		path 	string	true		"The uid you want to update" | ||||||
| // @Param	body		body 	models.User	true		"body for user content" | // @Param	body		body 	models.User	true		"body for user content" | ||||||
| @@ -456,7 +456,7 @@ func (u *UserController) Put() { | |||||||
| 	u.ServeJSON() | 	u.ServeJSON() | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title delete | // @Title Delete | ||||||
| // @Description delete the user | // @Description delete the user | ||||||
| // @Param	uid		path 	string	true		"The uid you want to delete" | // @Param	uid		path 	string	true		"The uid you want to delete" | ||||||
| // @Success 200 {string} delete success! | // @Success 200 {string} delete success! | ||||||
| @@ -469,7 +469,7 @@ func (u *UserController) Delete() { | |||||||
| 	u.ServeJSON() | 	u.ServeJSON() | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title login | // @Title Login | ||||||
| // @Description Logs user into the system | // @Description Logs user into the system | ||||||
| // @Param	username		query 	string	true		"The username for login" | // @Param	username		query 	string	true		"The username for login" | ||||||
| // @Param	password		query 	string	true		"The password for login" | // @Param	password		query 	string	true		"The password for login" | ||||||
|   | |||||||
| @@ -95,7 +95,7 @@ func (c *{{controllerName}}Controller) URLMapping() { | |||||||
| 	c.Mapping("Delete", c.Delete) | 	c.Mapping("Delete", c.Delete) | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title Post | // @Title Create | ||||||
| // @Description create {{controllerName}} | // @Description create {{controllerName}} | ||||||
| // @Param	body		body 	models.{{controllerName}}	true		"body for {{controllerName}} content" | // @Param	body		body 	models.{{controllerName}}	true		"body for {{controllerName}} content" | ||||||
| // @Success 201 {object} models.{{controllerName}} | // @Success 201 {object} models.{{controllerName}} | ||||||
| @@ -105,7 +105,7 @@ func (c *{{controllerName}}Controller) Post() { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title Get | // @Title GetOne | ||||||
| // @Description get {{controllerName}} by id | // @Description get {{controllerName}} by id | ||||||
| // @Param	id		path 	string	true		"The key for staticblock" | // @Param	id		path 	string	true		"The key for staticblock" | ||||||
| // @Success 200 {object} models.{{controllerName}} | // @Success 200 {object} models.{{controllerName}} | ||||||
| @@ -115,7 +115,7 @@ func (c *{{controllerName}}Controller) GetOne() { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // @Title Get All | // @Title GetAll | ||||||
| // @Description get {{controllerName}} | // @Description get {{controllerName}} | ||||||
| // @Param	query	query	string	false	"Filter. e.g. col1:v1,col2:v2 ..." | // @Param	query	query	string	false	"Filter. e.g. col1:v1,col2:v2 ..." | ||||||
| // @Param	fields	query	string	false	"Fields returned. e.g. col1,col2 ..." | // @Param	fields	query	string	false	"Fields returned. e.g. col1,col2 ..." | ||||||
|   | |||||||
							
								
								
									
										61
									
								
								g_docs.go
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								g_docs.go
									
									
									
									
									
								
							| @@ -123,7 +123,7 @@ func generateDocs(curpath string) { | |||||||
| 													controllerName = analisysNSInclude(s, pp) | 													controllerName = analisysNSInclude(s, pp) | ||||||
| 													if v, ok := controllerComments[controllerName]; ok { | 													if v, ok := controllerComments[controllerName]; ok { | ||||||
| 														rootapi.Tags = append(rootapi.Tags, swagger.Tag{ | 														rootapi.Tags = append(rootapi.Tags, swagger.Tag{ | ||||||
| 															Name:        s, | 															Name:        strings.Trim(s, "/"), | ||||||
| 															Description: v, | 															Description: v, | ||||||
| 														}) | 														}) | ||||||
| 													} | 													} | ||||||
| @@ -191,7 +191,7 @@ func analisysNSInclude(baseurl string, ce *ast.CallExpr) string { | |||||||
| 				tag := "" | 				tag := "" | ||||||
| 				if baseurl != "" { | 				if baseurl != "" { | ||||||
| 					rt = baseurl + rt | 					rt = baseurl + rt | ||||||
| 					tag = baseurl | 					tag = strings.Trim(baseurl, "/") | ||||||
| 				} else { | 				} else { | ||||||
| 					tag = cname | 					tag = cname | ||||||
| 				} | 				} | ||||||
| @@ -338,7 +338,7 @@ func parserComments(comments *ast.CommentGroup, funcName, controllerName, pkgpat | |||||||
| 				if len(e1) < 1 { | 				if len(e1) < 1 { | ||||||
| 					return errors.New("you should has router infomation") | 					return errors.New("you should has router infomation") | ||||||
| 				} | 				} | ||||||
| 				routerPath = e1[0] | 				routerPath = urlReplace(e1[0]) | ||||||
| 				if len(e1) == 2 && e1[1] != "" { | 				if len(e1) == 2 && e1[1] != "" { | ||||||
| 					e1 = strings.SplitN(e1[1], " ", 2) | 					e1 = strings.SplitN(e1[1], " ", 2) | ||||||
| 					HTTPMethod = strings.ToUpper(strings.Trim(e1[0], "[]")) | 					HTTPMethod = strings.ToUpper(strings.Trim(e1[0], "[]")) | ||||||
| @@ -570,7 +570,7 @@ func getModel(str string) (pkgpath, objectname string, m swagger.Schema, realTyp | |||||||
| 					if st.Fields.List != nil { | 					if st.Fields.List != nil { | ||||||
| 						m.Properties = make(map[string]swagger.Propertie) | 						m.Properties = make(map[string]swagger.Propertie) | ||||||
| 						for _, field := range st.Fields.List { | 						for _, field := range st.Fields.List { | ||||||
| 							isSlice, realType := typeAnalyser(field) | 							isSlice, realType, sType := typeAnalyser(field) | ||||||
| 							realTypes = append(realTypes, realType) | 							realTypes = append(realTypes, realType) | ||||||
| 							mp := swagger.Propertie{} | 							mp := swagger.Propertie{} | ||||||
| 							// add type slice | 							// add type slice | ||||||
| @@ -578,8 +578,10 @@ func getModel(str string) (pkgpath, objectname string, m swagger.Schema, realTyp | |||||||
| 								mp.Type = "array" | 								mp.Type = "array" | ||||||
| 								mp.Properties = make(map[string]swagger.Propertie) | 								mp.Properties = make(map[string]swagger.Propertie) | ||||||
| 								if isBasicType(realType) { | 								if isBasicType(realType) { | ||||||
|  | 									typeFormat := strings.Split(sType, ":") | ||||||
| 									mp.Properties["items"] = swagger.Propertie{ | 									mp.Properties["items"] = swagger.Propertie{ | ||||||
| 										Type: realType, | 										Type:   typeFormat[0], | ||||||
|  | 										Format: typeFormat[1], | ||||||
| 									} | 									} | ||||||
| 								} else { | 								} else { | ||||||
| 									mp.Properties["items"] = swagger.Propertie{ | 									mp.Properties["items"] = swagger.Propertie{ | ||||||
| @@ -587,7 +589,13 @@ func getModel(str string) (pkgpath, objectname string, m swagger.Schema, realTyp | |||||||
| 									} | 									} | ||||||
| 								} | 								} | ||||||
| 							} else { | 							} else { | ||||||
| 								mp.Type = realType | 								if isBasicType(realType) { | ||||||
|  | 									typeFormat := strings.Split(sType, ":") | ||||||
|  | 									mp.Type = typeFormat[0] | ||||||
|  | 									mp.Format = typeFormat[1] | ||||||
|  | 								} else if sType == "object" { | ||||||
|  | 									mp.Ref = "#/definitions/" + realType | ||||||
|  | 								} | ||||||
| 							} | 							} | ||||||
|  |  | ||||||
| 							// dont add property if anonymous field | 							// dont add property if anonymous field | ||||||
| @@ -644,7 +652,7 @@ func getModel(str string) (pkgpath, objectname string, m swagger.Schema, realTyp | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if m.Title == "" { | 	if m.Title == "" { | ||||||
| 		ColorLog("can't find the object: %v", str) | 		ColorLog("can't find the object: %s", str) | ||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 	if len(rootapi.Definitions) == 0 { | 	if len(rootapi.Definitions) == 0 { | ||||||
| @@ -654,31 +662,34 @@ func getModel(str string) (pkgpath, objectname string, m swagger.Schema, realTyp | |||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
| func typeAnalyser(f *ast.Field) (isSlice bool, realType string) { | func typeAnalyser(f *ast.Field) (isSlice bool, realType, swaggerType string) { | ||||||
| 	if arr, ok := f.Type.(*ast.ArrayType); ok { | 	if arr, ok := f.Type.(*ast.ArrayType); ok { | ||||||
| 		if isBasicType(fmt.Sprint(arr.Elt)) { | 		if isBasicType(fmt.Sprint(arr.Elt)) { | ||||||
| 			return false, fmt.Sprintf("[]%v", arr.Elt) | 			return false, fmt.Sprintf("[]%v", arr.Elt), basicTypes[fmt.Sprint(arr.Elt)] | ||||||
| 		} | 		} | ||||||
| 		if mp, ok := arr.Elt.(*ast.MapType); ok { | 		if mp, ok := arr.Elt.(*ast.MapType); ok { | ||||||
| 			return false, fmt.Sprintf("map[%v][%v]", mp.Key, mp.Value) | 			return false, fmt.Sprintf("map[%v][%v]", mp.Key, mp.Value), "object" | ||||||
| 		} | 		} | ||||||
| 		if star, ok := arr.Elt.(*ast.StarExpr); ok { | 		if star, ok := arr.Elt.(*ast.StarExpr); ok { | ||||||
| 			return true, fmt.Sprint(star.X) | 			return true, fmt.Sprint(star.X), "object" | ||||||
| 		} | 		} | ||||||
| 		return true, fmt.Sprint(arr.Elt) | 		return true, fmt.Sprint(arr.Elt), "object" | ||||||
| 	} | 	} | ||||||
| 	switch t := f.Type.(type) { | 	switch t := f.Type.(type) { | ||||||
| 	case *ast.StarExpr: | 	case *ast.StarExpr: | ||||||
| 		return false, fmt.Sprint(t.X) | 		return false, fmt.Sprint(t.X), "object" | ||||||
|  | 	case *ast.MapType: | ||||||
|  | 		return false, fmt.Sprint(t.Value), "object" | ||||||
| 	} | 	} | ||||||
| 	return false, fmt.Sprint(f.Type) | 	if k, ok := basicTypes[fmt.Sprint(f.Type)]; ok { | ||||||
|  | 		return false, fmt.Sprint(f.Type), k | ||||||
|  | 	} | ||||||
|  | 	return false, fmt.Sprint(f.Type), "object" | ||||||
| } | } | ||||||
|  |  | ||||||
| func isBasicType(Type string) bool { | func isBasicType(Type string) bool { | ||||||
| 	for _, v := range basicTypes { | 	if _, ok := basicTypes[Type]; ok { | ||||||
| 		if v == Type { | 		return true | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	return false | 	return false | ||||||
| } | } | ||||||
| @@ -726,3 +737,17 @@ func appendModels(cmpath, pkgpath, controllerName string, realTypes []string) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func urlReplace(src string) string { | ||||||
|  | 	pt := strings.Split(src, "/") | ||||||
|  | 	for i, p := range pt { | ||||||
|  | 		if len(p) > 0 { | ||||||
|  | 			if p[0] == ':' { | ||||||
|  | 				pt[i] = "{" + p[1:] + "}" | ||||||
|  | 			} else if p[0] == '?' && p[1] == ':' { | ||||||
|  | 				pt[i] = "{" + p[2:] + "}" | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return strings.Join(pt, "/") | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 astaxie
					astaxie