Validate parameter types in method signature
This commit is contained in:
parent
26feb0e0e3
commit
f799a284b1
7 changed files with 587 additions and 488 deletions
internal/mongo
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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},
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue