Skip to content

Commit adfc736

Browse files
authored
Initial commit
0 parents  commit adfc736

24 files changed

+1347
-0
lines changed

.gitignore

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# If you prefer the allow list template instead of the deny list, see community template:
2+
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
3+
#
4+
# Binaries for programs and plugins
5+
*.exe
6+
*.exe~
7+
*.dll
8+
*.so
9+
*.dylib
10+
11+
# Test binary, built with `go test -c`
12+
*.test
13+
14+
# Output of the go coverage tool, specifically when used with LiteIDE
15+
*.out
16+
17+
# Dependency directories (remove the comment below to include it)
18+
# vendor/
19+
20+
# Go workspace file
21+
go.work*
22+
23+
# idea
24+
.idea
25+
# vscode
26+
.vscode

Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM alpine
2+
3+
LABEL authors="lwnmengjing"
4+
5+
COPY ./application /app/application
6+
7+
ENTRYPOINT ["/app/application"]

Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.PHONY: build
2+
3+
build:
4+
CGO_ENABLED=0 go build -o application main.go
5+
test:
6+
go test -v ./... -cover
7+
deps:
8+
go mod tidy
9+
run:
10+
go run main.go server
11+
migrate:
12+
go run main.go migrate
13+
generate:
14+
go generate ./...

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# service-http
2+
mss-boot http service example

apis/model.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package apis
2+
3+
import (
4+
"errors"
5+
"net/http"
6+
7+
"github.com/gin-gonic/gin"
8+
"github.com/mss-boot-io/mss-boot/pkg/config/gormdb"
9+
"github.com/mss-boot-io/mss-boot/pkg/response"
10+
"github.com/mss-boot-io/mss-boot/pkg/response/actions"
11+
"github.com/mss-boot-io/mss-boot/pkg/response/controller"
12+
"gorm.io/gorm"
13+
14+
"service-http/dto"
15+
"service-http/models"
16+
)
17+
18+
/*
19+
* @Author: lwnmengjing<lwnmengjing@qq.com>
20+
* @Date: 2023/9/18 12:58:01
21+
* @Last Modified by: lwnmengjing<lwnmengjing@qq.com>
22+
* @Last Modified time: 2023/9/18 12:58:01
23+
*/
24+
25+
func init() {
26+
e := &Model{
27+
Simple: controller.NewSimple(
28+
controller.WithAuth(true),
29+
controller.WithModel(new(models.Model)),
30+
controller.WithSearch(new(dto.ModelSearch)),
31+
controller.WithModelProvider(actions.ModelProviderGorm),
32+
),
33+
}
34+
response.AppendController(e)
35+
}
36+
37+
type Model struct {
38+
*controller.Simple
39+
}
40+
41+
func (e *Model) Other(r *gin.RouterGroup) {
42+
r.GET("/model/migrate/:id", e.Migrate)
43+
}
44+
45+
func (e *Model) Migrate(ctx *gin.Context) {
46+
api := response.Make(ctx)
47+
m := &models.Model{}
48+
err := gormdb.DB.Preload("Fields").First(m, "id = ?", ctx.Param("id")).Error
49+
if err != nil {
50+
if errors.Is(err, gorm.ErrRecordNotFound) {
51+
api.Err(http.StatusNotFound)
52+
return
53+
}
54+
}
55+
vm := m.MakeVirtualModel()
56+
if vm == nil {
57+
api.Err(http.StatusNotFound)
58+
return
59+
}
60+
err = vm.Migrate(gormdb.DB)
61+
if err != nil {
62+
api.AddError(err).Log.Error("migrate error")
63+
api.Err(http.StatusInternalServerError)
64+
return
65+
}
66+
api.OK(nil)
67+
}

cmd/cobra.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package cmd
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"os"
7+
8+
"github.com/mss-boot-io/mss-boot/pkg"
9+
"github.com/spf13/cobra"
10+
11+
"service-http/cmd/migrate"
12+
"service-http/cmd/server"
13+
)
14+
15+
/*
16+
* @Author: lwnmengjing<lwnmengjing@qq.com>
17+
* @Date: 2023/10/31 16:37:31
18+
* @Last Modified by: lwnmengjing<lwnmengjing@qq.com>
19+
* @Last Modified time: 2023/10/31 16:37:31
20+
*/
21+
22+
var rootCmd = &cobra.Command{
23+
Use: "service-http",
24+
Short: "service-http",
25+
SilenceUsage: true,
26+
Long: `service-http is a background management system developed by the mss-boot framework`,
27+
Args: func(cmd *cobra.Command, args []string) error {
28+
if len(args) < 1 {
29+
tip()
30+
return errors.New(pkg.Red("requires at least one arg"))
31+
}
32+
return nil
33+
},
34+
PersistentPreRunE: func(*cobra.Command, []string) error { return nil },
35+
Run: func(cmd *cobra.Command, args []string) {
36+
tip()
37+
},
38+
}
39+
40+
func tip() {
41+
usageStr := `欢迎使用 ` + pkg.Green(`service-http 0.0.1`) + ` 可以使用 ` + pkg.Red(`-h`) + ` 查看命令`
42+
usageStr1 := `也可以参考 https://doc.mss-boot-io.top 的相关内容`
43+
fmt.Printf("%s\n", usageStr)
44+
fmt.Printf("%s\n", usageStr1)
45+
}
46+
47+
func init() {
48+
rootCmd.AddCommand(server.StartCmd)
49+
rootCmd.AddCommand(migrate.StartCmd)
50+
}
51+
52+
// Execute : apply commands
53+
func Execute() {
54+
if err := rootCmd.Execute(); err != nil {
55+
os.Exit(-1)
56+
}
57+
}

cmd/migrate/migrate.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package migrate
2+
3+
import (
4+
"log/slog"
5+
"path/filepath"
6+
7+
"github.com/mss-boot-io/mss-boot/pkg/config/gormdb"
8+
"github.com/mss-boot-io/mss-boot/pkg/migration"
9+
"github.com/mss-boot-io/mss-boot/pkg/migration/models"
10+
"github.com/spf13/cobra"
11+
12+
_ "service-http/cmd/migrate/migration/custom"
13+
_ "service-http/cmd/migrate/migration/system"
14+
"service-http/config"
15+
)
16+
17+
/*
18+
* @Author: lwnmengjing<lwnmengjing@qq.com>
19+
* @Date: 2023/10/31 16:37:31
20+
* @Last Modified by: lwnmengjing<lwnmengjing@qq.com>
21+
* @Last Modified time: 2023/10/31 16:37:31
22+
*/
23+
24+
var (
25+
generate bool
26+
username string
27+
password string
28+
system bool
29+
StartCmd = &cobra.Command{
30+
Use: "migrate",
31+
Short: "Initialize the database",
32+
Example: "mss-boot-admin migrate",
33+
RunE: func(cmd *cobra.Command, args []string) error {
34+
return Run()
35+
},
36+
}
37+
)
38+
39+
func init() {
40+
StartCmd.PersistentFlags().BoolVarP(&system, "system", "s",
41+
false, "generate system migration file")
42+
StartCmd.PersistentFlags().BoolVarP(&generate, "generate", "g",
43+
false, "generate migration file")
44+
StartCmd.PersistentFlags().StringVarP(&username, "username", "u",
45+
"admin", "system super administrator login username")
46+
StartCmd.PersistentFlags().StringVarP(&password, "password", "p",
47+
"admin", "system super administrator login password")
48+
}
49+
50+
func Run() error {
51+
if !generate {
52+
slog.Info("start init")
53+
config.Cfg.Init()
54+
return migrate()
55+
}
56+
slog.Info(`generate migration file`)
57+
return migration.GenFile(system, filepath.Join("cmd", "migrate", "migration"))
58+
}
59+
60+
func migrate() error {
61+
db := gormdb.DB
62+
err := db.AutoMigrate(&models.Migration{})
63+
if err != nil {
64+
slog.Error("auto migrate error", slog.Any("err", err))
65+
return err
66+
}
67+
migration.Migrate.SetDb(db)
68+
migration.Migrate.Migrate()
69+
return err
70+
}

cmd/migrate/migration/custom/doc.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package custom
2+
3+
/*
4+
* @Author: lwnmengjing<lwnmengjing@qq.com>
5+
* @Date: 2023/10/31 16:37:31
6+
* @Last Modified by: lwnmengjing<lwnmengjing@qq.com>
7+
* @Last Modified time: 2023/10/31 16:37:31
8+
*/
9+
10+
// fixme: developer's custom migration script
11+
func init() {
12+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package system
2+
3+
import (
4+
"runtime"
5+
6+
"github.com/mss-boot-io/mss-boot/pkg/migration"
7+
migrationModel "github.com/mss-boot-io/mss-boot/pkg/migration/models"
8+
"gorm.io/gorm"
9+
10+
"service-http/models"
11+
)
12+
13+
func init() {
14+
_, fileName, _, _ := runtime.Caller(0)
15+
migration.Migrate.SetVersion(migration.GetFilename(fileName), _1691804837583Tables)
16+
}
17+
18+
func _1691804837583Tables(db *gorm.DB, version string) error {
19+
return db.Transaction(func(tx *gorm.DB) error {
20+
21+
err := tx.Migrator().AutoMigrate(
22+
new(models.Model),
23+
new(models.Field),
24+
)
25+
if err != nil {
26+
return err
27+
}
28+
29+
return tx.Create(&migrationModel.Migration{
30+
Version: version,
31+
}).Error
32+
})
33+
}

cmd/migrate/migration/system/doc.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package system
2+
3+
/*
4+
* @Author: lwnmengjing<lwnmengjing@qq.com>
5+
* @Date: 2023/10/31 16:37:31
6+
* @Last Modified by: lwnmengjing<lwnmengjing@qq.com>
7+
* @Last Modified time: 2023/10/31 16:37:31
8+
*/
9+
10+
// fixme: developer's custom migration script
11+
func init() {
12+
}

cmd/server/server.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package server
2+
3+
import (
4+
"context"
5+
6+
"github.com/gin-gonic/gin"
7+
"github.com/mss-boot-io/mss-boot/core/server"
8+
"github.com/mss-boot-io/mss-boot/core/server/listener"
9+
"github.com/mss-boot-io/mss-boot/virtual/action"
10+
"github.com/spf13/cobra"
11+
"service-http/config"
12+
"service-http/models"
13+
14+
"service-http/router"
15+
)
16+
17+
/*
18+
* @Author: lwnmengjing<lwnmengjing@qq.com>
19+
* @Date: 2023/10/31 16:37:31
20+
* @Last Modified by: lwnmengjing<lwnmengjing@qq.com>
21+
* @Last Modified time: 2023/10/31 16:37:31
22+
*/
23+
24+
var (
25+
StartCmd = &cobra.Command{
26+
Use: "server",
27+
Short: "start server",
28+
Long: "start service-http server",
29+
Example: "service-http server",
30+
PreRunE: func(cmd *cobra.Command, args []string) error {
31+
return setup()
32+
},
33+
RunE: func(cmd *cobra.Command, args []string) error {
34+
return run()
35+
},
36+
}
37+
)
38+
39+
func setup() error {
40+
// setup config
41+
config.Cfg.Init()
42+
43+
r := gin.Default()
44+
router.Init(r.Group("/"))
45+
46+
runnable := []server.Runnable{
47+
config.Cfg.Server.Init(
48+
listener.WithName("service-http"),
49+
listener.WithHandler(r)),
50+
}
51+
52+
// init virtual models
53+
ms, err := models.GetModels()
54+
if err != nil {
55+
return err
56+
}
57+
for i := range ms {
58+
action.SetModel(ms[i].Path, ms[i].MakeVirtualModel())
59+
}
60+
server.Manage.Add(runnable...)
61+
62+
return nil
63+
}
64+
65+
func run() error {
66+
ctx := context.Background()
67+
68+
return server.Manage.Start(ctx)
69+
}

0 commit comments

Comments
 (0)