forked from goffee/goffee
184 lines
3.7 KiB
Go
184 lines
3.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"syscall"
|
|
"unicode"
|
|
)
|
|
|
|
func getEventNameStatement(constName string, eventName string) string {
|
|
t := `const {constName} = "{eventName}"`
|
|
r := strings.Replace(t, "{constName}", constName, 1)
|
|
r = strings.Replace(r, "{eventName}", eventName, 1)
|
|
return r
|
|
}
|
|
|
|
func prepareEventNameConst(eventName string) string {
|
|
var res string
|
|
words := strings.Split(eventName, "-")
|
|
for k, v := range words {
|
|
if k == 0 {
|
|
res = strings.ToUpper(v) + "_"
|
|
} else if k < (len(words) - 1) {
|
|
res = res + strings.ToUpper(v) + "_"
|
|
} else {
|
|
res = res + strings.ToUpper(v)
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func camelCaseToSnake(name string, sep string) string {
|
|
var res string
|
|
namesB := []byte(name)
|
|
for i, v := range namesB {
|
|
if i == 0 {
|
|
res = res + strings.ToLower(string(v))
|
|
} else {
|
|
if !unicode.IsUpper(rune(v)) {
|
|
res = res + string(v)
|
|
} else {
|
|
res = res + sep
|
|
res = res + strings.ToLower(string(v))
|
|
}
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func prepareJobContent(jobName string) string {
|
|
t := `package eventjobs
|
|
|
|
import (
|
|
"git.smarteching.com/goffee/core"
|
|
)
|
|
|
|
var {JobName} core.EventJob = func(event *core.Event, c *core.Context) {
|
|
// logic implementation goes here...
|
|
}
|
|
`
|
|
res := strings.Replace(t, "{JobName}", jobName, 1)
|
|
return res
|
|
}
|
|
|
|
func prepareModelContent(modelName string, tableName string) string {
|
|
t := `package models
|
|
|
|
import "gorm.io/gorm"
|
|
|
|
type {modelName} struct {
|
|
gorm.Model
|
|
// add your field here...
|
|
}
|
|
|
|
// Override the table name
|
|
func ({modelName}) TableName() string {
|
|
return "{tableName}"
|
|
}
|
|
`
|
|
res := strings.Replace(t, "{modelName}", modelName, 2)
|
|
res = strings.Replace(res, "{tableName}", tableName, 1)
|
|
return res
|
|
}
|
|
|
|
func prepareHandlerContent(HandlerName string) string {
|
|
t := `
|
|
func {HandlerName}(c *core.Context) *core.Response {
|
|
// logic implementation goes here...
|
|
|
|
return nil
|
|
}
|
|
`
|
|
res := strings.Replace(t, "{HandlerName}", HandlerName, 1)
|
|
return res
|
|
}
|
|
|
|
func createHandlerFile(handlersFilePath string) (*os.File, error) {
|
|
file, err := os.Create(handlersFilePath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, err = file.WriteString(`package handlers
|
|
|
|
import (
|
|
"git.smarteching.com/goffee/core"
|
|
)
|
|
`)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return file, nil
|
|
}
|
|
|
|
func prepareMiddlewareContent(middlewareName string) string {
|
|
t := `package middlewares
|
|
|
|
import (
|
|
"git.smarteching.com/goffee/core"
|
|
)
|
|
|
|
var {middlewareName} core.Middleware = func (c *core.Context) {
|
|
c.Next()
|
|
}
|
|
`
|
|
res := strings.Replace(t, "{middlewareName}", middlewareName, 1)
|
|
return res
|
|
}
|
|
|
|
func singleToPlural(word string) string {
|
|
lastOne := word[len(word)-1:]
|
|
lastTwo := word[len(word)-2:]
|
|
if lastOne == "s" || lastOne == "x" || lastOne == "z" || lastTwo == "sh" || lastTwo == "ch" {
|
|
return word + "es"
|
|
}
|
|
|
|
return word + "s"
|
|
}
|
|
|
|
func CopyFile(sourceFilePath string, destFolderPath string, newFileName string) error {
|
|
o := syscall.Umask(0)
|
|
defer syscall.Umask(o)
|
|
// newFileName := filepath.Base(sourceFilePath)
|
|
os.MkdirAll(destFolderPath, 766)
|
|
srcFileInfo, err := os.Stat(sourceFilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !srcFileInfo.Mode().IsRegular() {
|
|
return errors.New("can not move file, not in a regular mode")
|
|
}
|
|
srcFile, err := os.Open(sourceFilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer srcFile.Close()
|
|
destFilePath := filepath.Join(destFolderPath, newFileName)
|
|
destFile, err := os.Create(destFilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
buff := make([]byte, 1024*8)
|
|
for {
|
|
n, err := srcFile.Read(buff)
|
|
if err != nil && err != io.EOF {
|
|
panic(fmt.Sprintf("error moving file %v", sourceFilePath))
|
|
}
|
|
if n == 0 {
|
|
break
|
|
}
|
|
_, err = destFile.Write(buff[:n])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
destFile.Close()
|
|
|
|
return nil
|
|
}
|