use pgx over lib/pq

This commit is contained in:
nochill 2024-02-06 11:55:25 +07:00
parent 2f05a2f8e7
commit a85f2ed7c3
42 changed files with 483 additions and 461 deletions

View File

@ -11,6 +11,7 @@ import (
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
"git.nochill.in/nochill/hiling_go/util" "git.nochill.in/nochill/hiling_go/util"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/jackc/pgx/v5/pgtype"
ysqlc "github.com/yiplee/sqlc" ysqlc "github.com/yiplee/sqlc"
) )
@ -62,7 +63,7 @@ func (server *Server) createLocation(ctx *gin.Context) {
RegencyID: req.RegencyID, RegencyID: req.RegencyID,
IsDeleted: false, IsDeleted: false,
ApprovedBy: sql.NullInt32{Int32: 0, Valid: false}, ApprovedBy: sql.NullInt32{Int32: 0, Valid: false},
GoogleMapsLink: sql.NullString{Valid: len(req.GoogleMapsLink) > 0, String: req.GoogleMapsLink}, GoogleMapsLink: pgtype.Text{Valid: len(req.GoogleMapsLink) > 0, String: req.GoogleMapsLink},
Thumbnail: tempImg, Thumbnail: tempImg,
} }

View File

@ -1,11 +1,11 @@
package api package api
import ( import (
"database/sql"
"net/http" "net/http"
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/jackc/pgx/v5/pgtype"
) )
type CreateNewsEventsReq struct { type CreateNewsEventsReq struct {
@ -27,7 +27,7 @@ func (server *Server) createNews(ctx *gin.Context) {
Title: req.Title, Title: req.Title,
Url: req.Url, Url: req.Url,
Source: req.Source, Source: req.Source,
Description: sql.NullString{Valid: len(req.Description) > 0, String: req.Description}, Description: pgtype.Text{Valid: len(req.Description) > 0, String: req.Description},
SubmittedBy: req.SubmittedBy, SubmittedBy: req.SubmittedBy,
}) })

View File

@ -2,7 +2,6 @@ package api_test
import ( import (
"bytes" "bytes"
"database/sql"
"fmt" "fmt"
"mime/multipart" "mime/multipart"
"net/http" "net/http"
@ -13,6 +12,7 @@ import (
mockdb "git.nochill.in/nochill/hiling_go/db/mock" mockdb "git.nochill.in/nochill/hiling_go/db/mock"
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
"git.nochill.in/nochill/hiling_go/util" "git.nochill.in/nochill/hiling_go/util"
"github.com/jackc/pgx/v5/pgtype"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.uber.org/mock/gomock" "go.uber.org/mock/gomock"
) )
@ -70,7 +70,7 @@ func TestCreateLocationAPI(t *testing.T) {
Name: util.RandomString(10), Name: util.RandomString(10),
SubmittedBy: 1, SubmittedBy: 1,
RegencyID: 1305, RegencyID: 1305,
GoogleMapsLink: sql.NullString{Valid: true, String: util.RandomString(10)}, GoogleMapsLink: pgtype.Text{Valid: true, String: util.RandomString(10)},
} }
testCases := []struct { testCases := []struct {
@ -152,15 +152,15 @@ func randomLocation() db.Location {
ID: int32(util.RandomInt(1, 20)), ID: int32(util.RandomInt(1, 20)),
Address: util.RandomString(10), Address: util.RandomString(10),
Name: util.RandomString(10), Name: util.RandomString(10),
GoogleMapsLink: sql.NullString{Valid: true, String: util.RandomString(20)}, GoogleMapsLink: pgtype.Text{Valid: true, String: util.RandomString(20)},
SubmittedBy: 1, SubmittedBy: 1,
TotalVisited: sql.NullInt32{Valid: true, Int32: int32(util.RandomInt(0, 32))}, TotalVisited: pgtype.Int4{Valid: true, Int32: int32(util.RandomInt(0, 32))},
Thumbnail: sql.NullString{Valid: false, String: ""}, Thumbnail: pgtype.Text{Valid: false, String: ""},
RegencyID: 1305, RegencyID: 1305,
IsDeleted: false, IsDeleted: false,
CreatedAt: sql.NullTime{Valid: true, Time: time.Now()}, CreatedAt: pgtype.Timestamp{Valid: true, Time: time.Now()},
UpdatedAt: sql.NullTime{Valid: true, Time: time.Now()}, UpdatedAt: pgtype.Timestamp{Valid: true, Time: time.Now()},
ApprovedBy: sql.NullInt32{Valid: true, Int32: 1}, ApprovedBy: pgtype.Int4{Valid: true, Int32: 1},
ApprovedAt: sql.NullTime{Valid: true, Time: time.Now()}, ApprovedAt: pgtype.Timestamp{Valid: true, Time: time.Now()},
} }
} }

View File

@ -9,7 +9,6 @@ import (
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
"git.nochill.in/nochill/hiling_go/util" "git.nochill.in/nochill/hiling_go/util"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
_ "github.com/lib/pq"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )

View File

@ -13,8 +13,7 @@ import (
"git.nochill.in/nochill/hiling_go/util" "git.nochill.in/nochill/hiling_go/util"
"git.nochill.in/nochill/hiling_go/util/token" "git.nochill.in/nochill/hiling_go/util/token"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/lib/pq" "github.com/jackc/pgx/v5/pgtype"
"github.com/sqlc-dev/pqtype"
) )
type createUserRequest struct { type createUserRequest struct {
@ -59,12 +58,8 @@ func (server *Server) createUser(ctx *gin.Context) {
user, err := server.Store.CreateUser(ctx, arg) user, err := server.Store.CreateUser(ctx, arg)
if err != nil { if err != nil {
if pqErr, ok := err.(*pq.Error); ok { if db.ErrorCode(err) == db.UniqueViolation {
switch pqErr.Code.Name() { ctx.JSON(http.StatusConflict, ErrorResponse(err, "Username already used"))
case "foreign_key_violation", "unique_violation":
ctx.JSON(http.StatusConflict, ErrorResponse(err, "Username already used"))
return
}
} }
ctx.JSON(http.StatusInternalServerError, ErrorResponse(err, "Something went wrong")) ctx.JSON(http.StatusInternalServerError, ErrorResponse(err, "Something went wrong"))
@ -82,19 +77,19 @@ func (server *Server) createUser(ctx *gin.Context) {
return return
} }
// refreshToken, refreshTokenPayload, err := server.TokenMaker.CreateToken( refreshToken, refreshTokenPayload, err := server.TokenMaker.CreateToken(
// user.Username, user.Username,
// int(user.ID), int(user.ID),
// server.Config.RefreshTokenDuration, server.Config.RefreshTokenDuration,
// ) )
_, err = server.Store.CreateSession(ctx, db.CreateSessionParams{ _, err = server.Store.CreateSession(ctx, db.CreateSessionParams{
Username: user.Username, Username: user.Username,
// RefreshToken: refreshToken, RefreshToken: refreshToken,
UserAgent: ctx.Request.UserAgent(), UserAgent: ctx.Request.UserAgent(),
ClientIp: ctx.ClientIP(), ClientIp: ctx.ClientIP(),
IsBlocked: false, IsBlocked: false,
// ExpiresAt: refreshTokenPayload.ExpiredAt, ExpiresAt: pgtype.Timestamp{Valid: true, Time: refreshTokenPayload.ExpiredAt},
}) })
if err != nil { if err != nil {
@ -166,9 +161,9 @@ func (server *Server) getUserStats(ctx *gin.Context) {
} }
type UpdateUserRequest struct { type UpdateUserRequest struct {
About string `json:"about"` About string `json:"about"`
Website string `json:"website"` Website string `json:"website"`
SocialMedia []map[string]string `json:"social_media"` SocialMedia []map[string]any `json:"social_media"`
} }
func (server *Server) updateUser(ctx *gin.Context) { func (server *Server) updateUser(ctx *gin.Context) {
@ -183,15 +178,9 @@ func (server *Server) updateUser(ctx *gin.Context) {
fmt.Println(req.About) fmt.Println(req.About)
social, _ := json.Marshal(req.SocialMedia)
socialArr := pqtype.NullRawMessage{
RawMessage: social,
Valid: len(req.SocialMedia) > 0,
}
user, err := server.Store.UpdateUser(ctx, db.UpdateUserParams{ user, err := server.Store.UpdateUser(ctx, db.UpdateUserParams{
About: sql.NullString{String: req.About, Valid: true}, About: sql.NullString{String: req.About, Valid: true},
SocialMedia: socialArr, SocialMedia: req.SocialMedia,
Website: sql.NullString{String: req.Website, Valid: len(req.Website) > 0}, Website: sql.NullString{String: req.Website, Valid: len(req.Website) > 0},
ID: int32(authPayload.UserID), ID: int32(authPayload.UserID),
}) })
@ -231,7 +220,7 @@ func (server *Server) updateUserAvatar(ctx *gin.Context) {
url, err := server.Store.UpdateAvatar(ctx, db.UpdateAvatarParams{ url, err := server.Store.UpdateAvatar(ctx, db.UpdateAvatarParams{
ID: int32(authPayload.UserID), ID: int32(authPayload.UserID),
AvatarPicture: sql.NullString{Valid: true, String: imgPath}, AvatarPicture: pgtype.Text{Valid: true, String: imgPath},
}) })
if err != nil { if err != nil {
@ -246,7 +235,7 @@ func (server *Server) removeAvatar(ctx *gin.Context) {
authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload) authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
_, err := server.Store.UpdateAvatar(ctx, db.UpdateAvatarParams{ _, err := server.Store.UpdateAvatar(ctx, db.UpdateAvatarParams{
AvatarPicture: sql.NullString{String: "", Valid: false}, AvatarPicture: pgtype.Text{String: "", Valid: false},
ID: int32(authPayload.UserID), ID: int32(authPayload.UserID),
}) })
@ -289,11 +278,19 @@ func (server *Server) login(ctx *gin.Context) {
return return
} }
refreshToken, refreshTokenPayload, err := server.TokenMaker.CreateToken(
user.Username,
int(user.ID),
server.Config.RefreshTokenDuration,
)
_, err = server.Store.CreateSession(ctx, db.CreateSessionParams{ _, err = server.Store.CreateSession(ctx, db.CreateSessionParams{
Username: user.Username, Username: user.Username,
UserAgent: ctx.Request.UserAgent(), UserAgent: ctx.Request.UserAgent(),
ClientIp: ctx.ClientIP(), ClientIp: ctx.ClientIP(),
IsBlocked: false, RefreshToken: refreshToken,
ExpiresAt: pgtype.Timestamp{Valid: true, Time: refreshTokenPayload.ExpiredAt},
IsBlocked: false,
}) })
if err != nil { if err != nil {

1
data.ms/VERSION Normal file
View File

@ -0,0 +1 @@
1.6.0

BIN
data.ms/auth/data.mdb Normal file

Binary file not shown.

BIN
data.ms/auth/lock.mdb Normal file

Binary file not shown.

1
data.ms/instance-uid Normal file
View File

@ -0,0 +1 @@
3db8a6fc-efe2-4e2e-a2ca-2de2e6914f2a

BIN
data.ms/tasks/data.mdb Normal file

Binary file not shown.

BIN
data.ms/tasks/lock.mdb Normal file

Binary file not shown.

View File

@ -1,15 +1,20 @@
// Code generated by MockGen. DO NOT EDIT. // Code generated by MockGen. DO NOT EDIT.
// Source: git.nochill.in/nochill/hiling_go/db/sqlc (interfaces: Store) // Source: git.nochill.in/nochill/hiling_go/db/sqlc (interfaces: Store)
//
// Generated by this command:
//
// mockgen -package mockdb -destination db/mock/store.go git.nochill.in/nochill/hiling_go/db/sqlc Store
//
// Package mockdb is a generated GoMock package. // Package mockdb is a generated GoMock package.
package mockdb package mockdb
import ( import (
context "context" context "context"
sql "database/sql"
reflect "reflect" reflect "reflect"
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
pgtype "github.com/jackc/pgx/v5/pgtype"
gomock "go.uber.org/mock/gomock" gomock "go.uber.org/mock/gomock"
) )
@ -45,7 +50,7 @@ func (m *MockStore) AddFollowUser(arg0 context.Context, arg1 db.AddFollowUserPar
} }
// AddFollowUser indicates an expected call of AddFollowUser. // AddFollowUser indicates an expected call of AddFollowUser.
func (mr *MockStoreMockRecorder) AddFollowUser(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) AddFollowUser(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddFollowUser", reflect.TypeOf((*MockStore)(nil).AddFollowUser), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddFollowUser", reflect.TypeOf((*MockStore)(nil).AddFollowUser), arg0, arg1)
} }
@ -60,7 +65,7 @@ func (m *MockStore) CheckIfReviewExists(arg0 context.Context, arg1 db.CheckIfRev
} }
// CheckIfReviewExists indicates an expected call of CheckIfReviewExists. // CheckIfReviewExists indicates an expected call of CheckIfReviewExists.
func (mr *MockStoreMockRecorder) CheckIfReviewExists(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CheckIfReviewExists(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckIfReviewExists", reflect.TypeOf((*MockStore)(nil).CheckIfReviewExists), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckIfReviewExists", reflect.TypeOf((*MockStore)(nil).CheckIfReviewExists), arg0, arg1)
} }
@ -74,7 +79,7 @@ func (m *MockStore) CreateImage(arg0 context.Context, arg1 []db.CreateImageParam
} }
// CreateImage indicates an expected call of CreateImage. // CreateImage indicates an expected call of CreateImage.
func (mr *MockStoreMockRecorder) CreateImage(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CreateImage(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateImage", reflect.TypeOf((*MockStore)(nil).CreateImage), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateImage", reflect.TypeOf((*MockStore)(nil).CreateImage), arg0, arg1)
} }
@ -89,7 +94,7 @@ func (m *MockStore) CreateLocation(arg0 context.Context, arg1 db.CreateLocationP
} }
// CreateLocation indicates an expected call of CreateLocation. // CreateLocation indicates an expected call of CreateLocation.
func (mr *MockStoreMockRecorder) CreateLocation(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CreateLocation(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateLocation", reflect.TypeOf((*MockStore)(nil).CreateLocation), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateLocation", reflect.TypeOf((*MockStore)(nil).CreateLocation), arg0, arg1)
} }
@ -103,7 +108,7 @@ func (m *MockStore) CreateLocationTx(arg0 context.Context, arg1 db.CreateLocatio
} }
// CreateLocationTx indicates an expected call of CreateLocationTx. // CreateLocationTx indicates an expected call of CreateLocationTx.
func (mr *MockStoreMockRecorder) CreateLocationTx(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CreateLocationTx(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateLocationTx", reflect.TypeOf((*MockStore)(nil).CreateLocationTx), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateLocationTx", reflect.TypeOf((*MockStore)(nil).CreateLocationTx), arg0, arg1)
} }
@ -117,7 +122,7 @@ func (m *MockStore) CreateNewsEvents(arg0 context.Context, arg1 db.CreateNewsEve
} }
// CreateNewsEvents indicates an expected call of CreateNewsEvents. // CreateNewsEvents indicates an expected call of CreateNewsEvents.
func (mr *MockStoreMockRecorder) CreateNewsEvents(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CreateNewsEvents(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateNewsEvents", reflect.TypeOf((*MockStore)(nil).CreateNewsEvents), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateNewsEvents", reflect.TypeOf((*MockStore)(nil).CreateNewsEvents), arg0, arg1)
} }
@ -132,7 +137,7 @@ func (m *MockStore) CreateReview(arg0 context.Context, arg1 db.CreateReviewParam
} }
// CreateReview indicates an expected call of CreateReview. // CreateReview indicates an expected call of CreateReview.
func (mr *MockStoreMockRecorder) CreateReview(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CreateReview(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateReview", reflect.TypeOf((*MockStore)(nil).CreateReview), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateReview", reflect.TypeOf((*MockStore)(nil).CreateReview), arg0, arg1)
} }
@ -147,7 +152,7 @@ func (m *MockStore) CreateSession(arg0 context.Context, arg1 db.CreateSessionPar
} }
// CreateSession indicates an expected call of CreateSession. // CreateSession indicates an expected call of CreateSession.
func (mr *MockStoreMockRecorder) CreateSession(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CreateSession(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSession", reflect.TypeOf((*MockStore)(nil).CreateSession), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSession", reflect.TypeOf((*MockStore)(nil).CreateSession), arg0, arg1)
} }
@ -162,7 +167,7 @@ func (m *MockStore) CreateUser(arg0 context.Context, arg1 db.CreateUserParams) (
} }
// CreateUser indicates an expected call of CreateUser. // CreateUser indicates an expected call of CreateUser.
func (mr *MockStoreMockRecorder) CreateUser(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) CreateUser(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateUser", reflect.TypeOf((*MockStore)(nil).CreateUser), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateUser", reflect.TypeOf((*MockStore)(nil).CreateUser), arg0, arg1)
} }
@ -177,7 +182,7 @@ func (m *MockStore) GetCountImageByLocation(arg0 context.Context, arg1 int32) (i
} }
// GetCountImageByLocation indicates an expected call of GetCountImageByLocation. // GetCountImageByLocation indicates an expected call of GetCountImageByLocation.
func (mr *MockStoreMockRecorder) GetCountImageByLocation(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetCountImageByLocation(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCountImageByLocation", reflect.TypeOf((*MockStore)(nil).GetCountImageByLocation), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCountImageByLocation", reflect.TypeOf((*MockStore)(nil).GetCountImageByLocation), arg0, arg1)
} }
@ -192,7 +197,7 @@ func (m *MockStore) GetImagesByLocation(arg0 context.Context, arg1 db.GetImagesB
} }
// GetImagesByLocation indicates an expected call of GetImagesByLocation. // GetImagesByLocation indicates an expected call of GetImagesByLocation.
func (mr *MockStoreMockRecorder) GetImagesByLocation(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetImagesByLocation(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetImagesByLocation", reflect.TypeOf((*MockStore)(nil).GetImagesByLocation), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetImagesByLocation", reflect.TypeOf((*MockStore)(nil).GetImagesByLocation), arg0, arg1)
} }
@ -207,7 +212,7 @@ func (m *MockStore) GetListLocationReviews(arg0 context.Context, arg1 db.GetList
} }
// GetListLocationReviews indicates an expected call of GetListLocationReviews. // GetListLocationReviews indicates an expected call of GetListLocationReviews.
func (mr *MockStoreMockRecorder) GetListLocationReviews(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetListLocationReviews(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListLocationReviews", reflect.TypeOf((*MockStore)(nil).GetListLocationReviews), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListLocationReviews", reflect.TypeOf((*MockStore)(nil).GetListLocationReviews), arg0, arg1)
} }
@ -222,7 +227,7 @@ func (m *MockStore) GetListLocations(arg0 context.Context) ([]db.Location, error
} }
// GetListLocations indicates an expected call of GetListLocations. // GetListLocations indicates an expected call of GetListLocations.
func (mr *MockStoreMockRecorder) GetListLocations(arg0 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetListLocations(arg0 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListLocations", reflect.TypeOf((*MockStore)(nil).GetListLocations), arg0) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListLocations", reflect.TypeOf((*MockStore)(nil).GetListLocations), arg0)
} }
@ -237,7 +242,7 @@ func (m *MockStore) GetListProvinces(arg0 context.Context) ([]db.GetListProvince
} }
// GetListProvinces indicates an expected call of GetListProvinces. // GetListProvinces indicates an expected call of GetListProvinces.
func (mr *MockStoreMockRecorder) GetListProvinces(arg0 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetListProvinces(arg0 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListProvinces", reflect.TypeOf((*MockStore)(nil).GetListProvinces), arg0) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListProvinces", reflect.TypeOf((*MockStore)(nil).GetListProvinces), arg0)
} }
@ -252,7 +257,7 @@ func (m *MockStore) GetListRecentLocationsWithRatings(arg0 context.Context, arg1
} }
// GetListRecentLocationsWithRatings indicates an expected call of GetListRecentLocationsWithRatings. // GetListRecentLocationsWithRatings indicates an expected call of GetListRecentLocationsWithRatings.
func (mr *MockStoreMockRecorder) GetListRecentLocationsWithRatings(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetListRecentLocationsWithRatings(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListRecentLocationsWithRatings", reflect.TypeOf((*MockStore)(nil).GetListRecentLocationsWithRatings), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListRecentLocationsWithRatings", reflect.TypeOf((*MockStore)(nil).GetListRecentLocationsWithRatings), arg0, arg1)
} }
@ -267,7 +272,7 @@ func (m *MockStore) GetListRegencies(arg0 context.Context) ([]db.GetListRegencie
} }
// GetListRegencies indicates an expected call of GetListRegencies. // GetListRegencies indicates an expected call of GetListRegencies.
func (mr *MockStoreMockRecorder) GetListRegencies(arg0 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetListRegencies(arg0 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListRegencies", reflect.TypeOf((*MockStore)(nil).GetListRegencies), arg0) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListRegencies", reflect.TypeOf((*MockStore)(nil).GetListRegencies), arg0)
} }
@ -282,7 +287,7 @@ func (m *MockStore) GetListRegions(arg0 context.Context) ([]db.GetListRegionsRow
} }
// GetListRegions indicates an expected call of GetListRegions. // GetListRegions indicates an expected call of GetListRegions.
func (mr *MockStoreMockRecorder) GetListRegions(arg0 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetListRegions(arg0 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListRegions", reflect.TypeOf((*MockStore)(nil).GetListRegions), arg0) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetListRegions", reflect.TypeOf((*MockStore)(nil).GetListRegions), arg0)
} }
@ -297,7 +302,7 @@ func (m *MockStore) GetLocation(arg0 context.Context, arg1 int32) (db.GetLocatio
} }
// GetLocation indicates an expected call of GetLocation. // GetLocation indicates an expected call of GetLocation.
func (mr *MockStoreMockRecorder) GetLocation(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetLocation(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetLocation", reflect.TypeOf((*MockStore)(nil).GetLocation), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetLocation", reflect.TypeOf((*MockStore)(nil).GetLocation), arg0, arg1)
} }
@ -312,7 +317,7 @@ func (m *MockStore) GetLocationTag(arg0 context.Context, arg1 int32) ([]string,
} }
// GetLocationTag indicates an expected call of GetLocationTag. // GetLocationTag indicates an expected call of GetLocationTag.
func (mr *MockStoreMockRecorder) GetLocationTag(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetLocationTag(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetLocationTag", reflect.TypeOf((*MockStore)(nil).GetLocationTag), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetLocationTag", reflect.TypeOf((*MockStore)(nil).GetLocationTag), arg0, arg1)
} }
@ -327,7 +332,7 @@ func (m *MockStore) GetNewsEventsList(arg0 context.Context, arg1 db.GetNewsEvent
} }
// GetNewsEventsList indicates an expected call of GetNewsEventsList. // GetNewsEventsList indicates an expected call of GetNewsEventsList.
func (mr *MockStoreMockRecorder) GetNewsEventsList(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetNewsEventsList(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNewsEventsList", reflect.TypeOf((*MockStore)(nil).GetNewsEventsList), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNewsEventsList", reflect.TypeOf((*MockStore)(nil).GetNewsEventsList), arg0, arg1)
} }
@ -342,7 +347,7 @@ func (m *MockStore) GetSession(arg0 context.Context, arg1 int32) (db.UserSession
} }
// GetSession indicates an expected call of GetSession. // GetSession indicates an expected call of GetSession.
func (mr *MockStoreMockRecorder) GetSession(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetSession(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSession", reflect.TypeOf((*MockStore)(nil).GetSession), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSession", reflect.TypeOf((*MockStore)(nil).GetSession), arg0, arg1)
} }
@ -357,7 +362,7 @@ func (m *MockStore) GetTopListLocations(arg0 context.Context, arg1 db.GetTopList
} }
// GetTopListLocations indicates an expected call of GetTopListLocations. // GetTopListLocations indicates an expected call of GetTopListLocations.
func (mr *MockStoreMockRecorder) GetTopListLocations(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetTopListLocations(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTopListLocations", reflect.TypeOf((*MockStore)(nil).GetTopListLocations), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTopListLocations", reflect.TypeOf((*MockStore)(nil).GetTopListLocations), arg0, arg1)
} }
@ -372,7 +377,7 @@ func (m *MockStore) GetUser(arg0 context.Context, arg1 string) (db.GetUserRow, e
} }
// GetUser indicates an expected call of GetUser. // GetUser indicates an expected call of GetUser.
func (mr *MockStoreMockRecorder) GetUser(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetUser(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUser", reflect.TypeOf((*MockStore)(nil).GetUser), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUser", reflect.TypeOf((*MockStore)(nil).GetUser), arg0, arg1)
} }
@ -387,7 +392,7 @@ func (m *MockStore) GetUserReviewByLocation(arg0 context.Context, arg1 db.GetUse
} }
// GetUserReviewByLocation indicates an expected call of GetUserReviewByLocation. // GetUserReviewByLocation indicates an expected call of GetUserReviewByLocation.
func (mr *MockStoreMockRecorder) GetUserReviewByLocation(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetUserReviewByLocation(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserReviewByLocation", reflect.TypeOf((*MockStore)(nil).GetUserReviewByLocation), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserReviewByLocation", reflect.TypeOf((*MockStore)(nil).GetUserReviewByLocation), arg0, arg1)
} }
@ -402,7 +407,7 @@ func (m *MockStore) GetUserStats(arg0 context.Context, arg1 int32) (db.GetUserSt
} }
// GetUserStats indicates an expected call of GetUserStats. // GetUserStats indicates an expected call of GetUserStats.
func (mr *MockStoreMockRecorder) GetUserStats(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) GetUserStats(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserStats", reflect.TypeOf((*MockStore)(nil).GetUserStats), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserStats", reflect.TypeOf((*MockStore)(nil).GetUserStats), arg0, arg1)
} }
@ -416,22 +421,22 @@ func (m *MockStore) RemoveFollowUser(arg0 context.Context, arg1 db.RemoveFollowU
} }
// RemoveFollowUser indicates an expected call of RemoveFollowUser. // RemoveFollowUser indicates an expected call of RemoveFollowUser.
func (mr *MockStoreMockRecorder) RemoveFollowUser(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) RemoveFollowUser(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveFollowUser", reflect.TypeOf((*MockStore)(nil).RemoveFollowUser), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveFollowUser", reflect.TypeOf((*MockStore)(nil).RemoveFollowUser), arg0, arg1)
} }
// UpdateAvatar mocks base method. // UpdateAvatar mocks base method.
func (m *MockStore) UpdateAvatar(arg0 context.Context, arg1 db.UpdateAvatarParams) (sql.NullString, error) { func (m *MockStore) UpdateAvatar(arg0 context.Context, arg1 db.UpdateAvatarParams) (pgtype.Text, error) {
m.ctrl.T.Helper() m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "UpdateAvatar", arg0, arg1) ret := m.ctrl.Call(m, "UpdateAvatar", arg0, arg1)
ret0, _ := ret[0].(sql.NullString) ret0, _ := ret[0].(pgtype.Text)
ret1, _ := ret[1].(error) ret1, _ := ret[1].(error)
return ret0, ret1 return ret0, ret1
} }
// UpdateAvatar indicates an expected call of UpdateAvatar. // UpdateAvatar indicates an expected call of UpdateAvatar.
func (mr *MockStoreMockRecorder) UpdateAvatar(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) UpdateAvatar(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAvatar", reflect.TypeOf((*MockStore)(nil).UpdateAvatar), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAvatar", reflect.TypeOf((*MockStore)(nil).UpdateAvatar), arg0, arg1)
} }
@ -445,7 +450,7 @@ func (m *MockStore) UpdateLocationThumbnail(arg0 context.Context, arg1 db.Update
} }
// UpdateLocationThumbnail indicates an expected call of UpdateLocationThumbnail. // UpdateLocationThumbnail indicates an expected call of UpdateLocationThumbnail.
func (mr *MockStoreMockRecorder) UpdateLocationThumbnail(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) UpdateLocationThumbnail(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateLocationThumbnail", reflect.TypeOf((*MockStore)(nil).UpdateLocationThumbnail), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateLocationThumbnail", reflect.TypeOf((*MockStore)(nil).UpdateLocationThumbnail), arg0, arg1)
} }
@ -459,7 +464,7 @@ func (m *MockStore) UpdatePassword(arg0 context.Context, arg1 db.UpdatePasswordP
} }
// UpdatePassword indicates an expected call of UpdatePassword. // UpdatePassword indicates an expected call of UpdatePassword.
func (mr *MockStoreMockRecorder) UpdatePassword(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) UpdatePassword(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePassword", reflect.TypeOf((*MockStore)(nil).UpdatePassword), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePassword", reflect.TypeOf((*MockStore)(nil).UpdatePassword), arg0, arg1)
} }
@ -474,7 +479,7 @@ func (m *MockStore) UpdateUser(arg0 context.Context, arg1 db.UpdateUserParams) (
} }
// UpdateUser indicates an expected call of UpdateUser. // UpdateUser indicates an expected call of UpdateUser.
func (mr *MockStoreMockRecorder) UpdateUser(arg0, arg1 interface{}) *gomock.Call { func (mr *MockStoreMockRecorder) UpdateUser(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper() mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateUser", reflect.TypeOf((*MockStore)(nil).UpdateUser), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateUser", reflect.TypeOf((*MockStore)(nil).UpdateUser), arg0, arg1)
} }

View File

@ -1,4 +1,4 @@
-- name: CreateNewsEvents :exec -- name: CreateNewsEvents :exec
INSERT INTO news_events( INSERT INTO news_events(
title, title,
url, url,

View File

@ -1,19 +1,20 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
package db package db
import ( import (
"context" "context"
"database/sql"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
) )
type DBTX interface { type DBTX interface {
ExecContext(context.Context, string, ...interface{}) (sql.Result, error) Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
PrepareContext(context.Context, string) (*sql.Stmt, error) Query(context.Context, string, ...interface{}) (pgx.Rows, error)
QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) QueryRow(context.Context, string, ...interface{}) pgx.Row
QueryRowContext(context.Context, string, ...interface{}) *sql.Row
} }
func New(db DBTX) *Queries { func New(db DBTX) *Queries {
@ -24,7 +25,7 @@ type Queries struct {
db DBTX db DBTX
} }
func (q *Queries) WithTx(tx *sql.Tx) *Queries { func (q *Queries) WithTx(tx pgx.Tx) *Queries {
return &Queries{ return &Queries{
db: tx, db: tx,
} }

27
db/sqlc/error.go Normal file
View File

@ -0,0 +1,27 @@
package db
import (
"errors"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
)
const (
ForeignKeyViolation = "23503"
UniqueViolation = "23505"
)
var ErrRecordNotFound = pgx.ErrNoRows
var ErrUniqueViolation = &pgconn.PgError{
Code: UniqueViolation,
}
func ErrorCode(err error) string {
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) {
return pgErr.Code
}
return ""
}

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: follow.sql // source: follow.sql
package db package db
@ -22,7 +22,7 @@ type AddFollowUserParams struct {
} }
func (q *Queries) AddFollowUser(ctx context.Context, arg AddFollowUserParams) error { func (q *Queries) AddFollowUser(ctx context.Context, arg AddFollowUserParams) error {
_, err := q.db.ExecContext(ctx, addFollowUser, arg.FollowerID, arg.FolloweeID) _, err := q.db.Exec(ctx, addFollowUser, arg.FollowerID, arg.FolloweeID)
return err return err
} }
@ -38,6 +38,6 @@ type RemoveFollowUserParams struct {
} }
func (q *Queries) RemoveFollowUser(ctx context.Context, arg RemoveFollowUserParams) error { func (q *Queries) RemoveFollowUser(ctx context.Context, arg RemoveFollowUserParams) error {
_, err := q.db.ExecContext(ctx, removeFollowUser, arg.FollowerID, arg.FolloweeID) _, err := q.db.Exec(ctx, removeFollowUser, arg.FollowerID, arg.FolloweeID)
return err return err
} }

View File

@ -35,7 +35,7 @@ OFFSET $3
` `
func (q *Queries) GetImagesByLocation(ctx context.Context, arg GetImagesByLocationParams) ([]GetImagesByLocationRow, error) { func (q *Queries) GetImagesByLocation(ctx context.Context, arg GetImagesByLocationParams) ([]GetImagesByLocationRow, error) {
rows, err := q.db.QueryContext(ctx, getImagesByLocationQ, arg.LocationId, arg.Limit, arg.Offset) rows, err := q.db.Query(ctx, getImagesByLocationQ, arg.LocationId, arg.Limit, arg.Offset)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -53,9 +53,7 @@ func (q *Queries) GetImagesByLocation(ctx context.Context, arg GetImagesByLocati
} }
items = append(items, i) items = append(items, i)
} }
if err := rows.Close(); err != nil { rows.Close()
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
@ -90,10 +88,10 @@ func (q *Queries) CreateImage(ctx context.Context, arg []CreateImageParams) erro
queryStr = util.ReplaceSQL(queryStr, "?") queryStr = util.ReplaceSQL(queryStr, "?")
// prepare the statement // prepare the statement
stmt, _ := q.db.PrepareContext(ctx, queryStr) _, err := q.db.Exec(ctx, queryStr)
// format all vals at once // format all vals at once
_, err := stmt.ExecContext(ctx, values...) // _, err := stmt.Ex(ctx, values...)
return err return err
} }

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: images.sql // source: images.sql
package db package db
@ -18,7 +18,7 @@ AND image_of = $1
` `
func (q *Queries) GetCountImageByLocation(ctx context.Context, imageOf int32) (int64, error) { func (q *Queries) GetCountImageByLocation(ctx context.Context, imageOf int32) (int64, error) {
row := q.db.QueryRowContext(ctx, getCountImageByLocation, imageOf) row := q.db.QueryRow(ctx, getCountImageByLocation, imageOf)
var count int64 var count int64
err := row.Scan(&count) err := row.Scan(&count)
return count, err return count, err

View File

@ -4,6 +4,8 @@ import (
"context" "context"
"database/sql" "database/sql"
"fmt" "fmt"
"github.com/jackc/pgx/v5/pgtype"
) )
type GetTopListLocationsParams struct { type GetTopListLocationsParams struct {
@ -71,7 +73,7 @@ func (q *Queries) GetTopListLocations(ctx context.Context, arg GetTopListLocatio
LIMIT $1 LIMIT $1
OFFSET $2;`, arg.OrderBy, regionType) OFFSET $2;`, arg.OrderBy, regionType)
rows, err := q.db.QueryContext(ctx, getTopListQ, arg.Limit, arg.Offset) rows, err := q.db.Query(ctx, getTopListQ, arg.Limit, arg.Offset)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -101,9 +103,7 @@ func (q *Queries) GetTopListLocations(ctx context.Context, arg GetTopListLocatio
i.TotalCount = i.UserCount + i.CriticCount i.TotalCount = i.UserCount + i.CriticCount
items = append(items, i) items = append(items, i)
} }
if err := rows.Close(); err != nil { rows.Close()
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }
@ -150,7 +150,7 @@ WHERE l.id = $1
` `
func (q *Queries) GetLocation(ctx context.Context, location_id int32) (GetLocationRow, error) { func (q *Queries) GetLocation(ctx context.Context, location_id int32) (GetLocationRow, error) {
row := q.db.QueryRowContext(ctx, getLocationQ, location_id) row := q.db.QueryRow(ctx, getLocationQ, location_id)
var i GetLocationRow var i GetLocationRow
err := row.Scan( err := row.Scan(
@ -189,18 +189,18 @@ RETURNING id
` `
type CreateLocationParams struct { type CreateLocationParams struct {
Address string `json:"address"` Address string `json:"address"`
Name string `json:"name"` Name string `json:"name"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
LocationType LocationType `json:"location_type"` LocationType LocationType `json:"location_type"`
RegencyID int16 `json:"regency_id"` RegencyID int16 `json:"regency_id"`
GoogleMapsLink sql.NullString `json:"google_maps_link"` GoogleMapsLink pgtype.Text `json:"google_maps_link"`
IsDeleted bool `json:"is_deleted"` IsDeleted bool `json:"is_deleted"`
ApprovedBy sql.NullInt32 `json:"approved_by"` ApprovedBy sql.NullInt32 `json:"approved_by"`
} }
func (q *Queries) CreateLocation(ctx context.Context, arg CreateLocationParams) (int32, error) { func (q *Queries) CreateLocation(ctx context.Context, arg CreateLocationParams) (int32, error) {
row := q.db.QueryRowContext(ctx, createLocation, row := q.db.QueryRow(ctx, createLocation,
arg.Address, arg.Address,
arg.Name, arg.Name,
arg.SubmittedBy, arg.SubmittedBy,

View File

@ -1,13 +1,14 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: locations.sql // source: locations.sql
package db package db
import ( import (
"context" "context"
"database/sql"
"github.com/jackc/pgx/v5/pgtype"
) )
const getListLocations = `-- name: GetListLocations :many const getListLocations = `-- name: GetListLocations :many
@ -15,7 +16,7 @@ SELECT id, address, name, google_maps_link, location_type, submitted_by, total_v
` `
func (q *Queries) GetListLocations(ctx context.Context) ([]Location, error) { func (q *Queries) GetListLocations(ctx context.Context) ([]Location, error) {
rows, err := q.db.QueryContext(ctx, getListLocations) rows, err := q.db.Query(ctx, getListLocations)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -43,9 +44,6 @@ func (q *Queries) GetListLocations(ctx context.Context) ([]Location, error) {
} }
items = append(items, i) items = append(items, i)
} }
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }
@ -72,19 +70,19 @@ LIMIT $1
` `
type GetListRecentLocationsWithRatingsRow struct { type GetListRecentLocationsWithRatingsRow struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Name string `json:"name"` Name string `json:"name"`
Thumbnail sql.NullString `json:"thumbnail"` Thumbnail pgtype.Text `json:"thumbnail"`
RegencyName string `json:"regency_name"` RegencyName string `json:"regency_name"`
ProvinceName string `json:"province_name"` ProvinceName string `json:"province_name"`
CriticScore interface{} `json:"critic_score"` CriticScore interface{} `json:"critic_score"`
CriticCount int64 `json:"critic_count"` CriticCount int64 `json:"critic_count"`
UserScore interface{} `json:"user_score"` UserScore interface{} `json:"user_score"`
UserCount int64 `json:"user_count"` UserCount int64 `json:"user_count"`
} }
func (q *Queries) GetListRecentLocationsWithRatings(ctx context.Context, limit int32) ([]GetListRecentLocationsWithRatingsRow, error) { func (q *Queries) GetListRecentLocationsWithRatings(ctx context.Context, limit int32) ([]GetListRecentLocationsWithRatingsRow, error) {
rows, err := q.db.QueryContext(ctx, getListRecentLocationsWithRatings, limit) rows, err := q.db.Query(ctx, getListRecentLocationsWithRatings, limit)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -107,9 +105,6 @@ func (q *Queries) GetListRecentLocationsWithRatings(ctx context.Context, limit i
} }
items = append(items, i) items = append(items, i)
} }
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }
@ -128,7 +123,7 @@ approved_by IS NOT NULL
` `
func (q *Queries) GetLocationTag(ctx context.Context, targetID int32) ([]string, error) { func (q *Queries) GetLocationTag(ctx context.Context, targetID int32) ([]string, error) {
rows, err := q.db.QueryContext(ctx, getLocationTag, targetID) rows, err := q.db.Query(ctx, getLocationTag, targetID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -141,9 +136,6 @@ func (q *Queries) GetLocationTag(ctx context.Context, targetID int32) ([]string,
} }
items = append(items, name) items = append(items, name)
} }
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }
@ -157,11 +149,11 @@ WHERE id = $2
` `
type UpdateLocationThumbnailParams struct { type UpdateLocationThumbnailParams struct {
Thumbnail sql.NullString `json:"thumbnail"` Thumbnail pgtype.Text `json:"thumbnail"`
ID int32 `json:"id"` ID int32 `json:"id"`
} }
func (q *Queries) UpdateLocationThumbnail(ctx context.Context, arg UpdateLocationThumbnailParams) error { func (q *Queries) UpdateLocationThumbnail(ctx context.Context, arg UpdateLocationThumbnailParams) error {
_, err := q.db.ExecContext(ctx, updateLocationThumbnail, arg.Thumbnail, arg.ID) _, err := q.db.Exec(ctx, updateLocationThumbnail, arg.Thumbnail, arg.ID)
return err return err
} }

View File

@ -1,16 +1,14 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
package db package db
import ( import (
"database/sql"
"database/sql/driver" "database/sql/driver"
"fmt" "fmt"
"time"
"github.com/sqlc-dev/pqtype" "github.com/jackc/pgx/v5/pgtype"
) )
type CommentType string type CommentType string
@ -148,183 +146,183 @@ func (ns NullUserReportsType) Value() (driver.Value, error) {
} }
type ClientIp struct { type ClientIp struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Ipv4 string `json:"ipv4"` Ipv4 string `json:"ipv4"`
Ipv6 sql.NullString `json:"ipv6"` Ipv6 pgtype.Text `json:"ipv6"`
BannedAt sql.NullTime `json:"banned_at"` BannedAt pgtype.Timestamp `json:"banned_at"`
BannedUntil sql.NullTime `json:"banned_until"` BannedUntil pgtype.Timestamp `json:"banned_until"`
Reason sql.NullString `json:"reason"` Reason pgtype.Text `json:"reason"`
IsPermaban sql.NullBool `json:"is_permaban"` IsPermaban pgtype.Bool `json:"is_permaban"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Comment struct { type Comment struct {
ID int32 `json:"id"` ID int32 `json:"id"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
CommentOn int32 `json:"comment_on"` CommentOn int32 `json:"comment_on"`
CommentType CommentType `json:"comment_type"` CommentType CommentType `json:"comment_type"`
ReplyTo sql.NullInt32 `json:"reply_to"` ReplyTo pgtype.Int4 `json:"reply_to"`
IsHide sql.NullBool `json:"is_hide"` IsHide pgtype.Bool `json:"is_hide"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Image struct { type Image struct {
ID int32 `json:"id"` ID int32 `json:"id"`
ImageUrl string `json:"image_url"` ImageUrl string `json:"image_url"`
UploadedBy int32 `json:"uploaded_by"` UploadedBy int32 `json:"uploaded_by"`
ImageType string `json:"image_type"` ImageType string `json:"image_type"`
ImageOf int32 `json:"image_of"` ImageOf int32 `json:"image_of"`
CreatedAt time.Time `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Location struct { type Location struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Address string `json:"address"` Address string `json:"address"`
Name string `json:"name"` Name string `json:"name"`
GoogleMapsLink sql.NullString `json:"google_maps_link"` GoogleMapsLink pgtype.Text `json:"google_maps_link"`
LocationType LocationType `json:"location_type"` LocationType LocationType `json:"location_type"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
TotalVisited sql.NullInt32 `json:"total_visited"` TotalVisited pgtype.Int4 `json:"total_visited"`
Thumbnail sql.NullString `json:"thumbnail"` Thumbnail pgtype.Text `json:"thumbnail"`
RegencyID int16 `json:"regency_id"` RegencyID int16 `json:"regency_id"`
IsDeleted bool `json:"is_deleted"` IsDeleted bool `json:"is_deleted"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
ApprovedBy sql.NullInt32 `json:"approved_by"` ApprovedBy pgtype.Int4 `json:"approved_by"`
ApprovedAt sql.NullTime `json:"approved_at"` ApprovedAt pgtype.Timestamp `json:"approved_at"`
} }
type LocationImage struct { type LocationImage struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Url string `json:"url"` Url string `json:"url"`
LocationID int32 `json:"location_id"` LocationID int32 `json:"location_id"`
UploadedBy sql.NullInt32 `json:"uploaded_by"` UploadedBy pgtype.Int4 `json:"uploaded_by"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type NewsEvent struct { type NewsEvent struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Title string `json:"title"` Title string `json:"title"`
Url string `json:"url"` Url string `json:"url"`
Source string `json:"source"` Source string `json:"source"`
Thumbnail sql.NullString `json:"thumbnail"` Thumbnail pgtype.Text `json:"thumbnail"`
Description sql.NullString `json:"description"` Description pgtype.Text `json:"description"`
IsDeleted bool `json:"is_deleted"` IsDeleted bool `json:"is_deleted"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
ApprovedBy sql.NullInt32 `json:"approved_by"` ApprovedBy pgtype.Int4 `json:"approved_by"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Province struct { type Province struct {
ID int32 `json:"id"` ID int32 `json:"id"`
ProvinceName string `json:"province_name"` ProvinceName string `json:"province_name"`
RegionID int16 `json:"region_id"` RegionID int16 `json:"region_id"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Regency struct { type Regency struct {
ID int32 `json:"id"` ID int32 `json:"id"`
RegencyName string `json:"regency_name"` RegencyName string `json:"regency_name"`
ProvinceID int16 `json:"province_id"` ProvinceID int16 `json:"province_id"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Region struct { type Region struct {
ID int32 `json:"id"` ID int32 `json:"id"`
RegionName string `json:"region_name"` RegionName string `json:"region_name"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Review struct { type Review struct {
ID int32 `json:"id"` ID int32 `json:"id"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
Comments string `json:"comments"` Comments string `json:"comments"`
Score int16 `json:"score"` Score int16 `json:"score"`
IsFromCritic bool `json:"is_from_critic"` IsFromCritic bool `json:"is_from_critic"`
CostApprox sql.NullInt32 `json:"cost_approx"` CostApprox pgtype.Int4 `json:"cost_approx"`
IsHided bool `json:"is_hided"` IsHided bool `json:"is_hided"`
LocationID int32 `json:"location_id"` LocationID int32 `json:"location_id"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type Tag struct { type Tag struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Name string `json:"name"` Name string `json:"name"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
TargetID int32 `json:"target_id"` TargetID int32 `json:"target_id"`
TagsType string `json:"tags_type"` TagsType string `json:"tags_type"`
ApprovedBy sql.NullInt32 `json:"approved_by"` ApprovedBy pgtype.Int4 `json:"approved_by"`
} }
type User struct { type User struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Email sql.NullString `json:"email"` Email pgtype.Text `json:"email"`
Username string `json:"username"` Username string `json:"username"`
Password string `json:"password"` Password string `json:"password"`
AvatarPicture sql.NullString `json:"avatar_picture"` AvatarPicture pgtype.Text `json:"avatar_picture"`
GoogleSignInPayload sql.NullString `json:"google_sign_in_payload"` GoogleSignInPayload pgtype.Text `json:"google_sign_in_payload"`
BannedAt sql.NullTime `json:"banned_at"` BannedAt pgtype.Timestamp `json:"banned_at"`
BannedUntil sql.NullTime `json:"banned_until"` BannedUntil pgtype.Timestamp `json:"banned_until"`
BanReason sql.NullString `json:"ban_reason"` BanReason pgtype.Text `json:"ban_reason"`
IsPermaban sql.NullBool `json:"is_permaban"` IsPermaban pgtype.Bool `json:"is_permaban"`
IsAdmin sql.NullBool `json:"is_admin"` IsAdmin pgtype.Bool `json:"is_admin"`
IsCritics sql.NullBool `json:"is_critics"` IsCritics pgtype.Bool `json:"is_critics"`
IsVerified sql.NullBool `json:"is_verified"` IsVerified pgtype.Bool `json:"is_verified"`
IsActive sql.NullBool `json:"is_active"` IsActive pgtype.Bool `json:"is_active"`
SocialMedia pqtype.NullRawMessage `json:"social_media"` SocialMedia []byte `json:"social_media"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
About sql.NullString `json:"about"` About pgtype.Text `json:"about"`
Website sql.NullString `json:"website"` Website pgtype.Text `json:"website"`
} }
type UserActivity struct { type UserActivity struct {
ID int32 `json:"id"` ID int32 `json:"id"`
TargetID int32 `json:"target_id"` TargetID int32 `json:"target_id"`
Target string `json:"target"` Target string `json:"target"`
Action string `json:"action"` Action string `json:"action"`
Link sql.NullString `json:"link"` Link pgtype.Text `json:"link"`
Comment sql.NullString `json:"comment"` Comment pgtype.Text `json:"comment"`
CreatedAt time.Time `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type UserFollow struct { type UserFollow struct {
ID int32 `json:"id"` ID int32 `json:"id"`
FollowerID int32 `json:"follower_id"` FollowerID int32 `json:"follower_id"`
FolloweeID int32 `json:"followee_id"` FolloweeID int32 `json:"followee_id"`
CreatedAt time.Time `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type UserReport struct { type UserReport struct {
ID int32 `json:"id"` ID int32 `json:"id"`
Message string `json:"message"` Message string `json:"message"`
Date time.Time `json:"date"` Date pgtype.Timestamp `json:"date"`
ReportTarget int32 `json:"report_target"` ReportTarget int32 `json:"report_target"`
ReportType UserReportsType `json:"report_type"` ReportType UserReportsType `json:"report_type"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type UserSession struct { type UserSession struct {
ID int32 `json:"id"` ID int32 `json:"id"`
IndexID int64 `json:"index_id"` IndexID int64 `json:"index_id"`
Username string `json:"username"` Username string `json:"username"`
RefreshToken string `json:"refresh_token"` RefreshToken string `json:"refresh_token"`
UserAgent string `json:"user_agent"` UserAgent string `json:"user_agent"`
ClientIp string `json:"client_ip"` ClientIp string `json:"client_ip"`
IsBlocked bool `json:"is_blocked"` IsBlocked bool `json:"is_blocked"`
ExpiresAt time.Time `json:"expires_at"` ExpiresAt pgtype.Timestamp `json:"expires_at"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
} }

View File

@ -48,7 +48,7 @@ func (q *Queries) GetNewsEventsList(ctx context.Context, arg GetNewsEventsListPa
OFFSET $2 OFFSET $2
`, arg.IsWithApproved) `, arg.IsWithApproved)
rows, err := q.db.QueryContext(ctx, getNewsEventsListQ, arg.Limit, arg.Offset) rows, err := q.db.Query(ctx, getNewsEventsListQ, arg.Limit, arg.Offset)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -76,10 +76,7 @@ func (q *Queries) GetNewsEventsList(ctx context.Context, arg GetNewsEventsListPa
items = append(items, i) items = append(items, i)
} }
rows.Close()
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }

View File

@ -1,13 +1,14 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: news_events.sql // source: news_events.sql
package db package db
import ( import (
"context" "context"
"database/sql"
"github.com/jackc/pgx/v5/pgtype"
) )
const createNewsEvents = `-- name: CreateNewsEvents :exec const createNewsEvents = `-- name: CreateNewsEvents :exec
@ -21,15 +22,15 @@ INSERT INTO news_events(
` `
type CreateNewsEventsParams struct { type CreateNewsEventsParams struct {
Title string `json:"title"` Title string `json:"title"`
Url string `json:"url"` Url string `json:"url"`
Source string `json:"source"` Source string `json:"source"`
Description sql.NullString `json:"description"` Description pgtype.Text `json:"description"`
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
} }
func (q *Queries) CreateNewsEvents(ctx context.Context, arg CreateNewsEventsParams) error { func (q *Queries) CreateNewsEvents(ctx context.Context, arg CreateNewsEventsParams) error {
_, err := q.db.ExecContext(ctx, createNewsEvents, _, err := q.db.Exec(ctx, createNewsEvents,
arg.Title, arg.Title,
arg.Url, arg.Url,
arg.Source, arg.Source,

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: provinces.sql // source: provinces.sql
package db package db
@ -24,7 +24,7 @@ type GetListProvincesRow struct {
} }
func (q *Queries) GetListProvinces(ctx context.Context) ([]GetListProvincesRow, error) { func (q *Queries) GetListProvinces(ctx context.Context) ([]GetListProvincesRow, error) {
rows, err := q.db.QueryContext(ctx, getListProvinces) rows, err := q.db.Query(ctx, getListProvinces)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -37,9 +37,6 @@ func (q *Queries) GetListProvinces(ctx context.Context) ([]GetListProvincesRow,
} }
items = append(items, i) items = append(items, i)
} }
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }

View File

@ -1,12 +1,13 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
package db package db
import ( import (
"context" "context"
"database/sql"
"github.com/jackc/pgx/v5/pgtype"
) )
type Querier interface { type Querier interface {
@ -25,7 +26,7 @@ type Querier interface {
GetSession(ctx context.Context, id int32) (UserSession, error) GetSession(ctx context.Context, id int32) (UserSession, error)
GetUserReviewByLocation(ctx context.Context, arg GetUserReviewByLocationParams) (GetUserReviewByLocationRow, error) GetUserReviewByLocation(ctx context.Context, arg GetUserReviewByLocationParams) (GetUserReviewByLocationRow, error)
RemoveFollowUser(ctx context.Context, arg RemoveFollowUserParams) error RemoveFollowUser(ctx context.Context, arg RemoveFollowUserParams) error
UpdateAvatar(ctx context.Context, arg UpdateAvatarParams) (sql.NullString, error) UpdateAvatar(ctx context.Context, arg UpdateAvatarParams) (pgtype.Text, error)
UpdateLocationThumbnail(ctx context.Context, arg UpdateLocationThumbnailParams) error UpdateLocationThumbnail(ctx context.Context, arg UpdateLocationThumbnailParams) error
UpdatePassword(ctx context.Context, arg UpdatePasswordParams) error UpdatePassword(ctx context.Context, arg UpdatePasswordParams) error
} }

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: regencies.sql // source: regencies.sql
package db package db
@ -24,7 +24,7 @@ type GetListRegenciesRow struct {
} }
func (q *Queries) GetListRegencies(ctx context.Context) ([]GetListRegenciesRow, error) { func (q *Queries) GetListRegencies(ctx context.Context) ([]GetListRegenciesRow, error) {
rows, err := q.db.QueryContext(ctx, getListRegencies) rows, err := q.db.Query(ctx, getListRegencies)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -37,9 +37,6 @@ func (q *Queries) GetListRegencies(ctx context.Context) ([]GetListRegenciesRow,
} }
items = append(items, i) items = append(items, i)
} }
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: regions.sql // source: regions.sql
package db package db
@ -22,7 +22,7 @@ type GetListRegionsRow struct {
} }
func (q *Queries) GetListRegions(ctx context.Context) ([]GetListRegionsRow, error) { func (q *Queries) GetListRegions(ctx context.Context) ([]GetListRegionsRow, error) {
rows, err := q.db.QueryContext(ctx, getListRegions) rows, err := q.db.Query(ctx, getListRegions)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -35,9 +35,6 @@ func (q *Queries) GetListRegions(ctx context.Context) ([]GetListRegionsRow, erro
} }
items = append(items, i) items = append(items, i)
} }
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }

View File

@ -28,7 +28,7 @@ type CreateReviewParams struct {
} }
func (q *Queries) CreateReview(ctx context.Context, arg CreateReviewParams) (Review, error) { func (q *Queries) CreateReview(ctx context.Context, arg CreateReviewParams) (Review, error) {
row := q.db.QueryRowContext(ctx, createReview, row := q.db.QueryRow(ctx, createReview,
arg.SubmittedBy, arg.SubmittedBy,
arg.Comments, arg.Comments,
arg.Score, arg.Score,
@ -87,7 +87,7 @@ OFFSET $4;
` `
func (q *Queries) GetListLocationReviews(ctx context.Context, arg GetListLocationReviewsParams) ([]GetListLocationReviewsRow, error) { func (q *Queries) GetListLocationReviews(ctx context.Context, arg GetListLocationReviewsParams) ([]GetListLocationReviewsRow, error) {
rows, err := q.db.QueryContext(ctx, getListLocationReviews, arg.LocationID, arg.IsCritics, arg.Limit, arg.Offset) rows, err := q.db.Query(ctx, getListLocationReviews, arg.LocationID, arg.IsCritics, arg.Limit, arg.Offset)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -112,11 +112,7 @@ func (q *Queries) GetListLocationReviews(ctx context.Context, arg GetListLocatio
} }
items = append(items, i) items = append(items, i)
} }
rows.Close()
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err
} }

View File

@ -1,13 +1,14 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: reviews.sql // source: reviews.sql
package db package db
import ( import (
"context" "context"
"database/sql"
"github.com/jackc/pgx/v5/pgtype"
) )
const checkIfReviewExists = `-- name: CheckIfReviewExists :one const checkIfReviewExists = `-- name: CheckIfReviewExists :one
@ -22,7 +23,7 @@ type CheckIfReviewExistsParams struct {
} }
func (q *Queries) CheckIfReviewExists(ctx context.Context, arg CheckIfReviewExistsParams) (int64, error) { func (q *Queries) CheckIfReviewExists(ctx context.Context, arg CheckIfReviewExistsParams) (int64, error) {
row := q.db.QueryRowContext(ctx, checkIfReviewExists, arg.LocationID, arg.SubmittedBy) row := q.db.QueryRow(ctx, checkIfReviewExists, arg.LocationID, arg.SubmittedBy)
var count int64 var count int64
err := row.Scan(&count) err := row.Scan(&count)
return count, err return count, err
@ -46,16 +47,16 @@ type GetUserReviewByLocationParams struct {
} }
type GetUserReviewByLocationRow struct { type GetUserReviewByLocationRow struct {
ID int32 `json:"id"` ID int32 `json:"id"`
LocationID int32 `json:"location_id"` LocationID int32 `json:"location_id"`
Score int16 `json:"score"` Score int16 `json:"score"`
Comments string `json:"comments"` Comments string `json:"comments"`
CreatedAt sql.NullTime `json:"created_at"` CreatedAt pgtype.Timestamp `json:"created_at"`
UpdatedAt sql.NullTime `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
func (q *Queries) GetUserReviewByLocation(ctx context.Context, arg GetUserReviewByLocationParams) (GetUserReviewByLocationRow, error) { func (q *Queries) GetUserReviewByLocation(ctx context.Context, arg GetUserReviewByLocationParams) (GetUserReviewByLocationRow, error) {
row := q.db.QueryRowContext(ctx, getUserReviewByLocation, arg.SubmittedBy, arg.LocationID) row := q.db.QueryRow(ctx, getUserReviewByLocation, arg.SubmittedBy, arg.LocationID)
var i GetUserReviewByLocationRow var i GetUserReviewByLocationRow
err := row.Scan( err := row.Scan(
&i.ID, &i.ID,

View File

@ -1,13 +1,14 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: sessions.sql // source: sessions.sql
package db package db
import ( import (
"context" "context"
"time"
"github.com/jackc/pgx/v5/pgtype"
) )
const createSession = `-- name: CreateSession :one const createSession = `-- name: CreateSession :one
@ -24,16 +25,16 @@ INSERT INTO user_sessions (
` `
type CreateSessionParams struct { type CreateSessionParams struct {
Username string `json:"username"` Username string `json:"username"`
RefreshToken string `json:"refresh_token"` RefreshToken string `json:"refresh_token"`
UserAgent string `json:"user_agent"` UserAgent string `json:"user_agent"`
ClientIp string `json:"client_ip"` ClientIp string `json:"client_ip"`
IsBlocked bool `json:"is_blocked"` IsBlocked bool `json:"is_blocked"`
ExpiresAt time.Time `json:"expires_at"` ExpiresAt pgtype.Timestamp `json:"expires_at"`
} }
func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (UserSession, error) { func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (UserSession, error) {
row := q.db.QueryRowContext(ctx, createSession, row := q.db.QueryRow(ctx, createSession,
arg.Username, arg.Username,
arg.RefreshToken, arg.RefreshToken,
arg.UserAgent, arg.UserAgent,
@ -63,7 +64,7 @@ LIMIT 1
` `
func (q *Queries) GetSession(ctx context.Context, id int32) (UserSession, error) { func (q *Queries) GetSession(ctx context.Context, id int32) (UserSession, error) {
row := q.db.QueryRowContext(ctx, getSession, id) row := q.db.QueryRow(ctx, getSession, id)
var i UserSession var i UserSession
err := row.Scan( err := row.Scan(
&i.ID, &i.ID,

View File

@ -2,10 +2,9 @@ package db
import ( import (
"context" "context"
"database/sql"
"fmt" "fmt"
"github.com/yiplee/sqlc" "github.com/jackc/pgx/v5/pgxpool"
) )
type Store interface { type Store interface {
@ -26,19 +25,19 @@ type Store interface {
type SQLStore struct { type SQLStore struct {
*Queries *Queries
db *sql.DB pool *pgxpool.Pool
} }
func NewStore(db *sql.DB) Store { func NewStore(pool *pgxpool.Pool) Store {
return &SQLStore{ return &SQLStore{
db: db, pool: pool,
Queries: New(sqlc.Wrap(db)), Queries: New(pool),
} }
} }
// TRANSACTION QUERY FUNCTION // TRANSACTION QUERY FUNCTION
func (store *SQLStore) execTx(ctx context.Context, fn func(*Queries) error) error { func (store *SQLStore) execTx(ctx context.Context, fn func(*Queries) error) error {
tx, err := store.db.BeginTx(ctx, nil) tx, err := store.pool.Begin(ctx)
if err != nil { if err != nil {
return err return err
} }
@ -46,10 +45,10 @@ func (store *SQLStore) execTx(ctx context.Context, fn func(*Queries) error) erro
q := New(tx) q := New(tx)
err = fn(q) err = fn(q)
if err != nil { if err != nil {
if rbErr := tx.Rollback(); rbErr != nil { if rbErr := tx.Rollback(ctx); rbErr != nil {
return fmt.Errorf("tx err: %v, rb err : %v", err, rbErr) return fmt.Errorf("tx err: %v, rb err : %v", err, rbErr)
} }
return err return err
} }
return tx.Commit() return tx.Commit(ctx)
} }

View File

@ -2,11 +2,11 @@ package db_test
import ( import (
"context" "context"
"database/sql"
"testing" "testing"
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
"git.nochill.in/nochill/hiling_go/util" "git.nochill.in/nochill/hiling_go/util"
"github.com/jackc/pgx/v5/pgtype"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@ -28,7 +28,7 @@ func TestCreateLocation(t *testing.T) {
Name: util.RandomString(10), Name: util.RandomString(10),
SubmittedBy: 1, SubmittedBy: 1,
RegencyID: 1305, RegencyID: 1305,
GoogleMapsLink: sql.NullString{Valid: true, String: util.RandomString(10)}, GoogleMapsLink: pgtype.Text{Valid: true, String: util.RandomString(10)},
} }
_, err := testQueries.CreateLocation(context.Background(), arg) _, err := testQueries.CreateLocation(context.Background(), arg)

View File

@ -1,18 +1,18 @@
package db_test package db_test
import ( import (
"database/sql" "context"
"log" "log"
"os" "os"
"testing" "testing"
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
"git.nochill.in/nochill/hiling_go/util" "git.nochill.in/nochill/hiling_go/util"
_ "github.com/lib/pq" "github.com/jackc/pgx/v5/pgxpool"
) )
var testQueries *db.Queries var testQueries *db.Queries
var testDB *sql.DB var testDB *pgxpool.Pool
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
var err error var err error
@ -21,7 +21,7 @@ func TestMain(m *testing.M) {
log.Fatal("cannot load config: ", err) log.Fatal("cannot load config: ", err)
} }
testDB, err = sql.Open(config.DBDriver, config.DBSourceTest) testDB, err = pgxpool.New(context.Background(), config.DBSourceTest)
if err != nil { if err != nil {
log.Fatal("cannot connect db: ", err) log.Fatal("cannot connect db: ", err)
} }

View File

@ -3,6 +3,8 @@ package db
import ( import (
"context" "context"
"database/sql" "database/sql"
"github.com/jackc/pgx/v5/pgtype"
) )
type CreateLocationTxParams struct { type CreateLocationTxParams struct {
@ -11,7 +13,7 @@ type CreateLocationTxParams struct {
SubmittedBy int32 `json:"submitted_by"` SubmittedBy int32 `json:"submitted_by"`
LocationType LocationType `json:"location_type"` LocationType LocationType `json:"location_type"`
RegencyID int16 `json:"regency_id"` RegencyID int16 `json:"regency_id"`
GoogleMapsLink sql.NullString `json:"google_maps_link"` GoogleMapsLink pgtype.Text `json:"google_maps_link"`
IsDeleted bool `json:"is_deleted"` IsDeleted bool `json:"is_deleted"`
ApprovedBy sql.NullInt32 `json:"approved_by"` ApprovedBy sql.NullInt32 `json:"approved_by"`
Thumbnail []CreateImageParams `json:"thumbnails"` Thumbnail []CreateImageParams `json:"thumbnails"`
@ -44,7 +46,7 @@ func (store *SQLStore) CreateLocationTx(ctx context.Context, arg CreateLocationT
} }
err = q.UpdateLocationThumbnail(ctx, UpdateLocationThumbnailParams{ err = q.UpdateLocationThumbnail(ctx, UpdateLocationThumbnailParams{
Thumbnail: sql.NullString{Valid: true, String: arg.Thumbnail[0].ImageUrl}, Thumbnail: pgtype.Text{Valid: true, String: arg.Thumbnail[0].ImageUrl},
ID: location_id, ID: location_id,
}) })

View File

@ -5,8 +5,6 @@ import (
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"time" "time"
"github.com/sqlc-dev/pqtype"
) )
const getUserQ = `-- name: GetUser :one const getUserQ = `-- name: GetUser :one
@ -55,7 +53,7 @@ type GetUserRow struct {
} }
func (q *Queries) GetUser(ctx context.Context, username string) (GetUserRow, error) { func (q *Queries) GetUser(ctx context.Context, username string) (GetUserRow, error) {
row := q.db.QueryRowContext(ctx, getUserQ, username) row := q.db.QueryRow(ctx, getUserQ, username)
var i GetUserRow var i GetUserRow
err := row.Scan( err := row.Scan(
&i.ID, &i.ID,
@ -133,7 +131,7 @@ type GetUserStatsRow struct {
func (q *Queries) GetUserStats(ctx context.Context, user_id int32) (GetUserStatsRow, error) { func (q *Queries) GetUserStats(ctx context.Context, user_id int32) (GetUserStatsRow, error) {
var i GetUserStatsRow var i GetUserStatsRow
row := q.db.QueryRowContext(ctx, getUserStatsQ, user_id) row := q.db.QueryRow(ctx, getUserStatsQ, user_id)
err := row.Scan( err := row.Scan(
&i.Reviews, &i.Reviews,
@ -175,10 +173,10 @@ RETURNING
` `
type UpdateUserParams struct { type UpdateUserParams struct {
About sql.NullString `json:"about"` About sql.NullString `json:"about"`
SocialMedia pqtype.NullRawMessage `json:"social_media"` SocialMedia []map[string]any `json:"social_media"`
Website sql.NullString `json:"website"` Website sql.NullString `json:"website"`
ID int32 `json:"id"` ID int32 `json:"id"`
} }
type UpdateUserRow struct { type UpdateUserRow struct {
@ -203,7 +201,7 @@ type UpdateUserRow struct {
} }
func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) (UpdateUserRow, error) { func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) (UpdateUserRow, error) {
row := q.db.QueryRowContext(ctx, updateUser, row := q.db.QueryRow(ctx, updateUser,
arg.About, arg.About,
arg.SocialMedia, arg.SocialMedia,
arg.Website, arg.Website,

View File

@ -1,13 +1,14 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.20.0 // sqlc v1.25.0
// source: users.sql // source: users.sql
package db package db
import ( import (
"context" "context"
"database/sql"
"github.com/jackc/pgx/v5/pgtype"
) )
const createUser = `-- name: CreateUser :one const createUser = `-- name: CreateUser :one
@ -24,7 +25,7 @@ type CreateUserParams struct {
} }
func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, error) { func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, error) {
row := q.db.QueryRowContext(ctx, createUser, arg.Username, arg.Password) row := q.db.QueryRow(ctx, createUser, arg.Username, arg.Password)
var i User var i User
err := row.Scan( err := row.Scan(
&i.ID, &i.ID,
@ -58,13 +59,13 @@ RETURNING avatar_picture
` `
type UpdateAvatarParams struct { type UpdateAvatarParams struct {
AvatarPicture sql.NullString `json:"avatar_picture"` AvatarPicture pgtype.Text `json:"avatar_picture"`
ID int32 `json:"id"` ID int32 `json:"id"`
} }
func (q *Queries) UpdateAvatar(ctx context.Context, arg UpdateAvatarParams) (sql.NullString, error) { func (q *Queries) UpdateAvatar(ctx context.Context, arg UpdateAvatarParams) (pgtype.Text, error) {
row := q.db.QueryRowContext(ctx, updateAvatar, arg.AvatarPicture, arg.ID) row := q.db.QueryRow(ctx, updateAvatar, arg.AvatarPicture, arg.ID)
var avatar_picture sql.NullString var avatar_picture pgtype.Text
err := row.Scan(&avatar_picture) err := row.Scan(&avatar_picture)
return avatar_picture, err return avatar_picture, err
} }
@ -81,6 +82,6 @@ type UpdatePasswordParams struct {
} }
func (q *Queries) UpdatePassword(ctx context.Context, arg UpdatePasswordParams) error { func (q *Queries) UpdatePassword(ctx context.Context, arg UpdatePasswordParams) error {
_, err := q.db.ExecContext(ctx, updatePassword, arg.Password, arg.ID) _, err := q.db.Exec(ctx, updatePassword, arg.Password, arg.ID)
return err return err
} }

59
go.mod
View File

@ -2,61 +2,62 @@ module git.nochill.in/nochill/hiling_go
go 1.20 go 1.20
require (
github.com/aead/chacha20poly1305 v0.0.0-20201124145622-1a5aba2a8b29
github.com/gin-contrib/cors v1.4.0
github.com/gin-gonic/gin v1.9.1
github.com/go-playground/validator/v10 v10.17.0
github.com/jackc/pgx/v5 v5.5.3
github.com/o1egl/paseto v1.0.0
github.com/spf13/viper v1.16.0
github.com/stretchr/testify v1.8.4
github.com/yiplee/sqlc v1.0.2
go.uber.org/mock v0.4.0
golang.org/x/crypto v0.18.0
)
require ( require (
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/aead/chacha20poly1305 v0.0.0-20170617001512-233f39982aeb // indirect
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 // indirect github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 // indirect
github.com/bytedance/sonic v1.10.0 // indirect github.com/bytedance/sonic v1.10.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.0 // indirect github.com/chenzhuoyu/iasm v0.9.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/cors v1.4.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.9.1 // indirect
github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.15.3 // indirect
github.com/goccy/go-json v0.10.2 // indirect github.com/goccy/go-json v0.10.2 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/puddle/v2 v2.2.1 // 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.5 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect
github.com/leodido/go-urn v1.2.4 // indirect github.com/leodido/go-urn v1.2.4 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/magiconair/properties v1.8.7 // indirect github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // 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/o1egl/paseto v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.1.1 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/ramya-rao-a/go-outline v0.0.0-20210608161538-9736a4bde949 // indirect
github.com/spf13/afero v1.9.5 // indirect github.com/spf13/afero v1.9.5 // indirect
github.com/spf13/cast v1.5.1 // indirect github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.16.0 // indirect
github.com/sqlc-dev/pqtype v0.2.0 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/stretchr/testify v1.8.4 // indirect
github.com/subosito/gotenv v1.4.2 // indirect github.com/subosito/gotenv v1.4.2 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect github.com/ugorji/go/codec v1.2.12 // indirect
github.com/yiplee/nap v1.0.1 // indirect github.com/yiplee/nap v1.0.1 // indirect
github.com/yiplee/sqlc v1.0.2 // indirect golang.org/x/arch v0.7.0 // indirect
go.uber.org/mock v0.2.0 // indirect golang.org/x/net v0.20.0 // indirect
golang.org/x/arch v0.5.0 // indirect golang.org/x/sync v0.6.0 // indirect
golang.org/x/crypto v0.13.0 // indirect golang.org/x/sys v0.16.0 // indirect
golang.org/x/net v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect
golang.org/x/sync v0.3.0 // indirect google.golang.org/protobuf v1.32.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/tools v0.13.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

104
go.sum
View File

@ -40,21 +40,23 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA=
github.com/aead/chacha20poly1305 v0.0.0-20170617001512-233f39982aeb h1:6Z/wqhPFZ7y5ksCEV/V5MXOazLaeu/EW97CU5rz8NWk=
github.com/aead/chacha20poly1305 v0.0.0-20170617001512-233f39982aeb/go.mod h1:UzH9IX1MMqOcwhoNOIjmTQeAxrFgzs50j4golQtXXxU= github.com/aead/chacha20poly1305 v0.0.0-20170617001512-233f39982aeb/go.mod h1:UzH9IX1MMqOcwhoNOIjmTQeAxrFgzs50j4golQtXXxU=
github.com/aead/chacha20poly1305 v0.0.0-20201124145622-1a5aba2a8b29 h1:1DcvRPZOdbQRg5nAHt2jrc5QbV0AGuhDdfQI6gXjiFE=
github.com/aead/chacha20poly1305 v0.0.0-20201124145622-1a5aba2a8b29/go.mod h1:UzH9IX1MMqOcwhoNOIjmTQeAxrFgzs50j4golQtXXxU=
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 h1:52m0LGchQBBVqJRyYYufQuIbVqRawmubW3OFGqK1ekw= github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 h1:52m0LGchQBBVqJRyYYufQuIbVqRawmubW3OFGqK1ekw=
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635/go.mod h1:lmLxL+FV291OopO93Bwf9fQLQeLyt33VJRUg5VJ30us= github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635/go.mod h1:lmLxL+FV291OopO93Bwf9fQLQeLyt33VJRUg5VJ30us=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE=
github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA=
github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo=
github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog=
github.com/chenzhuoyu/iasm v0.9.1 h1:tUHQJXo3NhBqw6s33wkGn9SP3bvrWLdlVIJ3hQBL7P0=
github.com/chenzhuoyu/iasm v0.9.1/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@ -72,10 +74,11 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g= github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g=
github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs= github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@ -87,6 +90,7 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
@ -94,8 +98,8 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
github.com/go-playground/validator/v10 v10.15.3 h1:S+sSpunYjNPDuXkWbK+x+bA7iXiW296KG4dL3X7xUZo= github.com/go-playground/validator/v10 v10.17.0 h1:SmVVlfAOtlZncTxRuinDPomC2DkXJ4E5T9gDA0AIH74=
github.com/go-playground/validator/v10 v10.15.3/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-playground/validator/v10 v10.17.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
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=
@ -137,6 +141,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.2/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.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/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.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
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/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@ -153,8 +158,6 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
@ -164,32 +167,41 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
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/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.5.3 h1:Ces6/M3wbDXYpM8JyyPD57ivTtJACFZJd885pdIaV2s=
github.com/jackc/pgx/v5 v5.5.3/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc=
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 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.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
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.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.19/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.14.13 h1:1tj15ngiFfcZzii7yd82foL+ks+ouQcj8j/TPq3fk1I=
github.com/mattn/go-sqlite3 v1.14.13/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.13/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
@ -201,8 +213,8 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
github.com/o1egl/paseto v1.0.0 h1:bwpvPu2au176w4IBlhbyUv/S5VPptERIA99Oap5qUd0= github.com/o1egl/paseto v1.0.0 h1:bwpvPu2au176w4IBlhbyUv/S5VPptERIA99Oap5qUd0=
github.com/o1egl/paseto v1.0.0/go.mod h1:5HxsZPmw/3RI2pAwGo1HhOOwSdvBpcuVzO7uDkm+CLU= github.com/o1egl/paseto v1.0.0/go.mod h1:5HxsZPmw/3RI2pAwGo1HhOOwSdvBpcuVzO7uDkm+CLU=
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI=
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@ -211,11 +223,10 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR
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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/ramya-rao-a/go-outline v0.0.0-20210608161538-9736a4bde949 h1:iaD+iVf9xGfajsJp+zYrg9Lrk6gMJ6/hZHO4cYq5D5o=
github.com/ramya-rao-a/go-outline v0.0.0-20210608161538-9736a4bde949/go.mod h1:9V3eNbj9Z53yO7cKB6cSX9f0O7rYdIiuGBhjA1YsQuw=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
@ -226,11 +237,8 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
github.com/sqlc-dev/pqtype v0.2.0 h1:zfzDpAxjCU0/GO7EgZ7ELUh0w28SrMSHzO3rH5Wd3is=
github.com/sqlc-dev/pqtype v0.2.0/go.mod h1:oyUjp5981ctiL9UYvj1bVvCKi8OXkCa0u645hce7CAs=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
@ -250,8 +258,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/yiplee/nap v1.0.1 h1:5p8KAIkYy+PIMGSk+ScF13Hh/OFkIEBHPuD14OFvStg= github.com/yiplee/nap v1.0.1 h1:5p8KAIkYy+PIMGSk+ScF13Hh/OFkIEBHPuD14OFvStg=
github.com/yiplee/nap v1.0.1/go.mod h1:7Zvro/en8ARhkqgv3vpj037yJSBRvGeNyj5Np5XUFgc= github.com/yiplee/nap v1.0.1/go.mod h1:7Zvro/en8ARhkqgv3vpj037yJSBRvGeNyj5Np5XUFgc=
github.com/yiplee/sqlc v1.0.2 h1:GcWRpoKb0jRPuaYhiXex/LhJWkiCWQNnUjgOMQHgvJQ= github.com/yiplee/sqlc v1.0.2 h1:GcWRpoKb0jRPuaYhiXex/LhJWkiCWQNnUjgOMQHgvJQ=
@ -260,18 +268,17 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.5.0 h1:jpGode6huXQxcskEIpOCvrU+tzo81b6+oFLUYXWtH/Y= golang.org/x/arch v0.7.0 h1:pskyeJh/3AmoQ8CPE95vxHLqp1G1GfGNXTmcl9NEKTc=
golang.org/x/arch v0.5.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.7.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@ -281,10 +288,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@ -318,7 +323,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -350,12 +354,9 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -375,10 +376,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/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=
@ -412,18 +412,16 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/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.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -433,8 +431,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/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.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@ -485,9 +483,6 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
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=
@ -582,10 +577,11 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=

30
main.go
View File

@ -1,13 +1,14 @@
package main package main
import ( import (
"database/sql" "context"
"log" "log"
"git.nochill.in/nochill/hiling_go/api" "git.nochill.in/nochill/hiling_go/api"
db "git.nochill.in/nochill/hiling_go/db/sqlc" db "git.nochill.in/nochill/hiling_go/db/sqlc"
"git.nochill.in/nochill/hiling_go/util" "git.nochill.in/nochill/hiling_go/util"
_ "github.com/lib/pq" _ "github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
) )
// "database/sql"? // "database/sql"?
@ -19,15 +20,30 @@ func main() {
if err != nil { if err != nil {
log.Fatal("cannot load config: ", err) log.Fatal("cannot load config: ", err)
} }
dbConn, err := sql.Open(config.DBDriver, config.DBSource)
// dbConn := pgx.ConnConfig{
// pgconn.Config{
// }
// }
// dbConfig := pgxpool.Config{
// MaxConnLifetime: 200,
// MaxConns: 100,
// ConnConfig: ,
// }
pooConfig, err := pgxpool.ParseConfig(config.DBSource)
if err != nil {
log.Fatal("Database error; %w", err)
}
pooConfig.MaxConnLifetime = 100
pooConfig.MaxConns = 100
dbConn, err := pgxpool.NewWithConfig(context.Background(), pooConfig)
if err != nil { if err != nil {
log.Fatal("cannot connect to db: ", err) log.Fatal("cannot connect to db: ", err)
} }
// limit db connection
dbConn.SetConnMaxLifetime(100)
dbConn.SetMaxOpenConns(100)
store := db.NewStore(dbConn) store := db.NewStore(dbConn)
server, err := api.NewServer(config, store) server, err := api.NewServer(config, store)
if err != nil { if err != nil {

View File

@ -6,6 +6,7 @@ sql:
gen: gen:
go: go:
package: "db" package: "db"
sql_package: "pgx/v5"
out: "./db/sqlc" out: "./db/sqlc"
emit_json_tags: true emit_json_tags: true
emit_prepared_queries: false emit_prepared_queries: false