Skip to content

Commit e8e6051

Browse files
committed
feature: Queue system
1 parent 4149f45 commit e8e6051

File tree

11 files changed

+342
-41
lines changed

11 files changed

+342
-41
lines changed

app/handlers/extension.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ func ExtensionLogger(c *fiber.Ctx) error {
133133
"request_details", formData,
134134
)
135135

136-
// TODO: complete and handle mail_tags at the end
137136
return c.Type("json").SendString(`{
138137
"status": 200,
139138
"message": "log added successfully"

app/handlers/file.go

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/gofiber/fiber/v2"
88
"github.com/limanmys/render-engine/app/models"
99
"github.com/limanmys/render-engine/internal/bridge"
10+
"github.com/limanmys/render-engine/internal/file"
1011
"github.com/limanmys/render-engine/internal/liman"
1112
"github.com/limanmys/render-engine/internal/sandbox"
1213
"github.com/limanmys/render-engine/pkg/helpers"
@@ -23,37 +24,12 @@ func PutFile(c *fiber.Ctx) error {
2324
}
2425
}
2526

26-
server, err := liman.GetServer(&models.Server{ID: c.FormValue("server_id")})
27-
if err != nil {
28-
return err
29-
}
30-
31-
session, err := bridge.GetSession(
32-
c.Locals("user_id").(string),
33-
server.ID,
34-
server.IPAddress,
35-
)
36-
if err != nil {
37-
return err
38-
}
39-
40-
established := session.CreateFileConnection(
27+
_, err := file.PutFileHandler(
4128
c.Locals("user_id").(string),
42-
server.ID,
43-
server.IPAddress,
29+
c.FormValue("server_id"),
30+
c.FormValue("remote_path"),
31+
c.FormValue("local_path"),
4432
)
45-
if !established {
46-
return logger.FiberError(fiber.StatusServiceUnavailable, "cannot establish file connection")
47-
}
48-
49-
remotePath := ""
50-
if server.Os == "linux" {
51-
remotePath = "/tmp/" + filepath.Base(c.FormValue("remote_path"))
52-
} else {
53-
remotePath = session.WindowsPath + c.FormValue("remote_path")
54-
}
55-
56-
err = session.Put(c.FormValue("local_path"), remotePath)
5733
if err != nil {
5834
return err
5935
}

app/handlers/queue.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package handlers
2+
3+
import (
4+
"github.com/gofiber/fiber/v2"
5+
"github.com/limanmys/render-engine/app/models"
6+
"github.com/limanmys/render-engine/internal/database"
7+
"github.com/limanmys/render-engine/internal/liman"
8+
"github.com/limanmys/render-engine/internal/process_queue"
9+
"github.com/limanmys/render-engine/pkg/logger"
10+
"gorm.io/gorm"
11+
)
12+
13+
type QueueHandler struct {
14+
db *gorm.DB
15+
}
16+
17+
func NewQueueHandler() *QueueHandler {
18+
return &QueueHandler{
19+
db: database.Connection(),
20+
}
21+
}
22+
23+
func (h *QueueHandler) Create(c *fiber.Ctx) error {
24+
queue := &models.Queue{}
25+
if err := c.BodyParser(&queue); err != nil {
26+
return err
27+
}
28+
29+
if queue.Data["server_id"] == nil {
30+
return c.Status(422).JSON(fiber.Map{
31+
"server_id": "server id is required",
32+
})
33+
}
34+
35+
// Check if user is eligible to use this server
36+
user, _ := liman.GetUser(&models.User{ID: c.Locals("user_id").(string)})
37+
if user.Status == 0 {
38+
var count int64
39+
h.db.Model(&models.Permission{}).Find(&models.Permission{
40+
MorphID: c.Locals("user_id").(string),
41+
Type: "server",
42+
Value: queue.Data["server_id"].(string),
43+
}).Count(&count)
44+
45+
if count < 1 {
46+
return logger.FiberError(fiber.StatusForbidden, "you are not allowed to use this server")
47+
}
48+
}
49+
50+
// Create queue object
51+
if err := h.db.Create(queue).Error; err != nil {
52+
return err
53+
}
54+
55+
// Start processing by type
56+
var processor process_queue.ProcessQueue
57+
switch queue.Type {
58+
case models.OperationInstall:
59+
processor = &process_queue.InstallPackage{
60+
Queue: queue,
61+
DB: h.db,
62+
UserID: c.Locals("user_id").(string),
63+
}
64+
go processor.Process()
65+
}
66+
67+
return c.JSON(queue)
68+
}

app/middleware/auth/new.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,18 @@ func authorization(c *fiber.Ctx) error {
4141
return c.Next()
4242
}
4343

44+
if len(string(c.Request().Header.Peek("Authorization"))) > 0 {
45+
user, err := liman.AuthWithToken(
46+
strings.Trim(string(c.Request().Header.Peek("Authorization")), ""),
47+
)
48+
49+
if err != nil {
50+
return logger.FiberError(fiber.StatusUnauthorized, err.Error())
51+
}
52+
53+
c.Locals("user_id", user)
54+
return c.Next()
55+
}
56+
4457
return logger.FiberError(fiber.StatusUnauthorized, "authorization token is missing")
4558
}

app/models/queue.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package models
2+
3+
import (
4+
"time"
5+
6+
gormjsonb "github.com/dariubs/gorm-jsonb"
7+
"github.com/google/uuid"
8+
"github.com/limanmys/render-engine/internal/database"
9+
"gorm.io/gorm"
10+
)
11+
12+
type Operation string
13+
type Status string
14+
15+
const (
16+
OperationCreate Operation = "create"
17+
OperationUpdate Operation = "update"
18+
OperationInstall Operation = "install"
19+
20+
StatusPending Status = "pending"
21+
StatusProcessing Status = "processing"
22+
StatusDone Status = "done"
23+
StatusFailed Status = "failed"
24+
)
25+
26+
// Queue structure of Queue object
27+
type Queue struct {
28+
ID string `json:"id"`
29+
Type Operation `json:"type"`
30+
Status Status `json:"status"`
31+
Data gormjsonb.JSONB `json:"data" gorm:"type:jsonb;index,type:gin"`
32+
Error string `json:"error"`
33+
CreatedAt time.Time `json:"created_at"`
34+
UpdatedAt time.Time `json:"updated_at"`
35+
}
36+
37+
func (Queue) TableName() string {
38+
return "queue"
39+
}
40+
41+
// Fill ID of Queue object with UUID beforeCreate
42+
func (q *Queue) BeforeCreate(tx *gorm.DB) (err error) {
43+
q.ID = uuid.New().String()
44+
q.Status = StatusPending
45+
q.CreatedAt = time.Now()
46+
q.UpdatedAt = time.Now()
47+
return
48+
}
49+
50+
func (q *Queue) BeforeUpdate(tx *gorm.DB) (err error) {
51+
q.UpdatedAt = time.Now()
52+
return
53+
}
54+
55+
func (q *Queue) UpdateStatus(status Status) {
56+
q.Status = status
57+
database.Connection().Model(q).Save(q)
58+
}
59+
60+
func (q *Queue) UpdateError(err string) {
61+
q.Error = err
62+
q.Status = StatusFailed
63+
database.Connection().Model(q).Save(q)
64+
}

app/routes/index.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func Install(app *fiber.App) {
3333
// extensionDb
3434
app.Post("/setExtensionDb", handlers.SetExtensionDb)
3535

36-
// logger: deprecate on liman v2
36+
// logger
3737
app.Post("/sendLog", handlers.ExtensionLogger)
3838

3939
// background job
@@ -44,4 +44,8 @@ func Install(app *fiber.App) {
4444

4545
// metrics
4646
app.Get("/metrics", monitor.New())
47+
48+
// queue handler
49+
queueHandler := handlers.NewQueueHandler()
50+
app.Post("/queue", queueHandler.Create)
4751
}

go.mod

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ go 1.19
44

55
require (
66
github.com/Nerzal/gocloak/v13 v13.8.0
7-
github.com/go-resty/resty/v2 v2.9.1
8-
github.com/gofiber/fiber/v2 v2.49.2
7+
github.com/go-resty/resty/v2 v2.10.0
8+
github.com/gofiber/fiber/v2 v2.50.0
99
github.com/gofiber/helmet/v2 v2.2.26
10-
github.com/google/uuid v1.3.1
10+
github.com/google/uuid v1.4.0
1111
github.com/joho/godotenv v1.5.1
1212
go.uber.org/zap v1.26.0
13-
gorm.io/driver/mysql v1.5.1
14-
gorm.io/driver/postgres v1.5.2
15-
gorm.io/gorm v1.25.4
13+
gorm.io/driver/mysql v1.5.2
14+
gorm.io/driver/postgres v1.5.4
15+
gorm.io/gorm v1.25.5
1616
)
1717

1818
require (
@@ -33,7 +33,7 @@ require (
3333
github.com/kr/fs v0.1.0 // indirect
3434
github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 // indirect
3535
github.com/mattn/go-colorable v0.1.13 // indirect
36-
github.com/mattn/go-isatty v0.0.19 // indirect
36+
github.com/mattn/go-isatty v0.0.20 // indirect
3737
github.com/mattn/go-runewidth v0.0.15 // indirect
3838
github.com/opentracing/opentracing-go v1.2.0 // indirect
3939
github.com/philhofer/fwd v1.1.2 // indirect
@@ -47,21 +47,22 @@ require (
4747
go.uber.org/atomic v1.11.0 // indirect
4848
go.uber.org/goleak v1.2.0 // indirect
4949
go.uber.org/multierr v1.11.0 // indirect
50-
golang.org/x/net v0.16.0 // indirect
50+
golang.org/x/net v0.17.0 // indirect
5151
)
5252

5353
require (
5454
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
5555
github.com/alessio/shellescape v1.4.2
56-
github.com/andybalholm/brotli v1.0.5 // indirect
56+
github.com/andybalholm/brotli v1.0.6 // indirect
5757
github.com/avast/retry-go v3.0.0+incompatible
58+
github.com/dariubs/gorm-jsonb v0.1.5
5859
github.com/go-sql-driver/mysql v1.7.1 // indirect
5960
github.com/hirochachacha/go-smb2 v1.1.0
6061
github.com/jackc/pgpassfile v1.0.0 // indirect
6162
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
6263
github.com/jinzhu/inflection v1.0.0 // indirect
6364
github.com/jinzhu/now v1.1.5 // indirect
64-
github.com/klauspost/compress v1.17.0 // indirect
65+
github.com/klauspost/compress v1.17.2 // indirect
6566
github.com/masterzen/winrm v0.0.0-20230926183142-a7fbe840deba
6667
github.com/mervick/aes-everywhere/go/aes256 v0.0.0-20220903070135-f13ed3789ae1
6768
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5

go.sum

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ github.com/alessio/shellescape v1.4.2 h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4u
1515
github.com/alessio/shellescape v1.4.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
1616
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
1717
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
18+
github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI=
19+
github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
1820
github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0=
1921
github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
2022
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
2123
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
24+
github.com/dariubs/gorm-jsonb v0.1.5 h1:0sc6pBQ0V1i3MqIos3SiQjRxtzs3pTnAZaAtb+SFM20=
25+
github.com/dariubs/gorm-jsonb v0.1.5/go.mod h1:e6GXwMviS3e9QxADNOWWZq0WBTdxpK2SoYOExMUfRoM=
2226
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2327
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2428
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -28,13 +32,17 @@ github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPr
2832
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
2933
github.com/go-resty/resty/v2 v2.9.1 h1:PIgGx4VrHvag0juCJ4dDv3MiFRlDmP0vicBucwf+gLM=
3034
github.com/go-resty/resty/v2 v2.9.1/go.mod h1:4/GYJVjh9nhkhGR6AUNW3XhpDYNUr+Uvy9gV/VGZIy4=
35+
github.com/go-resty/resty/v2 v2.10.0 h1:Qla4W/+TMmv0fOeeRqzEpXPLfTUnR5HZ1+lGs+CkiCo=
36+
github.com/go-resty/resty/v2 v2.10.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
3137
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
3238
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
3339
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
3440
github.com/gofiber/fiber/v2 v2.46.0 h1:wkkWotblsGVlLjXj2dpgKQAYHtXumsK/HyFugQM68Ns=
3541
github.com/gofiber/fiber/v2 v2.46.0/go.mod h1:DNl0/c37WLe0g92U6lx1VMQuxGUQY5V7EIaVoEsUffc=
3642
github.com/gofiber/fiber/v2 v2.49.2 h1:ONEN3/Vc+dUCxxDgZZwpqvhISgHqb+bu+isBiEyKEQs=
3743
github.com/gofiber/fiber/v2 v2.49.2/go.mod h1:gNsKnyrmfEWFpJxQAV0qvW6l70K1dZGno12oLtukcts=
44+
github.com/gofiber/fiber/v2 v2.50.0 h1:ia0JaB+uw3GpNSCR5nvC5dsaxXjRU5OEu36aytx+zGw=
45+
github.com/gofiber/fiber/v2 v2.50.0/go.mod h1:21eytvay9Is7S6z+OgPi7c7n4++tnClWmhpimVHMimw=
3846
github.com/gofiber/helmet/v2 v2.2.26 h1:KreQVUpCIGppPQ6Yt8qQMaIR4fVXMnvBdsda0dJSsO8=
3947
github.com/gofiber/helmet/v2 v2.2.26/go.mod h1:XE0DF4cgf0M5xIt7qyAK5zOi8jJblhxfSDv9DAmEEQo=
4048
github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
@@ -48,6 +56,8 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
4856
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
4957
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
5058
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
59+
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
60+
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
5161
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
5262
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
5363
github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=
@@ -89,6 +99,8 @@ github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/d
8999
github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
90100
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
91101
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
102+
github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
103+
github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
92104
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
93105
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
94106
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -108,6 +120,8 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
108120
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
109121
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
110122
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
123+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
124+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
111125
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
112126
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
113127
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
@@ -219,6 +233,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
219233
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
220234
golang.org/x/net v0.16.0 h1:7eBu7KsSvFDtSXUIDbh3aqlK4DPsZ1rByC8PFfBThos=
221235
golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
236+
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
237+
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
222238
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
223239
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
224240
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -254,6 +270,7 @@ golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
254270
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
255271
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
256272
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
273+
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
257274
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
258275
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
259276
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -266,6 +283,7 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
266283
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
267284
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
268285
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
286+
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
269287
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
270288
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
271289
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -288,9 +306,16 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
288306
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
289307
gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw=
290308
gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o=
309+
gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs=
310+
gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8=
291311
gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0=
292312
gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8=
313+
gorm.io/driver/postgres v1.5.4 h1:Iyrp9Meh3GmbSuyIAGyjkN+n9K+GHX9b9MqsTL4EJCo=
314+
gorm.io/driver/postgres v1.5.4/go.mod h1:Bgo89+h0CRcdA33Y6frlaHHVuTdOf87pmyzwW9C/BH0=
293315
gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64=
294316
gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
317+
gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
295318
gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw=
296319
gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
320+
gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
321+
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=

0 commit comments

Comments
 (0)