-
Notifications
You must be signed in to change notification settings - Fork 2
/
app_config.go
116 lines (104 loc) · 2.62 KB
/
app_config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package models
import (
"fmt"
"strings"
"github.com/gin-gonic/gin"
"github.com/mss-boot-io/mss-boot-admin/center"
)
/*
* @Author: lwnmengjing<lwnmengjing@qq.com>
* @Date: 2024/1/11 11:58:29
* @Last Modified by: lwnmengjing<lwnmengjing@qq.com>
* @Last Modified time: 2024/1/11 11:58:29
*/
type AppConfig struct {
ModelGormTenant
// Name 名称
Name string `gorm:"column:name;size:128;index;default:'';not null" json:"name" binding:"required"`
// Group 分组
Group string `gorm:"column:group;size:128;index;default:'';not null" json:"group" binding:"required"`
// Value 值
Value string `gorm:"column:value;size:255;default:'';not null" json:"value"`
// Auth 是否需要认证 如果为true,只有登录后才会返回
Auth bool `gorm:"column:auth;default:false;not null" json:"auth"`
}
func (*AppConfig) TableName() string {
return "mss_boot_app_configs"
}
func (e *AppConfig) SetAppConfig(ctx *gin.Context, key string, auth bool, value string) error {
if key == "" {
return nil
}
var group string
keys := strings.Split(key, ".")
if len(keys) > 1 {
group = keys[0]
key = strings.Join(keys[1:], ".")
}
c := &AppConfig{
Group: group,
Name: key,
}
t, err := center.GetTenant().GetTenant(ctx)
if err != nil {
return err
}
//set cache
err = center.GetCache().Set(ctx, fmt.Sprintf("%s.%s", t.GetID(), key), value, -1)
if err != nil {
return err
}
err = center.GetDB(ctx, e).
Where("`group` = ?", group).
Where("name = ?", key).
FirstOrCreate(c).Error
if err != nil {
return err
}
c.Auth = auth
c.Value = value
return center.GetTenant().GetDB(ctx, e).
Model(e).Where("name = ?", key).
Where("`group` = ?", group).
Select("auth", "value").
Updates(*c).Error
}
func getAppConfig(ctx *gin.Context, key string) (*AppConfig, error) {
c := &AppConfig{}
if key == "" {
return nil, fmt.Errorf("key is empty")
}
var group string
keys := strings.Split(key, ".")
if len(keys) > 1 {
group = keys[0]
key = strings.Join(keys[1:], ".")
}
t, err := center.GetTenant().GetTenant(ctx)
if err != nil {
return nil, err
}
v, _ := center.GetCache().Get(ctx, fmt.Sprintf("%s.%s", t.GetID(), key))
if v != "" {
c.Group = group
c.Name = key
c.Value = v
return c, nil
}
err = center.GetTenant().GetDB(ctx, c).
Where("name = ?", key).
Where("`group` = ?", group).
First(c).Error
if err != nil {
return nil, err
}
_ = center.GetCache().Set(ctx, fmt.Sprintf("%s.%s", t.GetID(), key), c.Value, -1)
return c, nil
}
func (e *AppConfig) GetAppConfig(ctx *gin.Context, key string) (string, bool) {
c, err := getAppConfig(ctx, key)
if err != nil {
return "", false
}
return c.Value, true
}