mirror of
https://github.com/go-home-admin/toolset.git
synced 2025-12-24 13:37:52 +08:00
feat:MONGO ORM
This commit is contained in:
224
console/commands/mongo.go
Normal file
224
console/commands/mongo.go
Normal file
@@ -0,0 +1,224 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"github.com/ctfang/command"
|
||||
"github.com/go-home-admin/toolset/console/commands/orm"
|
||||
"github.com/go-home-admin/toolset/parser"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// MongoCommand @Bean
|
||||
type MongoCommand struct{}
|
||||
|
||||
//go:embed mongo/orm.go.text
|
||||
var ormTemplate string
|
||||
|
||||
func (MongoCommand) Configure() command.Configure {
|
||||
return command.Configure{
|
||||
Name: "make:mongo",
|
||||
Description: "根据proto文件, 生成mongodb的orm源码",
|
||||
Input: command.Argument{
|
||||
Argument: []command.ArgParam{
|
||||
{
|
||||
Name: "proto_file",
|
||||
Description: "一个以数据库名命名的proto文件",
|
||||
},
|
||||
},
|
||||
Option: []command.ArgParam{
|
||||
{
|
||||
Name: "out",
|
||||
Description: "输出目录",
|
||||
Default: "@root/app/entity",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (MongoCommand) Execute(input command.Input) {
|
||||
root := getRootPath()
|
||||
file := input.GetArgument("proto_file")
|
||||
if file[0:1] != "/" && file[0:1] != "@" {
|
||||
file = "@root" + "/" + file
|
||||
}
|
||||
file = strings.Replace(file, "@root", root, 1)
|
||||
if !orm.IsExist(file) {
|
||||
panic("找不到proto文件")
|
||||
}
|
||||
out := input.GetOption("out")
|
||||
if out[0:1] != "/" && out[0:1] != "@" {
|
||||
out = "@root" + "/" + out
|
||||
}
|
||||
out = strings.Replace(out, "@root", root, 1)
|
||||
|
||||
protoc, _ := parser.GetProtoFileParser(file)
|
||||
|
||||
db := strings.Split(filepath.Base(file), ".")[0]
|
||||
out = out + "/" + db
|
||||
if !orm.IsExist(out) {
|
||||
_ = os.MkdirAll(out, 0766)
|
||||
}
|
||||
//生成枚举
|
||||
enumFile := out + "/" + "db_enum_gen.go"
|
||||
enumStr := "package " + db + "\n\n"
|
||||
for enumName, enumInfo := range protoc.Enums {
|
||||
enumStr += formatDoc(enumInfo.Doc, true) + "type " + enumName + " int32\n\n"
|
||||
enumStr += "const ("
|
||||
for _, attr := range enumInfo.Opt {
|
||||
enumStr += "\n" + formatDoc(attr.Doc, true)
|
||||
enumStr += enumName + "_" + attr.Name + " " + enumName + " = " + fmt.Sprint(attr.Num)
|
||||
}
|
||||
enumStr += "\n)\n\n"
|
||||
}
|
||||
err := os.WriteFile(enumFile, []byte(enumStr), 0766)
|
||||
if err != nil {
|
||||
panic("生成枚举文件出错:" + err.Error())
|
||||
}
|
||||
runOtherCommand("go", "fmt", enumFile)
|
||||
|
||||
//生成结构文件
|
||||
structMap := make(map[string]int, 0)
|
||||
for structName, _ := range protoc.Messages {
|
||||
structMap[structName] = 1
|
||||
}
|
||||
structFile := out + "/" + "db_struct_gen.go"
|
||||
structStr := "package " + db + "\n"
|
||||
for structName, structInfo := range protoc.Messages {
|
||||
if strings.Index(structInfo.Doc, "@Struct") != -1 || strings.Index(structInfo.Doc, "@struct") != -1 {
|
||||
structStr += "\n" + formatDoc(structInfo.Doc, true)
|
||||
structStr += genOrmStruct(structName, structInfo.Attr, structMap) + "\n"
|
||||
}
|
||||
}
|
||||
err = os.WriteFile(structFile, []byte(structStr), 0766)
|
||||
if err != nil {
|
||||
panic("生成结构文件出错:" + err.Error())
|
||||
}
|
||||
runOtherCommand("go", "fmt", structFile)
|
||||
|
||||
//生成ORM文件
|
||||
for tableName, tableInfo := range protoc.Messages {
|
||||
if strings.Index(tableInfo.Doc, "@Struct") != -1 || strings.Index(tableInfo.Doc, "@struct") != -1 {
|
||||
continue
|
||||
}
|
||||
str := ormTemplate
|
||||
tableNameSnake := parser.StringToSnake(tableName)
|
||||
ormFile := out + "/" + tableNameSnake + "_gen.go"
|
||||
for old, newStr := range map[string]string{
|
||||
"{database}": db,
|
||||
"{tableName}": tableName,
|
||||
"{tableNameSnake}": tableNameSnake,
|
||||
"{ormStruct}": genOrmStruct(tableName, tableInfo.Attr, structMap),
|
||||
"{createdAt}": genCreateAt(tableInfo.Attr),
|
||||
"{updatedAt}": genUpdatedAt(tableInfo.Attr),
|
||||
"{where}": genWhere(tableName, tableInfo.Attr),
|
||||
} {
|
||||
str = strings.ReplaceAll(str, old, newStr)
|
||||
}
|
||||
err = os.WriteFile(ormFile, []byte(str), 0766)
|
||||
if err != nil {
|
||||
panic("生成ORM文件出错:" + err.Error())
|
||||
}
|
||||
runOtherCommand("go", "fmt", ormFile)
|
||||
}
|
||||
}
|
||||
|
||||
func genOrmStruct(tableName string, columns []parser.Attr, structMap map[string]int) string {
|
||||
str := "type " + tableName + " struct {"
|
||||
str += "\n\tId string `bson:\"_id\" form:\"id\" json:\"id,omitempty\"`"
|
||||
for _, column := range columns {
|
||||
if column.Name == "id" || column.Name == "_id" {
|
||||
continue
|
||||
}
|
||||
fieldName := parser.StringToHump(column.Name)
|
||||
str += fmt.Sprintf("\n\t%v %v `%v` %v", fieldName, getGoType(column, structMap), genGormTag(column), formatDoc(column.Doc))
|
||||
}
|
||||
return str + "\n}"
|
||||
}
|
||||
|
||||
func genGormTag(column parser.Attr) string {
|
||||
return strings.ReplaceAll(`bson:"{field}" form:"{field}" json:"{field},omitempty"`, "{field}", column.Name)
|
||||
}
|
||||
|
||||
func formatDoc(doc string, wrap ...bool) string {
|
||||
if doc == "" {
|
||||
return ""
|
||||
}
|
||||
end := ""
|
||||
if len(wrap) > 0 && wrap[0] == true {
|
||||
end = "\n"
|
||||
}
|
||||
return "// " + strings.ReplaceAll(strings.ReplaceAll(doc, "@Struct", ""), "@struct", "") + end
|
||||
}
|
||||
|
||||
func getGoType(column parser.Attr, structMap map[string]int) string {
|
||||
t := column.Ty
|
||||
switch t {
|
||||
case "double", "float":
|
||||
t = "float64"
|
||||
}
|
||||
if _, ok := structMap[t]; ok {
|
||||
t = "*" + t
|
||||
}
|
||||
if column.Repeated {
|
||||
t = "[]" + t
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
func genCreateAt(columns []parser.Attr) string {
|
||||
str := ""
|
||||
for _, column := range columns {
|
||||
if column.Name == "created_at" || column.Name == "updated_at" {
|
||||
columnName := parser.StringToHump(column.Name)
|
||||
if strings.Contains(column.Ty, "int") {
|
||||
timeStr := "time.Now().Unix()"
|
||||
if column.Ty != "int64" {
|
||||
timeStr = column.Ty + "(" + timeStr + ")"
|
||||
}
|
||||
str += fmt.Sprintf("if data.%v == 0 {\ndata.%v = %v\n}\n", columnName, columnName, timeStr)
|
||||
} else if column.Ty == "string" {
|
||||
str += strings.ReplaceAll("if data.{field} == \"\" {\ndata.{field} = time.Now().Format(\"2006-01-02 15:04:05\")\n}\n", "{field}", columnName)
|
||||
}
|
||||
}
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
func genUpdatedAt(columns []parser.Attr) string {
|
||||
str := ""
|
||||
for _, column := range columns {
|
||||
if column.Name == "updated_at" {
|
||||
if strings.Contains(column.Ty, "int") {
|
||||
str += "if data[\"UpdatedAt\"] == 0 {\ndata[\"UpdatedAt\"] = time.Now().Unix()\n}\n"
|
||||
} else if column.Ty == "string" {
|
||||
str += "if _,ok := data[\"UpdatedAt\"]; !ok {\ndata[\"UpdatedAt\"] = time.Now().Format(\"2006-01-02 15:04:05\")\n}\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
func genWhere(tableName string, columns []parser.Attr) string {
|
||||
var supportType = map[string]int{
|
||||
"int": 1,
|
||||
"int32": 1,
|
||||
"uint32": 1,
|
||||
"int64": 1,
|
||||
"float32": 1,
|
||||
"float64": 1,
|
||||
"string": 1,
|
||||
}
|
||||
template := "func (receiver *Orm%v) Where%v(value %v) *Orm%v {\nreturn receiver.Where(\"%v\", value)\n}\n\n"
|
||||
str := ""
|
||||
for _, column := range columns {
|
||||
if _, ok := supportType[column.Ty]; ok {
|
||||
field := parser.StringToHump(column.Name)
|
||||
str += fmt.Sprintf(template, tableName, field, column.Ty, tableName, column.Name)
|
||||
}
|
||||
}
|
||||
return str
|
||||
}
|
||||
220
console/commands/mongo/orm.go.text
Normal file
220
console/commands/mongo/orm.go.text
Normal file
@@ -0,0 +1,220 @@
|
||||
package {database}
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
provider "github.com/go-home-admin/home/bootstrap/providers/mongo"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
"gopkg.in/mgo.v2/bson"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
{ormStruct}
|
||||
|
||||
type Orm{tableName} struct {
|
||||
ctx context.Context
|
||||
query bson.M
|
||||
findOpt *options.FindOptions
|
||||
info *{tableName}
|
||||
collection *mongo.Collection
|
||||
list Orm{tableName}List // 列表查询时候赋值
|
||||
}
|
||||
|
||||
type Orm{tableName}List []*{tableName}
|
||||
|
||||
func (receiver *Orm{tableName}) Init() {
|
||||
receiver.collection = provider.NewMongoProvider().GetBean("{database}").(*mongo.Database).Collection("{tableNameSnake}")
|
||||
receiver.query = make(bson.M)
|
||||
receiver.ctx = context.Background()
|
||||
receiver.findOpt = options.Find()
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Collection() *mongo.Collection {
|
||||
return receiver.collection
|
||||
}
|
||||
|
||||
func NewOrm{tableName}() *Orm{tableName} {
|
||||
obj := Orm{tableName}{}
|
||||
obj.Init()
|
||||
return &obj
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Where(key string, value interface{}) *Orm{tableName} {
|
||||
if key == "id" {
|
||||
receiver.query["_id"] = value
|
||||
} else {
|
||||
receiver.query[key] = value
|
||||
}
|
||||
return receiver
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Select(columns ...string) *Orm{tableName} {
|
||||
if len(columns) == 1 && columns[0] != "*" {
|
||||
columns = strings.Split(strings.ReplaceAll(columns[0], " ", ""), ",")
|
||||
}
|
||||
if len(columns) > 0 {
|
||||
m := make(bson.M)
|
||||
for _, column := range columns {
|
||||
m[column] = 1
|
||||
}
|
||||
receiver.findOpt.SetProjection(m)
|
||||
}
|
||||
return receiver
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Create(data *{tableName}) (*{tableName}, error) {
|
||||
{createdAt}if data.Id == "" {
|
||||
data.Id = primitive.NewObjectID().String()
|
||||
}
|
||||
_, err := receiver.collection.InsertOne(receiver.ctx, data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Updates(data map[string]interface{}) int64 {
|
||||
{updatedAt}res, err := receiver.collection.UpdateMany(receiver.ctx, receiver.query, bson.M{"$set": data})
|
||||
if err != nil {
|
||||
log.Error("MongoOrm Updates错误:" + err.Error())
|
||||
return 0
|
||||
}
|
||||
return res.ModifiedCount
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Update(key string, value interface{}) int64 {
|
||||
return receiver.Updates(map[string]interface{}{key: value})
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Delete() (int64, error) {
|
||||
if receiver.query == nil || len(receiver.query) == 0 {
|
||||
return 0, errors.New("MongoOrm Delete错误:删除条件不能为空")
|
||||
}
|
||||
res, err := receiver.collection.DeleteMany(receiver.ctx, receiver.query)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return res.DeletedCount, nil
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Limit(num int64) *Orm{tableName} {
|
||||
receiver.findOpt.SetLimit(num)
|
||||
return receiver
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Skin(num int64) *Orm{tableName} {
|
||||
receiver.findOpt.SetSkip(num)
|
||||
return receiver
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Order(order string) *Orm{tableName} {
|
||||
arr := strings.Split(order, ",")
|
||||
if len(arr) > 1 {
|
||||
panic("官方mongo驱动暂时不支持多字段排序")
|
||||
}
|
||||
m := make(bson.M)
|
||||
for _, item := range arr {
|
||||
item = strings.Trim(item, " ")
|
||||
strArr := strings.Split(item, " ")
|
||||
if len(strArr) > 1 && strings.ToLower(strArr[1]) == "desc" {
|
||||
m[strArr[0]] = -1
|
||||
} else {
|
||||
m[strArr[0]] = 1
|
||||
}
|
||||
}
|
||||
receiver.findOpt.SetSort(m)
|
||||
return receiver
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) OrderDesc(column string) *Orm{tableName} {
|
||||
receiver.findOpt.SetSort(bson.M{column: -1})
|
||||
return receiver
|
||||
}
|
||||
func (receiver *Orm{tableName}) Total() int64 {
|
||||
total, err := receiver.collection.CountDocuments(receiver.ctx, receiver.query)
|
||||
if err != nil {
|
||||
log.Error("MongoOrm Total错误:" + err.Error())
|
||||
return 0
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Get(columns ...string) []*{tableName} {
|
||||
if len(columns) > 0 {
|
||||
receiver.Select(columns...)
|
||||
}
|
||||
if receiver.findOpt.Limit == nil {
|
||||
receiver.Limit(1000)
|
||||
}
|
||||
cursor, err := receiver.Collection().Find(receiver.ctx, receiver.query, receiver.findOpt)
|
||||
if err != nil {
|
||||
log.Error("MongoOrm Get错误:" + err.Error())
|
||||
}
|
||||
var data []*{tableName}
|
||||
err = cursor.All(receiver.ctx, &data)
|
||||
if err != nil {
|
||||
log.Error("MongoOrm Get错误:" + err.Error())
|
||||
}
|
||||
defer cursor.Close(receiver.ctx)
|
||||
return data
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) First(columns ...string) *{tableName} {
|
||||
if len(columns) > 0 {
|
||||
receiver.Select(columns...)
|
||||
}
|
||||
opt := &options.FindOneOptions{
|
||||
Projection: receiver.findOpt.Projection,
|
||||
Sort: receiver.findOpt.Sort,
|
||||
}
|
||||
if opt.Sort != nil {
|
||||
opt.Sort = bson.M{"_id": 1}
|
||||
}
|
||||
var data *{tableName}
|
||||
err := receiver.Collection().FindOne(receiver.ctx, receiver.query, opt).Decode(&data)
|
||||
if err != nil {
|
||||
log.Error("MongoOrm First错误:" + err.Error())
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Paginate(page int64, pageSize int64) ([]*{tableName}, int64) {
|
||||
total := receiver.Total()
|
||||
if total > 0 {
|
||||
return receiver.SimplePaginate(page, pageSize), total
|
||||
}
|
||||
return nil, 0
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) SimplePaginate(page int64, pageSize int64) []*{tableName} {
|
||||
receiver.Limit(pageSize)
|
||||
if page == 0 {
|
||||
page = 1
|
||||
}
|
||||
if page > 1 {
|
||||
receiver.Skin((page - 1) * pageSize)
|
||||
}
|
||||
return receiver.Get()
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Increment(column string, amount ...int) int64 {
|
||||
num := 1
|
||||
if len(amount) > 0 {
|
||||
num = amount[0]
|
||||
}
|
||||
return receiver.Update("$inc", bson.M{column: num})
|
||||
}
|
||||
|
||||
func (receiver *Orm{tableName}) Decrement(column string, amount ...int) int64 {
|
||||
num := -1
|
||||
if len(amount) > 0 {
|
||||
num = -amount[0]
|
||||
}
|
||||
return receiver.Update("$inc", bson.M{column: num})
|
||||
}
|
||||
|
||||
{where}
|
||||
@@ -9,6 +9,7 @@ var _BeanCommandSingle *BeanCommand
|
||||
var _CurdCommandSingle *CurdCommand
|
||||
var _DevCommandSingle *DevCommand
|
||||
var _JsSingle *Js
|
||||
var _MongoCommandSingle *MongoCommand
|
||||
var _OrmCommandSingle *OrmCommand
|
||||
var _ProtocCommandSingle *ProtocCommand
|
||||
var _RouteCommandSingle *RouteCommand
|
||||
@@ -20,6 +21,7 @@ func GetAllProvider() []interface{} {
|
||||
NewCurdCommand(),
|
||||
NewDevCommand(),
|
||||
NewJs(),
|
||||
NewMongoCommand(),
|
||||
NewOrmCommand(),
|
||||
NewProtocCommand(),
|
||||
NewRouteCommand(),
|
||||
@@ -55,6 +57,13 @@ func NewJs() *Js {
|
||||
}
|
||||
return _JsSingle
|
||||
}
|
||||
func NewMongoCommand() *MongoCommand {
|
||||
if _MongoCommandSingle == nil {
|
||||
_MongoCommandSingle = &MongoCommand{}
|
||||
providers.AfterProvider(_MongoCommandSingle, "")
|
||||
}
|
||||
return _MongoCommandSingle
|
||||
}
|
||||
func NewOrmCommand() *OrmCommand {
|
||||
if _OrmCommandSingle == nil {
|
||||
_OrmCommandSingle = &OrmCommand{}
|
||||
|
||||
8
go.mod
8
go.mod
@@ -4,7 +4,7 @@ go 1.16
|
||||
|
||||
require (
|
||||
github.com/ctfang/command v1.0.1
|
||||
github.com/go-home-admin/home v0.0.3
|
||||
github.com/go-home-admin/home v0.3.6
|
||||
github.com/go-sql-driver/mysql v1.6.0
|
||||
github.com/joho/godotenv v1.4.0
|
||||
github.com/lib/pq v1.10.6
|
||||
@@ -15,7 +15,11 @@ require (
|
||||
require (
|
||||
github.com/gin-gonic/gin v1.8.0 // indirect
|
||||
github.com/go-playground/validator/v10 v10.11.0 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
|
||||
github.com/go-redis/redis/v8 v8.11.5 // indirect
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
go.mongodb.org/mongo-driver v1.10.1
|
||||
golang.org/x/net v0.0.0-20220531201128-c960675eff93 // indirect
|
||||
google.golang.org/protobuf v1.28.0
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
|
||||
gorm.io/driver/mysql v1.3.4 // indirect
|
||||
)
|
||||
|
||||
50
go.sum
50
go.sum
@@ -1,3 +1,4 @@
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
|
||||
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
@@ -19,8 +20,8 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
|
||||
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
|
||||
github.com/gin-gonic/gin v1.8.0 h1:4WFH5yycBMA3za5Hnl425yd9ymdw1XPm4666oab+hv4=
|
||||
github.com/gin-gonic/gin v1.8.0/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
|
||||
github.com/go-home-admin/home v0.0.3 h1:ioBzk1jDna7mIbDtBafYrqQubSEStvELIN2b7YUNS2g=
|
||||
github.com/go-home-admin/home v0.0.3/go.mod h1:jT6EDGpkTBWfLOt14W2Gg462sqn1sleQknFYQAVb4Ro=
|
||||
github.com/go-home-admin/home v0.3.6 h1:tk56T1DgdqTWcuOdT07N/SLojrAW5BhqSC02kdlNiVI=
|
||||
github.com/go-home-admin/home v0.3.6/go.mod h1:51swp6MVnaZVT1ZfZlSWMGGTT7zuqI7NMd0mX6EEenw=
|
||||
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||
@@ -34,6 +35,7 @@ github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXS
|
||||
github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
|
||||
github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw=
|
||||
github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
|
||||
github.com/go-redis/redis/v8 v8.11.0/go.mod h1:DLomh7y2e3ggQXQLd1YgmvIfecPJoFl7WU5SOQ/r06M=
|
||||
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-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
|
||||
@@ -51,9 +53,12 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
@@ -68,9 +73,13 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
|
||||
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg=
|
||||
github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
|
||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
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/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
||||
@@ -82,6 +91,12 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
|
||||
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
|
||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
|
||||
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
|
||||
github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
|
||||
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
|
||||
github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs=
|
||||
github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
@@ -93,23 +108,29 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
|
||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
|
||||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
||||
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
||||
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
||||
github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
|
||||
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
|
||||
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
||||
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
||||
github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
|
||||
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
|
||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
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/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
@@ -129,27 +150,39 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
|
||||
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
|
||||
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
|
||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||
github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
|
||||
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
|
||||
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
||||
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||
github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
|
||||
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
|
||||
github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
|
||||
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
|
||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
|
||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
go.mongodb.org/mongo-driver v1.10.1 h1:NujsPveKwHaWuKUer/ceo9DzEe7HIj1SlJ6uvXZG0S4=
|
||||
go.mongodb.org/mongo-driver v1.10.1/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
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-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM=
|
||||
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
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-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
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-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
@@ -158,6 +191,8 @@ golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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=
|
||||
@@ -212,6 +247,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
@@ -221,8 +258,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
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-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gorm.io/driver/mysql v1.3.2/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U=
|
||||
gorm.io/driver/mysql v1.3.4 h1:/KoBMgsUHC3bExsekDcmNYaBnfH2WNeFuXqqrqMc98Q=
|
||||
gorm.io/driver/mysql v1.3.4/go.mod h1:s4Tq0KmD0yhPGHbZEwg1VPlH0vT/GBHJZorPzhcxBUE=
|
||||
|
||||
Reference in New Issue
Block a user