Validate parameter types in method signature

This commit is contained in:
sunboyy 2021-01-21 18:56:30 +07:00
parent 26feb0e0e3
commit f799a284b1
7 changed files with 587 additions and 488 deletions

View file

@ -13,15 +13,20 @@ import (
// GenerateMongoRepository generates mongodb repository
func GenerateMongoRepository(packageName string, structModel code.Struct, intf code.Interface) (string, error) {
repositorySpec, err := spec.ParseRepositoryInterface(structModel, intf)
if err != nil {
return "", err
var methodSpecs []spec.MethodSpec
for _, method := range intf.Methods {
methodSpec, err := spec.ParseInterfaceMethod(structModel, method)
if err != nil {
return "", err
}
methodSpecs = append(methodSpecs, methodSpec)
}
generator := mongoRepositoryGenerator{
PackageName: packageName,
StructModel: structModel,
RepositorySpec: repositorySpec,
PackageName: packageName,
StructModel: structModel,
InterfaceName: intf.Name,
MethodSpecs: methodSpecs,
}
output, err := generator.Generate()
@ -33,9 +38,10 @@ func GenerateMongoRepository(packageName string, structModel code.Struct, intf c
}
type mongoRepositoryGenerator struct {
PackageName string
StructModel code.Struct
RepositorySpec spec.RepositorySpec
PackageName string
StructModel code.Struct
InterfaceName string
MethodSpecs []spec.MethodSpec
}
func (g mongoRepositoryGenerator) Generate() (string, error) {
@ -44,7 +50,7 @@ func (g mongoRepositoryGenerator) Generate() (string, error) {
return "", err
}
for _, method := range g.RepositorySpec.Methods {
for _, method := range g.MethodSpecs {
if err := g.generateMethod(buffer, method); err != nil {
return "", err
}
@ -66,7 +72,7 @@ func (g mongoRepositoryGenerator) generateBaseContent(buffer *bytes.Buffer) erro
tmplData := mongoBaseTemplateData{
PackageName: g.PackageName,
InterfaceName: g.RepositorySpec.InterfaceName,
InterfaceName: g.InterfaceName,
StructName: g.structName(),
}
@ -167,5 +173,5 @@ func (g mongoRepositoryGenerator) generateFindImplementation(operation spec.Find
}
func (g mongoRepositoryGenerator) structName() string {
return g.RepositorySpec.InterfaceName + "Mongo"
return g.InterfaceName + "Mongo"
}

View file

@ -83,7 +83,7 @@ func TestGenerateMongoRepository(t *testing.T) {
Name: "FindByGenderNot",
Params: []code.Param{
{Name: "ctx", Type: code.ExternalType{PackageAlias: "context", Name: "Context"}},
{Name: "gender", Type: code.SimpleType("int")},
{Name: "gender", Type: code.SimpleType("Gender")},
},
Returns: []code.Type{
code.ArrayType{ContainedType: code.PointerType{ContainedType: code.SimpleType("UserModel")}},
@ -220,7 +220,7 @@ func (r *UserRepositoryMongo) FindByIDAndUsername(ctx context.Context, arg0 prim
return &entity, nil
}
func (r *UserRepositoryMongo) FindByGenderNot(ctx context.Context, arg0 int) ([]*UserModel, error) {
func (r *UserRepositoryMongo) FindByGenderNot(ctx context.Context, arg0 Gender) ([]*UserModel, error) {
cursor, err := r.collection.Find(ctx, bson.M{
"gender": bson.M{"$ne": arg0},
})