Skip to content

Commit 9567564

Browse files
committed
Merge branch 'gva_gormv2_dev' of https://github.com/flipped-aurora/gin-vue-admin into gva_gormv2_dev
2 parents 8bd245b + e458e58 commit 9567564

File tree

38 files changed

+618
-499
lines changed

38 files changed

+618
-499
lines changed

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212

1313
[English](./README-en.md) | 简体中文
1414

15-
[gitee地址](https://gitee.com/pixelmax/gin-vue-admin)|
16-
[github地址](https://github.com/flipped-aurora/gin-vue-admin)
15+
[gitee地址:https://gitee.com/pixelmax/gin-vue-admin](https://gitee.com/pixelmax/gin-vue-admin)
16+
17+
[github地址:https://github.com/flipped-aurora/gin-vue-admin](https://github.com/flipped-aurora/gin-vue-admin)
18+
19+
[vue3版本分支地址:https://github.com/flipped-aurora/gin-vue-admin/tree/vue3Develop](https://github.com/flipped-aurora/gin-vue-admin/tree/vue3Develop)
1720

1821
# 项目文档
1922
[在线文档](https://www.gin-vue-admin.com/) : https://www.gin-vue-admin.com/
@@ -72,7 +75,7 @@ Gin-vue-admin 的成长离不开大家的支持,如果你愿意为 gin-vue-adm
7275
- node版本 > v8.6.0
7376
- golang版本 >= v1.14
7477
- IDE推荐:Goland
75-
- gormv2版本初始化数据库可以利用批量创建功能,这里已经写好初始化代码,需要在main.go内打开 initialize.Data() 的注释即可
78+
- 初始化项目: 不同版本数据库初始化不通 参见https://www.gin-vue-admin.com/docs/server#1-%E5%88%9D%E5%A7%8B%E5%8C%96server%E9%A1%B9%E7%9B%AE
7679
- 替换掉项目中的七牛云公钥,私钥,仓名和默认url地址,以免发生测试文件数据错乱
7780
```
7881

@@ -160,6 +163,8 @@ npm run serve
160163

161164
### 2.2 server端
162165

166+
使用 goland等编辑工具,打开server目录,不可以打开 gin-vue-admin跟目录
167+
163168
```bash
164169
# 使用 go.mod
165170

server/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
.PHONY: all build run gotool clean help
22

3-
BINARY="server"
3+
BINARY="gin-vue-admin"
44
GVA = "gva"
55

66
all: check gva initdb run
77

88
gva:
9+
go env -w GO111MODULE=on
10+
go env -w GOPROXY=https://goproxy.io,direct
911
go build -o ${GVA} cmd/main.go
1012

1113
initdb:

server/api/v1/sys_user.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ func tokenNext(c *gin.Context, user model.SysUser) {
5050
NickName: user.NickName,
5151
Username: user.Username,
5252
AuthorityId: user.AuthorityId,
53-
BufferTime: 60 * 60 * 24, // 缓冲时间1天 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
53+
BufferTime: global.GVA_CONFIG.JWT.BufferTime, // 缓冲时间1天 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
5454
StandardClaims: jwt.StandardClaims{
55-
NotBefore: time.Now().Unix() - 1000, // 签名生效时间
56-
ExpiresAt: time.Now().Unix() + 60*60*24*7, // 过期时间 7天
57-
Issuer: "qmPlus", // 签名的发行者
55+
NotBefore: time.Now().Unix() - 1000, // 签名生效时间
56+
ExpiresAt: time.Now().Unix() + global.GVA_CONFIG.JWT.ExpiresTime, // 过期时间 7天 配置文件
57+
Issuer: "qmPlus", // 签名的发行者
5858
},
5959
}
6060
token, err := j.CreateToken(claims)

server/config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
# jwt configuration
44
jwt:
55
signing-key: 'qmPlus'
6+
expires-time: 604800
7+
buffer-time: 86400
68

79
# zap logger configuration
810
zap:

server/config/jwt.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package config
22

33
type JWT struct {
4-
SigningKey string `mapstructure:"signing-key" json:"signingKey" yaml:"signing-key"`
4+
SigningKey string `mapstructure:"signing-key" json:"signingKey" yaml:"signing-key"`
5+
ExpiresTime int64 `mapstructure:"expires-time" json:"expiresTime" yaml:"expires-time"`
6+
BufferTime int64 `mapstructure:"buffer-time" json:"bufferTime" yaml:"buffer-time"`
57
}

server/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ require (
5454
gopkg.in/ini.v1 v1.55.0 // indirect
5555
gopkg.in/yaml.v2 v2.3.0 // indirect
5656
gorm.io/driver/mysql v0.3.0
57-
gorm.io/gorm v1.20.5
57+
gorm.io/gorm v1.20.9
5858
)
5959

60-
replace github.com/casbin/gorm-adapter/v3 => github.com/casbin/gorm-adapter/v3 v3.0.2
60+
replace github.com/casbin/gorm-adapter/v3 => github.com/casbin/gorm-adapter/v3 v3.0.2

server/initialize/gorm.go

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package initialize
22

33
import (
44
"gin-vue-admin/global"
5+
"gin-vue-admin/initialize/internal"
56
"gin-vue-admin/model"
67
"go.uber.org/zap"
78
"gorm.io/driver/mysql"
@@ -97,38 +98,24 @@ func GormMysql() *gorm.DB {
9798
//@return: *gorm.Config
9899

99100
func gormConfig(mod bool) *gorm.Config {
101+
var config = &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true}
100102
switch global.GVA_CONFIG.Mysql.LogZap {
101-
case "Silent":
102-
return &gorm.Config{
103-
Logger: Default.LogMode(logger.Silent),
104-
DisableForeignKeyConstraintWhenMigrating: true,
105-
}
106-
case "Error":
107-
return &gorm.Config{
108-
Logger: Default.LogMode(logger.Error),
109-
DisableForeignKeyConstraintWhenMigrating: true,
110-
}
111-
case "Warn":
112-
return &gorm.Config{
113-
Logger: Default.LogMode(logger.Warn),
114-
DisableForeignKeyConstraintWhenMigrating: true,
115-
}
116-
case "Info":
117-
return &gorm.Config{
118-
Logger: Default.LogMode(logger.Info),
119-
DisableForeignKeyConstraintWhenMigrating: true,
120-
}
103+
case "silent", "Silent":
104+
config.Logger = internal.Default.LogMode(logger.Silent)
105+
case "error", "Error":
106+
config.Logger = internal.Default.LogMode(logger.Error)
107+
case "warn", "Warn":
108+
config.Logger = internal.Default.LogMode(logger.Warn)
109+
case "info", "Info":
110+
config.Logger = internal.Default.LogMode(logger.Info)
111+
case "zap", "Zap":
112+
config.Logger = internal.Default.LogMode(logger.Info)
121113
default:
122114
if mod {
123-
return &gorm.Config{
124-
Logger: logger.Default.LogMode(logger.Info),
125-
DisableForeignKeyConstraintWhenMigrating: true,
126-
}
127-
} else {
128-
return &gorm.Config{
129-
Logger: logger.Default.LogMode(logger.Silent),
130-
DisableForeignKeyConstraintWhenMigrating: true,
131-
}
115+
config.Logger = internal.Default.LogMode(logger.Info)
116+
break
132117
}
118+
config.Logger = internal.Default.LogMode(logger.Silent)
133119
}
120+
return config
134121
}
Lines changed: 76 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package initialize
1+
package internal
22

33
import (
44
"context"
@@ -13,25 +13,28 @@ import (
1313
"time"
1414
)
1515

16+
// writer log writer interface
17+
type writer interface {
18+
Printf(string, ...interface{})
19+
}
20+
21+
type config struct {
22+
SlowThreshold time.Duration
23+
Colorful bool
24+
LogLevel logger.LogLevel
25+
}
26+
1627
var (
17-
Discard = New(log.New(ioutil.Discard, "", log.LstdFlags), log.New(ioutil.Discard, "", log.LstdFlags), GormConfig{})
18-
Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), log.New(os.Stdout, "\r\n", log.LstdFlags), GormConfig{
28+
Discard = New(log.New(ioutil.Discard, "", log.LstdFlags), config{})
29+
Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), config{
1930
SlowThreshold: 200 * time.Millisecond,
2031
LogLevel: logger.Warn,
2132
Colorful: true,
2233
})
2334
Recorder = traceRecorder{Interface: Default, BeginAt: time.Now()}
2435
)
2536

26-
type traceRecorder struct {
27-
logger.Interface
28-
BeginAt time.Time
29-
SQL string
30-
RowsAffected int64
31-
Err error
32-
}
33-
34-
func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Interface {
37+
func New(writer writer, config config) logger.Interface {
3538
var (
3639
infoStr = "%s\n[info] "
3740
warnStr = "%s\n[warn] "
@@ -50,10 +53,9 @@ func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Inte
5053
traceErrStr = logger.RedBold + "%s " + logger.MagentaBold + "%s\n" + logger.Reset + logger.Yellow + "[%.3fms] " + logger.BlueBold + "[rows:%v]" + logger.Reset + " %s"
5154
}
5255

53-
return &GormLogger{
54-
Writer: writer,
55-
gormWriter: gormWriter,
56-
GormConfig: config,
56+
return &customLogger{
57+
writer: writer,
58+
config: config,
5759
infoStr: infoStr,
5860
warnStr: warnStr,
5961
errStr: errStr,
@@ -63,81 +65,74 @@ func New(writer Writer, gormWriter logger.Writer, config GormConfig) logger.Inte
6365
}
6466
}
6567

66-
// Writer log writer interface
67-
type Writer interface {
68-
Printf(string, ...interface{})
69-
}
70-
71-
type GormConfig struct {
72-
SlowThreshold time.Duration
73-
Colorful bool
74-
LogLevel logger.LogLevel
75-
}
76-
77-
type GormLogger struct {
78-
Writer
79-
gormWriter logger.Writer
80-
GormConfig
68+
type customLogger struct {
69+
writer
70+
config
8171
infoStr, warnStr, errStr string
8272
traceStr, traceErrStr, traceWarnStr string
8373
}
8474

85-
func (g *GormLogger) LogMode(level logger.LogLevel) logger.Interface {
86-
newLogger := *g
75+
// LogMode log mode
76+
func (c *customLogger) LogMode(level logger.LogLevel) logger.Interface {
77+
newLogger := *c
8778
newLogger.LogLevel = level
8879
return &newLogger
8980
}
9081

91-
func (g *GormLogger) Info(ctx context.Context, message string, data ...interface{}) {
92-
if g.LogLevel >= logger.Info {
93-
g.Printf(g.infoStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
82+
// Info print info
83+
func (c *customLogger) Info(ctx context.Context, message string, data ...interface{}) {
84+
if c.LogLevel >= logger.Info {
85+
c.Printf(c.infoStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
9486
}
9587
}
9688

97-
func (g *GormLogger) Warn(ctx context.Context, message string, data ...interface{}) {
98-
if g.LogLevel >= logger.Warn {
99-
g.Printf(g.warnStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
89+
// Warn print warn messages
90+
func (c *customLogger) Warn(ctx context.Context, message string, data ...interface{}) {
91+
if c.LogLevel >= logger.Warn {
92+
c.Printf(c.warnStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
10093
}
10194
}
10295

103-
func (g *GormLogger) Error(ctx context.Context, message string, data ...interface{}) {
104-
if g.LogLevel >= logger.Error {
105-
g.Printf(g.errStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
96+
// Error print error messages
97+
func (c *customLogger) Error(ctx context.Context, message string, data ...interface{}) {
98+
if c.LogLevel >= logger.Error {
99+
c.Printf(c.errStr+message, append([]interface{}{utils.FileWithLineNum()}, data...)...)
106100
}
107101
}
108102

109-
func (g *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
110-
if g.LogLevel > 0 {
103+
// Trace print sql message
104+
func (c *customLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
105+
if c.LogLevel > 0 {
111106
elapsed := time.Since(begin)
112107
switch {
113-
case err != nil && g.LogLevel >= logger.Error:
108+
case err != nil && c.LogLevel >= logger.Error:
114109
sql, rows := fc()
115110
if rows == -1 {
116-
g.Printf(g.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, "-", sql)
111+
c.Printf(c.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, "-", sql)
117112
} else {
118-
g.Printf(g.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql)
113+
c.Printf(c.traceErrStr, utils.FileWithLineNum(), err, float64(elapsed.Nanoseconds())/1e6, rows, sql)
119114
}
120-
case elapsed > g.SlowThreshold && g.SlowThreshold != 0 && g.LogLevel >= logger.Warn:
115+
case elapsed > c.SlowThreshold && c.SlowThreshold != 0 && c.LogLevel >= logger.Warn:
121116
sql, rows := fc()
122-
slowLog := fmt.Sprintf("SLOW SQL >= %v", g.SlowThreshold)
117+
slowLog := fmt.Sprintf("SLOW SQL >= %v", c.SlowThreshold)
123118
if rows == -1 {
124-
g.Printf(g.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, "-", sql)
119+
c.Printf(c.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, "-", sql)
125120
} else {
126-
g.Printf(g.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, rows, sql)
121+
c.Printf(c.traceWarnStr, utils.FileWithLineNum(), slowLog, float64(elapsed.Nanoseconds())/1e6, rows, sql)
127122
}
128-
case g.LogLevel >= logger.Info:
123+
case c.LogLevel >= logger.Info:
129124
sql, rows := fc()
130125
if rows == -1 {
131-
g.Printf(g.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, "-", sql)
126+
c.Printf(c.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, "-", sql)
132127
} else {
133-
g.Printf(g.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql)
128+
c.Printf(c.traceStr, utils.FileWithLineNum(), float64(elapsed.Nanoseconds())/1e6, rows, sql)
134129
}
135130
}
136131
}
137132
}
138133

139-
func (g *GormLogger) Printf(message string, data ...interface{}) {
140-
if global.GVA_CONFIG.Mysql.LogZap == "Info" && !global.GVA_CONFIG.Mysql.LogMode {
134+
func (c *customLogger) Printf(message string, data ...interface{}) {
135+
if global.GVA_CONFIG.Mysql.LogZap != "" {
141136
switch len(data) {
142137
case 0:
143138
global.GVA_LOG.Info(message)
@@ -154,14 +149,34 @@ func (g *GormLogger) Printf(message string, data ...interface{}) {
154149
}
155150
switch len(data) {
156151
case 0:
157-
g.gormWriter.Printf(message, "")
152+
c.writer.Printf(message, "")
158153
case 1:
159-
g.gormWriter.Printf(message, data[0].(string))
154+
c.writer.Printf(message, data[0])
160155
case 2:
161-
g.gormWriter.Printf(message, data[0].(string), data[1].(float64))
156+
c.writer.Printf(message, data[0], data[1])
162157
case 3:
163-
g.gormWriter.Printf(message, data[0].(string), data[1].(float64), data[2].(string))
158+
c.writer.Printf(message, data[0], data[1], data[2])
164159
case 4:
165-
g.gormWriter.Printf(message, data[0].(string), data[1].(float64), data[2].(string), data[3].(string))
160+
c.writer.Printf(message, data[0], data[1], data[2], data[3])
161+
case 5:
162+
c.writer.Printf(message, data[0], data[1], data[2], data[3], data[4])
166163
}
167164
}
165+
166+
type traceRecorder struct {
167+
logger.Interface
168+
BeginAt time.Time
169+
SQL string
170+
RowsAffected int64
171+
Err error
172+
}
173+
174+
func (t traceRecorder) New() *traceRecorder {
175+
return &traceRecorder{Interface: t.Interface, BeginAt: time.Now()}
176+
}
177+
178+
func (t *traceRecorder) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
179+
t.BeginAt = begin
180+
t.SQL, t.RowsAffected = fc()
181+
t.Err = err
182+
}

server/middleware/jwt.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func JWTAuth() gin.HandlerFunc {
4747
c.Abort()
4848
}
4949
if claims.ExpiresAt-time.Now().Unix() < claims.BufferTime {
50-
claims.ExpiresAt = time.Now().Unix() + 60*60*24*7
50+
claims.ExpiresAt = time.Now().Unix() + global.GVA_CONFIG.JWT.ExpiresTime
5151
newToken, _ := j.CreateToken(*claims)
5252
newClaims, _ := j.ParseToken(newToken)
5353
c.Header("new-token", newToken)

server/model/request/common.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ type GetAuthorityId struct {
2020
AuthorityId string
2121
}
2222

23-
type Empty struct {}
23+
type Empty struct{}

0 commit comments

Comments
 (0)