| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- package gendao
- import (
- "context"
- "fmt"
- "strings"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gfile"
- "github.com/gogf/gf/v2/text/gregex"
- "github.com/gogf/gf/v2/text/gstr"
- "github.com/gogf/gf/cmd/gf/v2/internal/consts"
- "github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog"
- "github.com/gogf/gf/cmd/gf/v2/internal/utility/utils"
- )
- func generateDo(ctx context.Context, in CGenDaoInternalInput) {
- var dirPathDo = gfile.Join(in.Path, in.DoPath)
- if in.Clear {
- doClear(ctx, dirPathDo, false)
- }
- in.NoJsonTag = true
- in.DescriptionTag = false
- in.NoModelComment = false
- // Model content.
- for i, tableName := range in.TableNames {
- fieldMap, err := in.DB.TableFields(ctx, tableName)
- if err != nil {
- mlog.Fatalf("fetching tables fields failed for table '%s':\n%v", tableName, err)
- }
- var (
- newTableName = in.NewTableNames[i]
- doFilePath = gfile.Join(dirPathDo, gstr.CaseSnake(newTableName)+".go")
- structDefinition, _ = generateStructDefinition(ctx, generateStructDefinitionInput{
- CGenDaoInternalInput: in,
- TableName: tableName,
- StructName: gstr.CaseCamel(newTableName),
- FieldMap: fieldMap,
- IsDo: true,
- })
- )
- // replace all types to interface{}.
- structDefinition, _ = gregex.ReplaceStringFuncMatch(
- "([A-Z]\\w*?)\\s+([\\w\\*\\.]+?)\\s+(//)",
- structDefinition,
- func(match []string) string {
- // If the type is already a pointer/slice/map, it does nothing.
- if !gstr.HasPrefix(match[2], "*") && !gstr.HasPrefix(match[2], "[]") && !gstr.HasPrefix(match[2], "map") {
- return fmt.Sprintf(`%s interface{} %s`, match[1], match[3])
- }
- return match[0]
- },
- )
- modelContent := generateDoContent(
- ctx,
- in,
- tableName,
- gstr.CaseCamel(newTableName),
- structDefinition,
- )
- err = gfile.PutContents(doFilePath, strings.TrimSpace(modelContent))
- if err != nil {
- mlog.Fatalf(`writing content to "%s" failed: %v`, doFilePath, err)
- } else {
- utils.GoFmt(doFilePath)
- mlog.Print("generated:", doFilePath)
- }
- }
- }
- func generateDoContent(
- ctx context.Context, in CGenDaoInternalInput, tableName, tableNameCamelCase, structDefine string,
- ) string {
- doContent := gstr.ReplaceByMap(
- getTemplateFromPathOrDefault(in.TplDaoDoPath, consts.TemplateGenDaoDoContent),
- g.MapStrStr{
- tplVarTableName: tableName,
- tplVarPackageImports: getImportPartContent(ctx, structDefine, true, nil),
- tplVarTableNameCamelCase: tableNameCamelCase,
- tplVarStructDefine: structDefine,
- },
- )
- doContent = replaceDefaultVar(in, doContent)
- return doContent
- }
|