fix(net/goai): embedded struct with tags also expand as properties of the parent struct (#3956)

This commit is contained in:
Wlynxg
2024-11-23 15:38:14 +08:00
committed by GitHub
parent 15f94975db
commit ee3eb8d48c
2 changed files with 45 additions and 1 deletions

View File

@ -176,7 +176,7 @@ func (oai *OpenApiV3) structToSchema(object interface{}) (*Schema, error) {
// struct.
structFields, _ := gstructs.Fields(gstructs.FieldsInput{
Pointer: object,
RecursiveOption: gstructs.RecursiveOptionEmbeddedNoTag,
RecursiveOption: gstructs.RecursiveOptionEmbedded,
})
schema.Type = TypeObject
for _, structField := range structFields {

View File

@ -256,3 +256,47 @@ func Test_Issue3889(t *testing.T) {
t.Assert(schema, Issue3889Res403Schema)
})
}
type Issue3930DefaultReq struct {
g.Meta `path:"/user/{id}" method:"get" tags:"User" summary:"Get one user"`
Id int64 `v:"required" dc:"user id"`
}
type Issue3930DefaultRes struct {
*Issue3930User `dc:"user"`
}
type Issue3930User struct {
Id uint `json:"id" orm:"id" description:"user id"` // user id
}
type Issue3930 struct{}
func (Issue3930) Default(ctx context.Context, req *Issue3930DefaultReq) (res *Issue3930DefaultRes, err error) {
res = &Issue3930DefaultRes{}
return
}
// https://github.com/gogf/gf/issues/3930
func Test_Issue3930(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
s := g.Server(guid.S())
s.Use(ghttp.MiddlewareHandlerResponse)
s.Group("/", func(group *ghttp.RouterGroup) {
group.Bind(
new(Issue3930),
)
})
s.SetLogger(nil)
s.SetOpenApiPath("/api.json")
s.SetDumpRouterMap(false)
s.Start()
defer s.Shutdown()
time.Sleep(100 * time.Millisecond)
var (
api = s.GetOpenApi()
reqPath = "github.com.gogf.gf.v2.net.goai_test.Issue3930DefaultRes"
)
t.AssertNE(api.Components.Schemas.Get(reqPath).Value.Properties.Get("id"), nil)
})
}