feat: add gormv2 and support sqlite
This commit is contained in:
+1
-1
@@ -32,4 +32,4 @@ go.work
|
|||||||
/runtime
|
/runtime
|
||||||
.idea/
|
.idea/
|
||||||
.release_version
|
.release_version
|
||||||
|
conf/database.db
|
||||||
|
|||||||
@@ -18,3 +18,4 @@
|
|||||||
18. 支持docker部署,从环境变量启动
|
18. 支持docker部署,从环境变量启动
|
||||||
19. 支持微信测试公众号模板消息发送
|
19. 支持微信测试公众号模板消息发送
|
||||||
20. 支持设置自定义的定时消息推送
|
20. 支持设置自定义的定时消息推送
|
||||||
|
21. 支持sqlite部署,支持不同版本mysql
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ Message Nest 是一个灵活而强大的消息推送整合平台,旨在简化
|
|||||||
|
|
||||||
关于日志,考虑到目前多数服务以收集控制台输出为主,暂时不支持写出日志文件。
|
关于日志,考虑到目前多数服务以收集控制台输出为主,暂时不支持写出日志文件。
|
||||||
|
|
||||||
|
2024.04.29
|
||||||
|
|
||||||
|
- [x] 支持sqlite部署,支持不同版本mysql
|
||||||
|
|
||||||
2024.04.11
|
2024.04.11
|
||||||
|
|
||||||
- [x] 支持自定义的定时消息发送
|
- [x] 支持自定义的定时消息发送
|
||||||
@@ -102,6 +106,7 @@ WriteTimeout = 60
|
|||||||
; 关闭SQL打印
|
; 关闭SQL打印
|
||||||
; SqlDebug = enable
|
; SqlDebug = enable
|
||||||
|
|
||||||
|
; Type = sqlite
|
||||||
Type = mysql
|
Type = mysql
|
||||||
User = root
|
User = root
|
||||||
Password = Aa123456
|
Password = Aa123456
|
||||||
@@ -176,9 +181,6 @@ TablePrefix = message_
|
|||||||
JwtSecret = message-nest
|
JwtSecret = message-nest
|
||||||
LogLevel = INFO
|
LogLevel = INFO
|
||||||
|
|
||||||
; 第一次运行务必打开,初始化数据
|
|
||||||
InitData = enable
|
|
||||||
|
|
||||||
[server]
|
[server]
|
||||||
; RunMode务必设置成debug,会自动添加跨域
|
; RunMode务必设置成debug,会自动添加跨域
|
||||||
RunMode = debug
|
RunMode = debug
|
||||||
@@ -192,6 +194,7 @@ EmbedHtml = disable
|
|||||||
; 开启SQL打印
|
; 开启SQL打印
|
||||||
SqlDebug = enable
|
SqlDebug = enable
|
||||||
|
|
||||||
|
; Type = sqlite
|
||||||
Type = mysql
|
Type = mysql
|
||||||
User = root
|
User = root
|
||||||
Password = Aa123456
|
Password = Aa123456
|
||||||
@@ -237,9 +240,6 @@ npm run dev
|
|||||||
JwtSecret = message-nest
|
JwtSecret = message-nest
|
||||||
LogLevel = INFO
|
LogLevel = INFO
|
||||||
|
|
||||||
; 第一次运行务必打开,初始化数据
|
|
||||||
InitData = enable
|
|
||||||
|
|
||||||
[server]
|
[server]
|
||||||
RunMode = release
|
RunMode = release
|
||||||
; docker模式下端口配置文件中只能为8000
|
; docker模式下端口配置文件中只能为8000
|
||||||
@@ -253,6 +253,7 @@ WriteTimeout = 60
|
|||||||
; 关闭SQL打印
|
; 关闭SQL打印
|
||||||
; SqlDebug = enable
|
; SqlDebug = enable
|
||||||
|
|
||||||
|
; Type = sqlite
|
||||||
Type = mysql
|
Type = mysql
|
||||||
User = root
|
User = root
|
||||||
Password = Aa123456
|
Password = Aa123456
|
||||||
@@ -326,41 +327,32 @@ docker-compose up -d
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>docker/docker-compose环境变量部署(推荐🍀🍀🍀🍀🍀)</summary>
|
<summary>docker/docker-compose环境变量部署(推荐🍀🍀🍀🍀🍀🍀🍀)</summary>
|
||||||
|
|
||||||
环境变量介绍
|
环境变量介绍
|
||||||
|
|
||||||
| 变量 | 说明 |
|
| 变量 | 说明 |
|
||||||
|--------------------|------------------------------------|
|
|--------------------|----------------------------------------------------|
|
||||||
| JWT_SECRET | jwt秘钥,可选,默认为message-nest |
|
| JWT_SECRET | jwt秘钥,可选,默认为message-nest |
|
||||||
| LOG_LEVEL | 日志等级,可选,默认为INFO,DEBUG/INFO/ERROR |
|
| LOG_LEVEL | 日志等级,可选,默认为INFO,DEBUG/INFO/ERROR |
|
||||||
| INIT_DATA | 是否初始化数据,可选,默认关,第一次运行需要将该值设置为enable |
|
| RUN_MODE | 运行模式,可选,默认release,为debug将自动添加跨域 |
|
||||||
| RUN_MODE | 运行模式,可选,默认release,为debug将自动添加跨域 |
|
| | |
|
||||||
| | |
|
| DB_TYPE | 数据库类型,sqlite/mysql。默认为sqlite,存储路径为conf/database.db |
|
||||||
| MYSQL_HOST | mysql-host,必填 |
|
| | |
|
||||||
| MYSQL_PORT | mysql端口,必填 |
|
| MYSQL_HOST | mysql-host,DB_TYPE=mysql必填 |
|
||||||
| MYSQL_USER | mysql用户名,必填 |
|
| MYSQL_PORT | mysql端口,DB_TYPE=mysql必填 |
|
||||||
| MYSQL_PASSWORD | mysql数据库密码,必填 |
|
| MYSQL_USER | mysql用户名,DB_TYPE=mysql必填 |
|
||||||
| MYSQL_DB | mysql数据库名字,必填 |
|
| MYSQL_PASSWORD | mysql数据库密码,DB_TYPE=mysql必填 |
|
||||||
| MYSQL_TABLE_PREFIX | mysql数据表前缀,必填 |
|
| MYSQL_DB | mysql数据库名字,DB_TYPE=mysql必填 |
|
||||||
| SQL_DEBUG | 是否打印SQL,可选,默认关,设置enable为开启 |
|
| MYSQL_TABLE_PREFIX | mysql数据表前缀,DB_TYPE=mysql必填 |
|
||||||
|
| | |
|
||||||
|
| SQL_DEBUG | 是否打印SQL,可选,默认关,设置enable为开启 |
|
||||||
|
|
||||||
docker运行
|
docker运行
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# 首次运行指定INIT_DATA=enable初始化数据
|
|
||||||
docker run --rm -ti \
|
|
||||||
-p 8000:8000 \
|
|
||||||
-e INIT_DATA=enable \
|
|
||||||
-e MYSQL_HOST=192.168.64.133 \
|
|
||||||
-e MYSQL_PORT=3308 \
|
|
||||||
-e MYSQL_USER=root \
|
|
||||||
-e MYSQL_PASSWORD=Aa123456 \
|
|
||||||
-e MYSQL_DB=test_11 \
|
|
||||||
-e MYSQL_TABLE_PREFIX=message_ \
|
|
||||||
engigu/message-nest:latest
|
|
||||||
|
|
||||||
# 正式运行
|
# 正式运行(mysql)
|
||||||
docker run -d \
|
docker run -d \
|
||||||
-p 8000:8000 \
|
-p 8000:8000 \
|
||||||
-e MYSQL_HOST=192.168.64.133 \
|
-e MYSQL_HOST=192.168.64.133 \
|
||||||
@@ -370,9 +362,15 @@ docker run -d \
|
|||||||
-e MYSQL_DB=test_11 \
|
-e MYSQL_DB=test_11 \
|
||||||
-e MYSQL_TABLE_PREFIX=message_ \
|
-e MYSQL_TABLE_PREFIX=message_ \
|
||||||
engigu/message-nest:latest
|
engigu/message-nest:latest
|
||||||
|
|
||||||
|
# 正式运行(sqlite)
|
||||||
|
docker run -d \
|
||||||
|
-p 8000:8000 \
|
||||||
|
-v you/path/database.db=conf/database.db \
|
||||||
|
engigu/message-nest:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
docker-compose运行
|
docker-compose运行(mysql)
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
version: "3.7"
|
version: "3.7"
|
||||||
@@ -393,19 +391,23 @@ services:
|
|||||||
- MYSQL_TABLE_PREFIX=message_
|
- MYSQL_TABLE_PREFIX=message_
|
||||||
```
|
```
|
||||||
|
|
||||||
|
docker-compose运行(sqlite)
|
||||||
|
|
||||||
|
```yml
|
||||||
|
version: "3.7"
|
||||||
|
services:
|
||||||
|
|
||||||
|
message-nest:
|
||||||
|
image: engigu/message-nest:latest
|
||||||
|
container_name: message-nest
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
volumes:
|
||||||
|
- you/path/database.db:conf/database.db
|
||||||
|
```
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# 首次运行指定INIT_DATA=enable初始化数据
|
|
||||||
docker run --rm -ti \
|
|
||||||
-p 8000:8000 \
|
|
||||||
-e INIT_DATA=enable \
|
|
||||||
-e MYSQL_HOST=192.168.64.133 \
|
|
||||||
-e MYSQL_PORT=3308 \
|
|
||||||
-e MYSQL_USER=root \
|
|
||||||
-e MYSQL_PASSWORD=Aa123456 \
|
|
||||||
-e MYSQL_DB=test_11 \
|
|
||||||
-e MYSQL_TABLE_PREFIX=message_ \
|
|
||||||
engigu/message-nest:latest
|
|
||||||
|
|
||||||
# 正式运行
|
# 正式运行
|
||||||
docker-compose -up -d
|
docker-compose -up -d
|
||||||
```
|
```
|
||||||
@@ -426,21 +428,6 @@ docker-compose -up -d
|
|||||||
>
|
>
|
||||||
> 两种方式各有优缺点,综合考虑下来,推荐直接使用release的打包执行文件(或者docker环境变量进行部署),其中已经内置了页面静态资源,只用运行一个服务。
|
> 两种方式各有优缺点,综合考虑下来,推荐直接使用release的打包执行文件(或者docker环境变量进行部署),其中已经内置了页面静态资源,只用运行一个服务。
|
||||||
|
|
||||||
#### 关于InitData配置的说明
|
|
||||||
|
|
||||||
> 从功能上开启`InitData=enable`是使用gorm的model进行migrate表字段更改,是将代码中的定义的表结构自动完成sql语句进行表结构的维护。
|
|
||||||
>
|
|
||||||
> 1. 为什么这么设计,不直接使用完整的建表sql?我想了很久,我觉得migrate目前能够满足现在的需求,而且不用手动维护sql的变动。
|
|
||||||
>
|
|
||||||
> 2. 为什么初始化要单独加一个配置开关`InitData=enable`,而不是使用一个标识进行判断? 目前现在确实只需要判断是否初始化标识就可以满足,但是后面如果项目更新添加了新字段,
|
|
||||||
> 就不再适用了。也就是说这个配置设计上既可以完成初始化,也可以完成的后面的字段升级。
|
|
||||||
>
|
|
||||||
> 3. 我一直指定`InitData=enable`运行项目有没影响,会不会数据错、丢失? 不会。一直指定`InitData=enable`,只是每次服务启动多一步会检查,
|
|
||||||
> 检查表字段变动。并且只是新增的表字段会进行添加,已经存在的字段不会进行变更,所以不用担心数据问题。
|
|
||||||
>
|
|
||||||
> 只要初始化指定`InitData=enable`进行了初始化,后续如果项目不升级,后面指不指定`InitData=enable`都没关系。
|
|
||||||
|
|
||||||
|
|
||||||
## 完整配置说明 ⚙️
|
## 完整配置说明 ⚙️
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -548,7 +535,6 @@ TablePrefix = message_
|
|||||||
|
|
||||||
[](https://star-history.com/#engigu/Message-Push-Nest&Date)
|
[](https://star-history.com/#engigu/Message-Push-Nest&Date)
|
||||||
|
|
||||||
|
|
||||||
## 许可证 📝
|
## 许可证 📝
|
||||||
|
|
||||||
[LICENSE](LICENSE)
|
[LICENSE](LICENSE)
|
||||||
|
|||||||
@@ -5,17 +5,19 @@ go 1.20
|
|||||||
require (
|
require (
|
||||||
github.com/engigu/logrus-prefixed-formatter v0.5.3-0.20240113025353-498bcddfa6b5
|
github.com/engigu/logrus-prefixed-formatter v0.5.3-0.20240113025353-498bcddfa6b5
|
||||||
github.com/gin-gonic/gin v1.9.1
|
github.com/gin-gonic/gin v1.9.1
|
||||||
|
github.com/glebarez/sqlite v1.11.0
|
||||||
github.com/go-ini/ini v1.32.1-0.20180214101753-32e4be5f41bb
|
github.com/go-ini/ini v1.32.1-0.20180214101753-32e4be5f41bb
|
||||||
github.com/go-playground/locales v0.14.1
|
github.com/go-playground/locales v0.14.1
|
||||||
github.com/go-playground/universal-translator v0.18.1
|
github.com/go-playground/universal-translator v0.18.1
|
||||||
github.com/go-playground/validator/v10 v10.16.0
|
github.com/go-playground/validator/v10 v10.16.0
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.0
|
github.com/golang-jwt/jwt/v5 v5.2.0
|
||||||
github.com/jinzhu/gorm v0.0.0-20180213101209-6e1387b44c64
|
|
||||||
github.com/robfig/cron/v3 v3.0.1
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
github.com/silenceper/wechat/v2 v2.1.6
|
github.com/silenceper/wechat/v2 v2.1.6
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/unknwon/com v1.0.1
|
github.com/unknwon/com v1.0.1
|
||||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
||||||
|
gorm.io/driver/mysql v1.5.6
|
||||||
|
gorm.io/gorm v1.25.10
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -24,31 +26,31 @@ require (
|
|||||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
||||||
github.com/chenzhuoyu/iasm v0.9.1 // indirect
|
github.com/chenzhuoyu/iasm v0.9.1 // indirect
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20190920000552-128d9f4ae1cd // indirect
|
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 // indirect
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
github.com/fatih/structs v1.1.0 // indirect
|
github.com/fatih/structs v1.1.0 // indirect
|
||||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
|
github.com/glebarez/go-sqlite v1.21.2 // indirect
|
||||||
github.com/go-redis/redis/v8 v8.11.5 // indirect
|
github.com/go-redis/redis/v8 v8.11.5 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.4.1-0.20190510102335-877a9775f068 // indirect
|
github.com/go-sql-driver/mysql v1.7.0 // indirect
|
||||||
github.com/goccy/go-json v0.10.2 // indirect
|
github.com/goccy/go-json v0.10.2 // indirect
|
||||||
github.com/google/go-cmp v0.6.0 // indirect
|
github.com/google/go-cmp v0.6.0 // indirect
|
||||||
github.com/jinzhu/inflection v0.0.0-20170102125226-1c35d901db3d // indirect
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
github.com/jinzhu/now v1.0.1 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.2.6 // indirect
|
github.com/klauspost/cpuid/v2 v2.2.6 // indirect
|
||||||
github.com/kr/pretty v0.1.0 // indirect
|
github.com/kr/pretty v0.1.0 // indirect
|
||||||
github.com/leodido/go-urn v1.2.4 // indirect
|
github.com/leodido/go-urn v1.2.4 // indirect
|
||||||
github.com/lib/pq v1.2.0 // indirect
|
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-sqlite3 v1.11.0 // indirect
|
|
||||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/onsi/gomega v1.30.0 // indirect
|
github.com/onsi/gomega v1.30.0 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
|
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect
|
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect
|
||||||
github.com/spf13/cast v1.4.1 // indirect
|
github.com/spf13/cast v1.4.1 // indirect
|
||||||
github.com/tidwall/gjson v1.14.1 // indirect
|
github.com/tidwall/gjson v1.14.1 // indirect
|
||||||
@@ -63,10 +65,13 @@ require (
|
|||||||
golang.org/x/sys v0.16.0 // indirect
|
golang.org/x/sys v0.16.0 // indirect
|
||||||
golang.org/x/term v0.16.0 // indirect
|
golang.org/x/term v0.16.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
google.golang.org/appengine v1.6.3 // indirect
|
|
||||||
google.golang.org/protobuf v1.32.0 // indirect
|
google.golang.org/protobuf v1.32.0 // indirect
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||||
gopkg.in/ini.v1 v1.47.0 // indirect
|
gopkg.in/ini.v1 v1.47.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
modernc.org/libc v1.22.5 // indirect
|
||||||
|
modernc.org/mathutil v1.5.0 // indirect
|
||||||
|
modernc.org/memory v1.5.0 // indirect
|
||||||
|
modernc.org/sqlite v1.23.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -23,14 +23,12 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20190920000552-128d9f4ae1cd h1:tXCgEGHPT4XELDS7nB0OBb9968yCOd+MnyNf+6m1u40=
|
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20190920000552-128d9f4ae1cd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||||
|
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||||
|
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||||
github.com/engigu/logrus-prefixed-formatter v0.5.3-0.20240113025353-498bcddfa6b5 h1:XRkGO/dTf/3p1SDYr/BNtDmqwLtI+jssymsCgzvqf5c=
|
github.com/engigu/logrus-prefixed-formatter v0.5.3-0.20240113025353-498bcddfa6b5 h1:XRkGO/dTf/3p1SDYr/BNtDmqwLtI+jssymsCgzvqf5c=
|
||||||
github.com/engigu/logrus-prefixed-formatter v0.5.3-0.20240113025353-498bcddfa6b5/go.mod h1:wpl/H0ZIheoONzhaJIPU5Qe+lmLxPXEdY1PNWjla63E=
|
github.com/engigu/logrus-prefixed-formatter v0.5.3-0.20240113025353-498bcddfa6b5/go.mod h1:wpl/H0ZIheoONzhaJIPU5Qe+lmLxPXEdY1PNWjla63E=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
|
||||||
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
|
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
|
||||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
@@ -42,6 +40,10 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE
|
|||||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
||||||
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
|
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
|
||||||
|
github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo=
|
||||||
|
github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k=
|
||||||
|
github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
|
||||||
|
github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
|
||||||
github.com/go-ini/ini v1.32.1-0.20180214101753-32e4be5f41bb h1:v+YnQ81wH+hTjaP5nFSpqASFbe9UETYm1vG65qp7Zc0=
|
github.com/go-ini/ini v1.32.1-0.20180214101753-32e4be5f41bb h1:v+YnQ81wH+hTjaP5nFSpqASFbe9UETYm1vG65qp7Zc0=
|
||||||
github.com/go-ini/ini v1.32.1-0.20180214101753-32e4be5f41bb/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
github.com/go-ini/ini v1.32.1-0.20180214101753-32e4be5f41bb/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||||
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
|
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
|
||||||
@@ -53,17 +55,14 @@ github.com/go-playground/validator/v10 v10.16.0 h1:x+plE831WK4vaKHO/jpgUGsvLKIqR
|
|||||||
github.com/go-playground/validator/v10 v10.16.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
github.com/go-playground/validator/v10 v10.16.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
||||||
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
||||||
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
||||||
github.com/go-sql-driver/mysql v1.4.1-0.20190510102335-877a9775f068 h1:q2kwd9Bcgl2QpSi/Wjcx9jzwyICt3EWTP5to43QhwaA=
|
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
|
||||||
github.com/go-sql-driver/mysql v1.4.1-0.20190510102335-877a9775f068/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
|
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
|
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
|
||||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
@@ -80,6 +79,9 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
|||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
|
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
|
||||||
|
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg=
|
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
@@ -87,12 +89,10 @@ github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslC
|
|||||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
|
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
github.com/jinzhu/gorm v0.0.0-20180213101209-6e1387b44c64 h1:8I4kQ5M5OjZKNsgRUs20soTdIoo1GbiGApV31kJ9e6Y=
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
github.com/jinzhu/gorm v0.0.0-20180213101209-6e1387b44c64/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo=
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
github.com/jinzhu/inflection v0.0.0-20170102125226-1c35d901db3d h1:jRQLvyVGL+iVtDElaEIDdKwpPqUIZJfzkNLV34htpEc=
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
github.com/jinzhu/inflection v0.0.0-20170102125226-1c35d901db3d/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
|
|
||||||
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
@@ -109,15 +109,11 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
|
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
|
||||||
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
||||||
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
|
|
||||||
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q=
|
|
||||||
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
|
||||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
|
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
|
||||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
@@ -145,6 +141,9 @@ github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOS
|
|||||||
github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
github.com/silenceper/wechat/v2 v2.1.6 h1:2br2DxNzhksmvIBJ+PfMqjqsvoZmd/5BnMIfjKYUBgc=
|
github.com/silenceper/wechat/v2 v2.1.6 h1:2br2DxNzhksmvIBJ+PfMqjqsvoZmd/5BnMIfjKYUBgc=
|
||||||
@@ -194,8 +193,6 @@ golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUu
|
|||||||
golang.org/x/arch v0.6.0 h1:S0JTfE48HbRj80+4tbvZDYsJ3tGv6BUU3XxyZ7CirAc=
|
golang.org/x/arch v0.6.0 h1:S0JTfE48HbRj80+4tbvZDYsJ3tGv6BUU3XxyZ7CirAc=
|
||||||
golang.org/x/arch v0.6.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
golang.org/x/arch v0.6.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
@@ -205,7 +202,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
@@ -220,7 +216,6 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -242,22 +237,18 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn
|
|||||||
golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
|
golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
|
||||||
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
|
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/appengine v1.6.3 h1:hvZejVcIxAKHR8Pq2gXaDggf6CWT1QEqO+JEBeOKCG8=
|
|
||||||
google.golang.org/appengine v1.6.3/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
@@ -289,5 +280,18 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
|||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
|
||||||
|
gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
|
||||||
|
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||||
|
gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s=
|
||||||
|
gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||||
|
modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE=
|
||||||
|
modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY=
|
||||||
|
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
|
||||||
|
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
|
modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=
|
||||||
|
modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
|
||||||
|
modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM=
|
||||||
|
modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk=
|
||||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||||
|
|||||||
+16
-13
@@ -3,10 +3,9 @@ package migrate
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/jinzhu/gorm"
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
"gorm.io/gorm"
|
||||||
"message-nest/models"
|
"message-nest/models"
|
||||||
"message-nest/pkg/setting"
|
|
||||||
"message-nest/service/settings_service"
|
"message-nest/service/settings_service"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -43,16 +42,16 @@ func InitAuthTableData() {
|
|||||||
|
|
||||||
func Setup() {
|
func Setup() {
|
||||||
db := models.Setup()
|
db := models.Setup()
|
||||||
defer func(db *gorm.DB) {
|
//defer func(db *gorm.DB) {
|
||||||
err := db.Close()
|
// err := db.Close()
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//}(db)
|
||||||
|
|
||||||
}
|
//if setting.AppSetting.InitData != "enable" {
|
||||||
}(db)
|
// return
|
||||||
|
//}
|
||||||
if setting.AppSetting.InitData != "enable" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
entry := logrus.WithFields(logrus.Fields{
|
entry := logrus.WithFields(logrus.Fields{
|
||||||
"prefix": "[Init Data]",
|
"prefix": "[Init Data]",
|
||||||
@@ -69,9 +68,13 @@ func Setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, table := range tables {
|
for _, table := range tables {
|
||||||
tableName := db.NewScope(table).TableName()
|
//tableName := db.NewScope(table).TableName()
|
||||||
|
tableName := models.GetSchema(table)
|
||||||
entry.Infof("Migrate table: %s", tableName)
|
entry.Infof("Migrate table: %s", tableName)
|
||||||
db.AutoMigrate(table)
|
err := db.AutoMigrate(table)
|
||||||
|
if err != nil {
|
||||||
|
entry.Infof("Migrate table erorr: %s", err.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
entry.Infof("Init Account data...")
|
entry.Infof("Init Account data...")
|
||||||
|
|||||||
+4
-4
@@ -2,13 +2,13 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/jinzhu/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Auth struct {
|
type Auth struct {
|
||||||
ID int `json:"id" gorm:"type:int(11) AUTO_INCREMENT comment 'id';primary_key" json:"id"`
|
ID int `json:"id" gorm:"autoIncrement;type:integer ;primaryKey" json:"id"`
|
||||||
Username string `json:"username" gorm:"type:varchar(100) comment '用户名';default:'';"`
|
Username string `json:"username" gorm:"type:varchar(100);default:'';"`
|
||||||
Password string `json:"password" gorm:"type:varchar(100) comment '密码';default:'';"`
|
Password string `json:"password" gorm:"type:varchar(100);default:'';"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckAuth 检查用户信息
|
// CheckAuth 检查用户信息
|
||||||
|
|||||||
+12
-12
@@ -3,21 +3,21 @@ package models
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/jinzhu/gorm"
|
"gorm.io/gorm"
|
||||||
"message-nest/pkg/util"
|
"message-nest/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CronMessages struct {
|
type CronMessages struct {
|
||||||
UUIDModel
|
UUIDModel
|
||||||
|
|
||||||
Name string `json:"name" gorm:"type:varchar(200) comment '关联的消息名称';default:'';"`
|
Name string `json:"name" gorm:"type:varchar(200) ;default:'';"`
|
||||||
TaskID string `json:"task_id" gorm:"type:varchar(36) comment '关联的消息ID';default:'';"`
|
TaskID string `json:"task_id" gorm:"type:varchar(36) ;default:'';"`
|
||||||
Cron string `json:"cron" gorm:"type:varchar(4096) comment '定时表达式';default:'';"`
|
Cron string `json:"cron" gorm:"type:varchar(4096) ;default:'';"`
|
||||||
Title string `json:"title" gorm:"type:varchar(1000) comment '消息名称';default:'';"`
|
Title string `json:"title" gorm:"type:varchar(1000) ;default:'';"`
|
||||||
Content string `json:"content" gorm:"type:varchar(4096) comment '消息内容';default:'';"`
|
Content string `json:"content" gorm:"type:varchar(4096) ;default:'';"`
|
||||||
//MarkDown string `json:"markdown" gorm:"type:varchar(4096) comment 'markdown内容';default:'';"`
|
//MarkDown string `json:"markdown" gorm:"type:varchar(4096) ;default:'';"`
|
||||||
Url string `json:"url" gorm:"type:varchar(4096) comment 'url地址';default:'';"`
|
Url string `json:"url" gorm:"type:varchar(4096) ;default:'';"`
|
||||||
Enable int `json:"enable" gorm:"type:int comment '开启、暂停状态';default:1;"`
|
Enable int `json:"enable" gorm:"type:int ;default:1;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func GenerateMsgUniqueID() string {
|
func GenerateMsgUniqueID() string {
|
||||||
@@ -77,10 +77,10 @@ func GetCronMessages(pageNum int, pageSize int, name string, maps interface{}) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetCronMessagesTotal 获取所有任务总数
|
// GetCronMessagesTotal 获取所有任务总数
|
||||||
func GetCronMessagesTotal(name string, maps interface{}) (int, error) {
|
func GetCronMessagesTotal(name string, maps interface{}) (int64, error) {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
total int
|
total int64
|
||||||
)
|
)
|
||||||
query := db.Model(&CronMessages{}).Where(maps)
|
query := db.Model(&CronMessages{}).Where(maps)
|
||||||
if name != "" {
|
if name != "" {
|
||||||
@@ -110,7 +110,7 @@ func EditCronMsg(id string, data interface{}) error {
|
|||||||
|
|
||||||
func GetCronMsgByID(id string) (CronMessages, error) {
|
func GetCronMsgByID(id string) (CronMessages, error) {
|
||||||
var msg CronMessages
|
var msg CronMessages
|
||||||
err := db.Where("id = ? ", id).Find(&msg).Error
|
err := db.Where("id = ? ", id).Take(&msg).Error
|
||||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return msg, err
|
return msg, err
|
||||||
}
|
}
|
||||||
|
|||||||
+33
-91
@@ -2,32 +2,33 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/glebarez/sqlite"
|
||||||
_ "github.com/jinzhu/gorm/dialects/mysql"
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/schema"
|
||||||
"log"
|
"log"
|
||||||
"message-nest/pkg/setting"
|
"message-nest/pkg/setting"
|
||||||
"message-nest/pkg/util"
|
"message-nest/pkg/util"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var db *gorm.DB
|
var db *gorm.DB
|
||||||
|
|
||||||
type IDModel struct {
|
type IDModel struct {
|
||||||
ID int `gorm:"type:int(11) AUTO_INCREMENT comment 'id';primary_key" json:"id"`
|
ID uint `gorm:"autoIncrement;type:integer;primaryKey" json:"id"`
|
||||||
|
|
||||||
CreatedBy string `json:"created_by" gorm:"type:varchar(100) comment '创建人';default:'';"`
|
CreatedBy string `json:"created_by" gorm:"type:varchar(100) ;default:'';"`
|
||||||
ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) comment '修改人';default:'';"`
|
ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) ;default:'';"`
|
||||||
CreatedOn util.Time `json:"created_on" gorm:"type:timestamp comment '创建时间';default:current_timestamp;"`
|
CreatedAt util.Time `json:"created_on" gorm:"column:created_on;autoCreateTime "`
|
||||||
ModifiedOn util.Time `json:"modified_on" gorm:"type:timestamp comment '更新时间';"`
|
UpdatedAt util.Time `json:"modified_on" gorm:"column:modified_on;autoUpdateTime ;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UUIDModel struct {
|
type UUIDModel struct {
|
||||||
ID string `gorm:"type:varchar(12) comment 'id';primary_key" json:"id"`
|
ID string `gorm:"type:varchar(12) ;primaryKey" json:"id"`
|
||||||
|
|
||||||
CreatedBy string `json:"created_by" gorm:"type:varchar(100) comment '创建人';default:'';"`
|
CreatedBy string `json:"created_by" gorm:"type:varchar(100) ;default:'';"`
|
||||||
ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) comment '修改人';default:'';"`
|
ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) ;default:'';"`
|
||||||
CreatedOn util.Time `json:"created_on" gorm:"type:timestamp comment '创建时间';default:current_timestamp;"`
|
CreatedAt util.Time `json:"created_on" gorm:"column:created_on;autoCreateTime "`
|
||||||
ModifiedOn util.Time `json:"modified_on" gorm:"type:timestamp comment '更新时间';"`
|
UpdatedAt util.Time `json:"modified_on" gorm:"column:modified_on;autoUpdateTime ;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup initializes the database instance
|
// Setup initializes the database instance
|
||||||
@@ -39,92 +40,33 @@ func Setup() *gorm.DB {
|
|||||||
setting.DatabaseSetting.Host,
|
setting.DatabaseSetting.Host,
|
||||||
setting.DatabaseSetting.Port,
|
setting.DatabaseSetting.Port,
|
||||||
setting.DatabaseSetting.Name)
|
setting.DatabaseSetting.Name)
|
||||||
db, err = gorm.Open(setting.DatabaseSetting.Type, connStr)
|
|
||||||
|
config := &gorm.Config{
|
||||||
|
NamingStrategy: schema.NamingStrategy{
|
||||||
|
TablePrefix: setting.DatabaseSetting.TablePrefix,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
switch setting.DatabaseSetting.Type {
|
||||||
|
case "mysql":
|
||||||
|
db, err = gorm.Open(mysql.Open(connStr), config)
|
||||||
|
case "sqlite":
|
||||||
|
db, err = gorm.Open(sqlite.Open("conf/database.db"), config)
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("models.Setup err: %v", err)
|
log.Fatalf("models.Setup err: %v", err)
|
||||||
}
|
}
|
||||||
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
|
|
||||||
return setting.DatabaseSetting.TablePrefix + defaultTableName
|
|
||||||
}
|
|
||||||
|
|
||||||
if setting.DatabaseSetting.SqlDebug == "enable" {
|
if setting.DatabaseSetting.SqlDebug == "enable" {
|
||||||
db.LogMode(true)
|
db = db.Debug()
|
||||||
}
|
}
|
||||||
db.SingularTable(true)
|
|
||||||
db.Callback().Create().Replace("gorm:update_time_stamp", updateTimeStampForCreateCallback)
|
|
||||||
db.Callback().Update().Replace("gorm:update_time_stamp", updateTimeStampForUpdateCallback)
|
|
||||||
db.Callback().Delete().Replace("gorm:delete", deleteCallback)
|
|
||||||
db.DB().SetMaxIdleConns(10)
|
|
||||||
db.DB().SetMaxOpenConns(100)
|
|
||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
// CloseDB closes database connection (unnecessary)
|
func GetSchema(table any) string {
|
||||||
func CloseDB() {
|
stmt := &gorm.Statement{DB: db}
|
||||||
defer db.Close()
|
stmt.Parse(table)
|
||||||
}
|
return stmt.Schema.Table
|
||||||
|
|
||||||
// updateTimeStampForCreateCallback will set `CreatedOn`, `ModifiedOn` when creating
|
|
||||||
func updateTimeStampForCreateCallback(scope *gorm.Scope) {
|
|
||||||
if !scope.HasError() {
|
|
||||||
nowTime := time.Now()
|
|
||||||
|
|
||||||
if createTimeField, ok := scope.FieldByName("CreatedOn"); ok {
|
|
||||||
if createTimeField.IsBlank {
|
|
||||||
createTimeField.Set(nowTime)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if modifyTimeField, ok := scope.FieldByName("ModifiedOn"); ok {
|
|
||||||
if modifyTimeField.IsBlank {
|
|
||||||
modifyTimeField.Set(nowTime)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// updateTimeStampForUpdateCallback will set `ModifiedOn` when updating
|
|
||||||
func updateTimeStampForUpdateCallback(scope *gorm.Scope) {
|
|
||||||
if _, ok := scope.Get("gorm:update_column"); !ok {
|
|
||||||
scope.SetColumn("ModifiedOn", time.Now())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// deleteCallback will set `DeletedOn` where deleting
|
|
||||||
func deleteCallback(scope *gorm.Scope) {
|
|
||||||
if !scope.HasError() {
|
|
||||||
var extraOption string
|
|
||||||
if str, ok := scope.Get("gorm:delete_option"); ok {
|
|
||||||
extraOption = fmt.Sprint(str)
|
|
||||||
}
|
|
||||||
|
|
||||||
deletedOnField, hasDeletedOnField := scope.FieldByName("DeletedOn")
|
|
||||||
|
|
||||||
if !scope.Search.Unscoped && hasDeletedOnField {
|
|
||||||
scope.Raw(fmt.Sprintf(
|
|
||||||
"UPDATE %v SET %v=%v%v%v",
|
|
||||||
scope.QuotedTableName(),
|
|
||||||
scope.Quote(deletedOnField.DBName),
|
|
||||||
scope.AddToVars(time.Now().Unix()),
|
|
||||||
addExtraSpaceIfExist(scope.CombinedConditionSql()),
|
|
||||||
addExtraSpaceIfExist(extraOption),
|
|
||||||
)).Exec()
|
|
||||||
} else {
|
|
||||||
scope.Raw(fmt.Sprintf(
|
|
||||||
"DELETE FROM %v%v%v",
|
|
||||||
scope.QuotedTableName(),
|
|
||||||
addExtraSpaceIfExist(scope.CombinedConditionSql()),
|
|
||||||
addExtraSpaceIfExist(extraOption),
|
|
||||||
)).Exec()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// addExtraSpaceIfExist adds a separator
|
|
||||||
func addExtraSpaceIfExist(str string) string {
|
|
||||||
if str != "" {
|
|
||||||
return " " + str
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-8
@@ -3,13 +3,13 @@ package models
|
|||||||
type SendTasksIns struct {
|
type SendTasksIns struct {
|
||||||
UUIDModel
|
UUIDModel
|
||||||
|
|
||||||
TaskID string `json:"task_id" gorm:"type:varchar(12) comment '任务id';default:'';index:task_id"`
|
TaskID string `json:"task_id" gorm:"type:varchar(12) ;default:'';index"`
|
||||||
WayID string `json:"way_id" gorm:"type:varchar(12) comment '渠道id';default:'';index:way_id"`
|
WayID string `json:"way_id" gorm:"type:varchar(12) ;default:'';index"`
|
||||||
WayType string `json:"way_type" gorm:"type:varchar(100) comment '渠道类型';default:'';index:way_type"`
|
WayType string `json:"way_type" gorm:"type:varchar(100) ;default:'';index"`
|
||||||
ContentType string `json:"content_type" gorm:"type:varchar(100) comment '实例类型';default:'';index:content_type"`
|
ContentType string `json:"content_type" gorm:"type:varchar(100) ;default:'';index"`
|
||||||
Config string `json:"config" gorm:"type:text comment '实例配置';"`
|
Config string `json:"config" gorm:"type:text ;"`
|
||||||
Extra string `json:"extra" gorm:"type:text comment '额外信息';"`
|
Extra string `json:"extra" gorm:"type:text ;"`
|
||||||
Enable int `json:"enable" gorm:"type:int comment '开启、暂停状态';default:1;"`
|
Enable int `json:"enable" gorm:"type:int ;default:1;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// InsEmailConfig 实例里面的邮箱config
|
// InsEmailConfig 实例里面的邮箱config
|
||||||
@@ -39,7 +39,7 @@ func ManyAddTaskIns(taskIns []SendTasksIns) error {
|
|||||||
tx := db.Begin()
|
tx := db.Begin()
|
||||||
for _, ins := range taskIns {
|
for _, ins := range taskIns {
|
||||||
// 存在就跳过这条ins记录
|
// 存在就跳过这条ins记录
|
||||||
err := db.Where("id = ?", ins.ID).Find(&SendTasksIns{}).Error
|
err := db.Where("id = ?", ins.ID).Take(&SendTasksIns{}).Error
|
||||||
if err == nil {
|
if err == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-10
@@ -3,14 +3,14 @@ package models
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/jinzhu/gorm"
|
"gorm.io/gorm"
|
||||||
"message-nest/pkg/util"
|
"message-nest/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SendTasks struct {
|
type SendTasks struct {
|
||||||
UUIDModel
|
UUIDModel
|
||||||
|
|
||||||
Name string `json:"name" gorm:"type:varchar(100) comment '任务名称';default:'';"`
|
Name string `json:"name" gorm:"type:varchar(100) ;default:'';"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func GenerateTaskUniqueID() string {
|
func GenerateTaskUniqueID() string {
|
||||||
@@ -20,7 +20,7 @@ func GenerateTaskUniqueID() string {
|
|||||||
|
|
||||||
// AddSendTaskWithID 添加实例的时候添加任务
|
// AddSendTaskWithID 添加实例的时候添加任务
|
||||||
func AddSendTaskWithID(name string, id string, createdBy string) error {
|
func AddSendTaskWithID(name string, id string, createdBy string) error {
|
||||||
err := db.Where("id = ?", id).Find(&SendTasks{}).Error
|
err := db.Where("id = ?", id).Take(&SendTasks{}).Error
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -77,10 +77,10 @@ func GetSendTasks(pageNum int, pageSize int, name string, maps interface{}) ([]S
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetSendTasksTotal 获取所有任务总数
|
// GetSendTasksTotal 获取所有任务总数
|
||||||
func GetSendTasksTotal(name string, maps interface{}) (int, error) {
|
func GetSendTasksTotal(name string, maps interface{}) (int64, error) {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
total int
|
total int64
|
||||||
)
|
)
|
||||||
query := db.Model(&SendTasks{}).Where(maps)
|
query := db.Model(&SendTasks{}).Where(maps)
|
||||||
if name != "" {
|
if name != "" {
|
||||||
@@ -108,8 +108,9 @@ type TaskIns struct {
|
|||||||
|
|
||||||
// GetTasksIns 获取所有任务下所有的实例
|
// GetTasksIns 获取所有任务下所有的实例
|
||||||
func GetTasksIns(id string) (TaskIns, error) {
|
func GetTasksIns(id string) (TaskIns, error) {
|
||||||
insTable := db.NewScope(SendTasksIns{}).TableName()
|
//insTable := GetSchema(SendTasksIns{})
|
||||||
waysTable := db.NewScope(SendWays{}).TableName()
|
insTable := GetSchema(SendTasksIns{})
|
||||||
|
waysTable := GetSchema(SendWays{})
|
||||||
var (
|
var (
|
||||||
task SendTasks
|
task SendTasks
|
||||||
taskIns []SendTasksInsRes
|
taskIns []SendTasksInsRes
|
||||||
@@ -136,8 +137,8 @@ func GetTasksIns(id string) (TaskIns, error) {
|
|||||||
|
|
||||||
// FindTaskByWayId 通过way_id找到关联的任务
|
// FindTaskByWayId 通过way_id找到关联的任务
|
||||||
func FindTaskByWayId(wayId string) []SendTasks {
|
func FindTaskByWayId(wayId string) []SendTasks {
|
||||||
insTable := db.NewScope(SendTasksIns{}).TableName()
|
insTable := GetSchema(SendTasksIns{})
|
||||||
taskTable := db.NewScope(SendTasks{}).TableName()
|
taskTable := GetSchema(SendTasks{})
|
||||||
var (
|
var (
|
||||||
tasks []SendTasks
|
tasks []SendTasks
|
||||||
)
|
)
|
||||||
@@ -177,7 +178,7 @@ func EditSendTask(id string, data interface{}) error {
|
|||||||
|
|
||||||
func GetTaskByID(id string) (SendTasks, error) {
|
func GetTaskByID(id string) (SendTasks, error) {
|
||||||
var task SendTasks
|
var task SendTasks
|
||||||
err := db.Where("id = ? ", id).Find(&task).Error
|
err := db.Where("id = ? ", id).Take(&task).Error
|
||||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return task, err
|
return task, err
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-21
@@ -3,17 +3,18 @@ package models
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"message-nest/pkg/util"
|
"message-nest/pkg/util"
|
||||||
|
//"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SendTasksLogs struct {
|
type SendTasksLogs struct {
|
||||||
ID int `gorm:"primary_key" json:"id" `
|
ID int `gorm:"primaryKey" json:"id" `
|
||||||
TaskID string `json:"task_id" gorm:"type:varchar(12) comment '任务id';default:'';index:task_id"`
|
TaskID string `json:"task_id" gorm:"type:varchar(12) ;default:'';index:task_id"`
|
||||||
Log string `json:"log" gorm:"type:text comment '日志';"`
|
Log string `json:"log" gorm:"type:text ;"`
|
||||||
Status *int `json:"status" gorm:"type:int comment '状态';default:0;"`
|
Status *int `json:"status" gorm:"type:int ;default:0;"`
|
||||||
CallerIp string `json:"caller_ip" gorm:"type:varchar(256) comment '发送者的ip';default:'';"`
|
CallerIp string `json:"caller_ip" gorm:"type:varchar(256) ;default:'';"`
|
||||||
|
|
||||||
CreatedOn util.Time `json:"created_on" gorm:"type:timestamp comment '创建时间';default:current_timestamp;"`
|
CreatedAt util.Time `json:"created_on" gorm:"column:created_on;autoCreateTime "`
|
||||||
ModifiedOn util.Time `json:"modified_on" gorm:"type:timestamp comment '更新时间';"`
|
UpdatedAt util.Time `json:"modified_on" gorm:"column:modified_on;autoUpdateTime ;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add 添加日志记录
|
// Add 添加日志记录
|
||||||
@@ -39,8 +40,8 @@ type LogsResult struct {
|
|||||||
// GetSendLogs 获取所有日志记录
|
// GetSendLogs 获取所有日志记录
|
||||||
func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps map[string]interface{}) ([]LogsResult, error) {
|
func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps map[string]interface{}) ([]LogsResult, error) {
|
||||||
var logs []LogsResult
|
var logs []LogsResult
|
||||||
logt := db.NewScope(SendTasksLogs{}).TableName()
|
logt := GetSchema(SendTasksLogs{})
|
||||||
taskt := db.NewScope(SendTasks{}).TableName()
|
taskt := GetSchema(SendTasks{})
|
||||||
|
|
||||||
query := db.
|
query := db.
|
||||||
Table(logt).
|
Table(logt).
|
||||||
@@ -70,10 +71,10 @@ func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps map
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetSendLogsTotal 获取所有日志总数
|
// GetSendLogsTotal 获取所有日志总数
|
||||||
func GetSendLogsTotal(name string, taskId string, maps map[string]interface{}) (int, error) {
|
func GetSendLogsTotal(name string, taskId string, maps map[string]interface{}) (int64, error) {
|
||||||
var total int
|
var total int64
|
||||||
logt := db.NewScope(SendTasksLogs{}).TableName()
|
logt := GetSchema(SendTasksLogs{})
|
||||||
taskt := db.NewScope(SendTasks{}).TableName()
|
taskt := GetSchema(SendTasks{})
|
||||||
query := db.
|
query := db.
|
||||||
Table(logt).
|
Table(logt).
|
||||||
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
|
||||||
@@ -98,7 +99,7 @@ func GetSendLogsTotal(name string, taskId string, maps map[string]interface{}) (
|
|||||||
// GetSendLogsTotal 获取所有日志总数
|
// GetSendLogsTotal 获取所有日志总数
|
||||||
func DeleteOutDateLogs(keepNum int) (int, error) {
|
func DeleteOutDateLogs(keepNum int) (int, error) {
|
||||||
var affectedRows int
|
var affectedRows int
|
||||||
logt := db.NewScope(SendTasksLogs{}).TableName()
|
logt := GetSchema(SendTasksLogs{})
|
||||||
sql := fmt.Sprintf(`DELETE FROM %s
|
sql := fmt.Sprintf(`DELETE FROM %s
|
||||||
WHERE id NOT IN (
|
WHERE id NOT IN (
|
||||||
SELECT id FROM (
|
SELECT id FROM (
|
||||||
@@ -122,8 +123,8 @@ type StatisticData struct {
|
|||||||
TodayFailedNum int `json:"today_failed_num"`
|
TodayFailedNum int `json:"today_failed_num"`
|
||||||
TodayTotalNum int `json:"today_total_num"`
|
TodayTotalNum int `json:"today_total_num"`
|
||||||
|
|
||||||
LatestSendData []LatestSendData `json:"latest_send_data"`
|
LatestSendData []LatestSendData `json:"latest_send_data" gorm:"many2many:latest_send_data;"`
|
||||||
WayCateData []WayCateData `json:"way_cate_data"`
|
WayCateData []WayCateData `json:"way_cate_data" gorm:"many2many:way_cate_data;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type LatestSendData struct {
|
type LatestSendData struct {
|
||||||
@@ -144,9 +145,9 @@ func GetStatisticData() (StatisticData, error) {
|
|||||||
var statistic StatisticData
|
var statistic StatisticData
|
||||||
var latestData []LatestSendData
|
var latestData []LatestSendData
|
||||||
var wayCateData []WayCateData
|
var wayCateData []WayCateData
|
||||||
logt := db.NewScope(SendTasksLogs{}).TableName()
|
logt := GetSchema(SendTasksLogs{})
|
||||||
inst := db.NewScope(SendTasksIns{}).TableName()
|
inst := GetSchema(SendTasksIns{})
|
||||||
wayst := db.NewScope(SendWays{}).TableName()
|
wayst := GetSchema(SendWays{})
|
||||||
currDay := util.GetNowTimeStr()[:10]
|
currDay := util.GetNowTimeStr()[:10]
|
||||||
|
|
||||||
// 今日统计数据
|
// 今日统计数据
|
||||||
@@ -158,10 +159,15 @@ func GetStatisticData() (StatisticData, error) {
|
|||||||
SUM(CASE WHEN status != 1 or status is null THEN 1 ELSE 0 END) AS today_failed_num`).
|
SUM(CASE WHEN status != 1 or status is null THEN 1 ELSE 0 END) AS today_failed_num`).
|
||||||
Where("DATE(created_on) = ?", currDay)
|
Where("DATE(created_on) = ?", currDay)
|
||||||
|
|
||||||
query.First(&statistic)
|
query.Take(&statistic)
|
||||||
|
|
||||||
// 最近30天数据
|
// 最近30天数据
|
||||||
days := 30
|
days := 30
|
||||||
|
now := util.GetNowTime()
|
||||||
|
past := now.AddDate(0, 0, -days)
|
||||||
|
pastDate := past.Format("2006-01-02")
|
||||||
|
next := now.AddDate(0, 0, 1)
|
||||||
|
nextDate := next.Format("2006-01-02")
|
||||||
queryData := db.
|
queryData := db.
|
||||||
Table(logt).
|
Table(logt).
|
||||||
Select(`
|
Select(`
|
||||||
@@ -169,7 +175,7 @@ func GetStatisticData() (StatisticData, error) {
|
|||||||
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS day_succ_num,
|
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS day_succ_num,
|
||||||
SUM(CASE WHEN status != 1 or status is null THEN 1 ELSE 0 END) AS day_failed_num,
|
SUM(CASE WHEN status != 1 or status is null THEN 1 ELSE 0 END) AS day_failed_num,
|
||||||
COUNT(*) AS num`).
|
COUNT(*) AS num`).
|
||||||
Where(" created_on >= DATE(?) - INTERVAL ? DAY", currDay, days).
|
Where(fmt.Sprintf(" created_on >= '%s' and created_on <= '%s' ", pastDate, nextDate)).
|
||||||
Group("day").
|
Group("day").
|
||||||
Order("day")
|
Order("day")
|
||||||
|
|
||||||
|
|||||||
+7
-7
@@ -3,16 +3,16 @@ package models
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/jinzhu/gorm"
|
"gorm.io/gorm"
|
||||||
"message-nest/pkg/util"
|
"message-nest/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SendWays struct {
|
type SendWays struct {
|
||||||
UUIDModel
|
UUIDModel
|
||||||
|
|
||||||
Name string `json:"name" gorm:"type:varchar(100) comment '渠道名称';default:'';"`
|
Name string `json:"name" gorm:"type:varchar(100) ;default:'';"`
|
||||||
Type string `json:"type" gorm:"type:varchar(100) comment '渠道类型';default:'';index:type"`
|
Type string `json:"type" gorm:"type:varchar(100) ;default:'';index"`
|
||||||
Auth string `json:"auth" gorm:"type:varchar(2048) comment '认证信息';default:'';"`
|
Auth string `json:"auth" gorm:"type:varchar(2048) ;default:'';"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func GenerateWayUniqueID() string {
|
func GenerateWayUniqueID() string {
|
||||||
@@ -63,10 +63,10 @@ func GetSendWays(pageNum int, pageSize int, name string, type_ string, maps inte
|
|||||||
return ways, nil
|
return ways, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetSendWaysTotal(name string, type_ string, maps interface{}) (int, error) {
|
func GetSendWaysTotal(name string, type_ string, maps interface{}) (int64, error) {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
total int
|
total int64
|
||||||
)
|
)
|
||||||
query := db.Model(&SendWays{}).Where(maps)
|
query := db.Model(&SendWays{}).Where(maps)
|
||||||
if name != "" {
|
if name != "" {
|
||||||
@@ -85,7 +85,7 @@ func GetSendWaysTotal(name string, type_ string, maps interface{}) (int, error)
|
|||||||
|
|
||||||
func GetWayByID(id string) (SendWays, error) {
|
func GetWayByID(id string) (SendWays, error) {
|
||||||
var way SendWays
|
var way SendWays
|
||||||
err := db.Where("id = ? ", id).Find(&way).Error
|
err := db.Where("id = ? ", id).Take(&way).Error
|
||||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return way, err
|
return way, err
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -2,15 +2,15 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/jinzhu/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Settings struct {
|
type Settings struct {
|
||||||
IDModel
|
IDModel
|
||||||
|
|
||||||
Section string `json:"section" gorm:"type:varchar(100) comment '实例类型';default:'';index:section"`
|
Section string `json:"section" gorm:"type:varchar(100) ;default:'';index"`
|
||||||
Key string `json:"key" gorm:"type:varchar(100) comment '实例类型';default:'';"`
|
Key string `json:"key" gorm:"type:varchar(100) ;default:'';"`
|
||||||
Value string `json:"value" gorm:"type:text comment '实例类型';"`
|
Value string `json:"value" gorm:"type:text ;"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddOneSetting 添加一条设置
|
// AddOneSetting 添加一条设置
|
||||||
@@ -22,7 +22,7 @@ func AddOneSetting(setting Settings) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EditSetting 编辑设置
|
// EditSetting 编辑设置
|
||||||
func EditSetting(id int, data interface{}) error {
|
func EditSetting(id uint, data interface{}) error {
|
||||||
if err := db.Model(&Settings{}).Where("id = ? ", id).Updates(data).Error; err != nil {
|
if err := db.Model(&Settings{}).Where("id = ? ", id).Updates(data).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ func GetSettingByKey(section string, key string) (Settings, error) {
|
|||||||
|
|
||||||
func GetSettingBySection(section string) ([]Settings, error) {
|
func GetSettingBySection(section string) ([]Settings, error) {
|
||||||
var settings []Settings
|
var settings []Settings
|
||||||
err := db.Table(db.NewScope(Settings{}).TableName()).Where("`section` = ? ", section).Scan(&settings).Error
|
err := db.Table(GetSchema(Settings{})).Where("`section` = ? ", section).Scan(&settings).Error
|
||||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return settings, err
|
return settings, err
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -50,7 +50,8 @@ func loadConfigFromEnv() {
|
|||||||
ServerSetting.ReadTimeout = 60
|
ServerSetting.ReadTimeout = 60
|
||||||
ServerSetting.WriteTimeout = 60
|
ServerSetting.WriteTimeout = 60
|
||||||
|
|
||||||
DatabaseSetting.Type = "mysql"
|
DatabaseSetting.Type = getOptionEnvValue("DB_TYPE", "sqlite")
|
||||||
|
|
||||||
DatabaseSetting.Host = getMustEnvValue("MYSQL_HOST")
|
DatabaseSetting.Host = getMustEnvValue("MYSQL_HOST")
|
||||||
DatabaseSetting.Port = com.StrTo(getMustEnvValue("MYSQL_PORT")).MustInt()
|
DatabaseSetting.Port = com.StrTo(getMustEnvValue("MYSQL_PORT")).MustInt()
|
||||||
DatabaseSetting.User = getMustEnvValue("MYSQL_USER")
|
DatabaseSetting.User = getMustEnvValue("MYSQL_USER")
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ func Setup() {
|
|||||||
ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second
|
ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second
|
||||||
ServerSetting.WriteTimeout = ServerSetting.WriteTimeout * time.Second
|
ServerSetting.WriteTimeout = ServerSetting.WriteTimeout * time.Second
|
||||||
|
|
||||||
|
log.Printf("[message-nest] DB type: %s", DatabaseSetting.Type)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// mapTo map section
|
// mapTo map section
|
||||||
|
|||||||
+8
-2
@@ -56,8 +56,14 @@ func (t *Time) Scan(v interface{}) error {
|
|||||||
|
|
||||||
// GetNowTimeStr 获取当前的时间字符串
|
// GetNowTimeStr 获取当前的时间字符串
|
||||||
func GetNowTimeStr() string {
|
func GetNowTimeStr() string {
|
||||||
currentTimeUTC := time.Now().UTC()
|
chinaTime := GetNowTime()
|
||||||
chinaTime := currentTimeUTC.Add(8 * time.Hour)
|
|
||||||
formattedTime := chinaTime.Format("2006-01-02 15:04:05")
|
formattedTime := chinaTime.Format("2006-01-02 15:04:05")
|
||||||
return formattedTime
|
return formattedTime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetNowTimeStr 获取当前的时间字符串
|
||||||
|
func GetNowTime() time.Time {
|
||||||
|
currentTimeUTC := time.Now().UTC()
|
||||||
|
chinaTime := currentTimeUTC.Add(8 * time.Hour)
|
||||||
|
return chinaTime
|
||||||
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ func (st *CronMsgService) GetByID() (models.CronMessages, error) {
|
|||||||
return models.GetCronMsgByID(st.ID)
|
return models.GetCronMsgByID(st.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *CronMsgService) Count() (int, error) {
|
func (st *CronMsgService) Count() (int64, error) {
|
||||||
return models.GetCronMessagesTotal(st.Name, st.getMaps())
|
return models.GetCronMessagesTotal(st.Name, st.getMaps())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ func (st *SendTaskInsService) Update(data map[string]interface{}) error {
|
|||||||
return models.UpdateMsgTaskIns(st.ID, data)
|
return models.UpdateMsgTaskIns(st.ID, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *SendTaskInsService) Count() (int, error) {
|
func (st *SendTaskInsService) Count() (int64, error) {
|
||||||
return models.GetSendTasksTotal(st.Name, st.getMaps())
|
return models.GetSendTasksTotal(st.Name, st.getMaps())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ type SendTaskLogsService struct {
|
|||||||
PageSize int
|
PageSize int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *SendTaskLogsService) Count() (int, error) {
|
func (st *SendTaskLogsService) Count() (int64, error) {
|
||||||
return models.GetSendLogsTotal(st.Name, st.TaskId, st.getMaps())
|
return models.GetSendLogsTotal(st.Name, st.TaskId, st.getMaps())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ func (st *SendTaskService) GetTaskWithIns() (models.TaskIns, error) {
|
|||||||
return models.GetTasksIns(st.ID)
|
return models.GetTasksIns(st.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *SendTaskService) Count() (int, error) {
|
func (st *SendTaskService) Count() (int64, error) {
|
||||||
return models.GetSendTasksTotal(st.Name, st.getMaps())
|
return models.GetSendTasksTotal(st.Name, st.getMaps())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ func (sw *SendWay) Delete() error {
|
|||||||
return models.DeleteMsgWay(sw.ID)
|
return models.DeleteMsgWay(sw.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sw *SendWay) Count() (int, error) {
|
func (sw *SendWay) Count() (int64, error) {
|
||||||
return models.GetSendWaysTotal(sw.Name, sw.Type, sw.getMaps())
|
return models.GetSendWaysTotal(sw.Name, sw.Type, sw.getMaps())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user