mirror of
https://github.com/beego/bee.git
synced 2024-11-22 15:10:54 +00:00
support object ref model
This commit is contained in:
parent
0e240214ad
commit
525d2b0901
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}}
|
||||||
|
59
g_docs.go
59
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,32 +662,35 @@ 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, "/")
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user