1
0
Fork 0
forked from goffee/goffee
goffee/cmd/helper_.go
2024-09-15 10:06:16 -05:00

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
}