From ee3eb8d48cd0496e9e5a67c2ee1f4f4e8358b088 Mon Sep 17 00:00:00 2001 From: Wlynxg Date: Sat, 23 Nov 2024 15:38:14 +0800 Subject: [PATCH] fix(net/goai): embedded struct with tags also expand as properties of the parent struct (#3956) --- net/goai/goai_shema.go | 2 +- net/goai/goai_z_unit_issue_test.go | 44 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/net/goai/goai_shema.go b/net/goai/goai_shema.go index f8a6be2d831..042e0f21537 100644 --- a/net/goai/goai_shema.go +++ b/net/goai/goai_shema.go @@ -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 { diff --git a/net/goai/goai_z_unit_issue_test.go b/net/goai/goai_z_unit_issue_test.go index 9979bd23e65..f9696d3d3a3 100644 --- a/net/goai/goai_z_unit_issue_test.go +++ b/net/goai/goai_z_unit_issue_test.go @@ -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) + }) +}