🚧 developing...

This commit is contained in:
2025-03-27 01:01:30 +08:00
parent 781a71a27c
commit afcd128256
30 changed files with 1696 additions and 44 deletions

View File

@@ -771,6 +771,32 @@ type (
CoordinateListResponse { CoordinateListResponse {
Records []CoordinateMeta `json:"records"` Records []CoordinateMeta `json:"records"`
} }
RecoverImageRequest {
ID int64 `json:"id"`
Provider string `json:"provider"`
Bucket string `json:"bucket"`
}
ImageBedUploadResponse {
ID int64 `json:"id"`
}
ImageBedUploadListRequest {
Provider string `json:"provider"`
Bucket string `json:"bucket"`
}
ImageBedUploadMeta {
ID int64 `json:"id"`
FileName string `json:"file_name"`
FileSize int64 `json:"file_size"`
FileType string `json:"file_type"`
Path string `json:"path"`
Thumbnail string `json:"thumbnail"`
CreatedAt string `json:"created_at"`
Width int64 `json:"width"`
Height int64 `json:"height"`
}
ImageBedUploadListResponse {
Records []ImageBedUploadMeta `json:"records"`
}
) )
// 文件上传 // 文件上传
@@ -921,6 +947,18 @@ service auth {
// 获取图像经纬度列表 // 获取图像经纬度列表
@handler getCoordinateList @handler getCoordinateList
post /coordinate/list returns (CoordinateListResponse) post /coordinate/list returns (CoordinateListResponse)
// 恢复删除图片
@handler recoverImage
post /image/recover (RecoverImageRequest) returns (string)
// 图床上传图片
@handler imageBedUpload
post /image/bed/upload returns (ImageBedUploadResponse)
// 获取图床上传的图片列表
@handler getImageBedUploadList
post /image/bed/upload/list (ImageBedUploadListRequest) returns (ImageBedUploadListResponse)
} }
type ( type (
@@ -1074,17 +1112,114 @@ service auth {
type ( type (
UserMeta { UserMeta {
ID int64 `json:"id"` ID int64 `json:"id"`
UID string `json:"uid"`
Username string `json:"username"` Username string `json:"username"`
Nickname string `json:"nickname"` Nickname string `json:"nickname"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
Email string `json:"email"` Email string `json:"email"`
Phone string `json:"phone"` Phone string `json:"phone"`
Gender string `json:"gender"`
Introduce string `json:"introduce"`
Blog string `json:"blog"`
Location string `json:"location"`
Company string `json:"company"`
Status int64 `json:"status"` Status int64 `json:"status"`
CreatedAt string `json:"created_at"` CreatedAt string `json:"created_at"`
UpadatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
} }
UserInfoListResponse { UserInfoListResponse {
Records []UserMeta `json:"records"` Records []UserMeta `json:"records"`
} }
RoleMeta {
ID int64 `json:"id"`
RoleName string `json:"role_name"`
RoleKey string `json:"role_key"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
RoleListResponse {
Records []RoleMeta `json:"records"`
}
PermissionRuleMeta {
ID int64 `json:"id"`
Ptype string `json:"ptype"`
V0 string `json:"v0"`
V1 string `json:"v1"`
V2 string `json:"v2"`
V3 string `json:"v3"`
V4 string `json:"v4"`
V5 string `json:"v5"`
}
PermissionRuleListResponse {
Records []PermissionRuleMeta `json:"records"`
}
UserLoginLogMeta {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
IP string `json:"ip"`
Location string `json:"location"`
Agent string `json:"agent"`
CreatedAt string `json:"created_at"`
Browser string `json:"browser"`
OperatingSystem string `json:"operating_system"`
BrowserVersion string `json:"browser_version"`
Mobile string `json:"mobile"`
Bot int64 `json:"bot"`
Mozilla string `json:"mozilla"`
Platform string `json:"platform"`
EngineName string `json:"engine_name"`
EngineVersion string `json:"engine_version"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
UserLoginLogListResponse {
Records []UserLoginLogMeta `json:"records"`
}
UserThirdPartyLoginMeta {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
OpenID string `json:"open_id"`
Source string `json:"source"`
Status int64 `json:"status"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
UserThirdPartyLoginListResponse {
Records []UserThirdPartyLoginMeta `json:"records"`
}
AllStorageListResponse {
Records []StorageConfigMeta `json:"records"`
}
CommentReplyMeta {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
TopicID int64 `json:"topic_id"`
TopicType string `json:"topic_type"`
Content string `json:"content"`
CommentType string `json:"comment_type"`
ReplyTo int64 `json:"reply_to"`
ReplyID int64 `json:"reply_id"`
ReplyUser string `json:"reply_user"`
Author string `json:"author"`
Likes int64 `json:"likes"`
ReplyCount int64 `json:"reply_count"`
ImagePath string `json:"image_path"`
Browser string `json:"browser"`
OperatingSystem string `json:"operating_system"`
BrowserVersion string `json:"browser_version"`
CommentIP string `json:"comment_ip"`
Loaction string `json:"loaction"`
Agent string `json:"agent"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
AllCommentListResponse {
Records []CommentReplyMeta `json:"records"`
}
) )
// 系统服务 // 系统服务
@@ -1103,5 +1238,29 @@ service auth {
// 获取用户列表 // 获取用户列表
@handler getUserList @handler getUserList
post /user/list returns (UserInfoListResponse) post /user/list returns (UserInfoListResponse)
// 获取所有角色列表
@handler getAllRoleList
post /role/list returns (RoleListResponse)
// 获取去权限规则表
@handler getPermissionRuleList
post /permission/rule/list returns (PermissionRuleListResponse)
// 获取用户登录日志列表
@handler getUserLoginLogList
post /user/login/log/list returns (UserLoginLogListResponse)
// 获取用户第三方登录列表
@handler getUserThirdPartyLoginList
post /user/third/party/login/list returns (UserThirdPartyLoginListResponse)
// 获取用户存储配置列表
@handler getAllStorageList
post /user/storage/config/list returns (AllStorageListResponse)
// 获取所有评论列表
@handler getAllCommentList
post /comment/list returns (AllCommentListResponse)
} }

View File

@@ -381,6 +381,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
Path: "/image/all/list", Path: "/image/all/list",
Handler: storage.QueryAllImageListHandler(serverCtx), Handler: storage.QueryAllImageListHandler(serverCtx),
}, },
{
Method: http.MethodPost,
Path: "/image/bed/upload",
Handler: storage.ImageBedUploadHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/image/bed/upload/list",
Handler: storage.GetImageBedUploadListHandler(serverCtx),
},
{ {
Method: http.MethodPost, Method: http.MethodPost,
Path: "/image/delete", Path: "/image/delete",
@@ -411,6 +421,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
Path: "/image/recent/list", Path: "/image/recent/list",
Handler: storage.QueryRecentImageListHandler(serverCtx), Handler: storage.QueryRecentImageListHandler(serverCtx),
}, },
{
Method: http.MethodPost,
Path: "/image/recover",
Handler: storage.RecoverImageHandler(serverCtx),
},
{ {
Method: http.MethodPost, Method: http.MethodPost,
Path: "/image/search", Path: "/image/search",
@@ -468,11 +483,41 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
rest.WithMiddlewares( rest.WithMiddlewares(
[]rest.Middleware{serverCtx.SecurityHeadersMiddleware, serverCtx.CasbinVerifyMiddleware, serverCtx.NonceMiddleware, serverCtx.AuthMiddleware}, []rest.Middleware{serverCtx.SecurityHeadersMiddleware, serverCtx.CasbinVerifyMiddleware, serverCtx.NonceMiddleware, serverCtx.AuthMiddleware},
[]rest.Route{ []rest.Route{
{
Method: http.MethodPost,
Path: "/comment/list",
Handler: system.GetAllCommentListHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/permission/rule/list",
Handler: system.GetPermissionRuleListHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/role/list",
Handler: system.GetAllRoleListHandler(serverCtx),
},
{ {
Method: http.MethodPost, Method: http.MethodPost,
Path: "/user/list", Path: "/user/list",
Handler: system.GetUserListHandler(serverCtx), Handler: system.GetUserListHandler(serverCtx),
}, },
{
Method: http.MethodPost,
Path: "/user/login/log/list",
Handler: system.GetUserLoginLogListHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/user/storage/config/list",
Handler: system.GetAllStorageListHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/user/third/party/login/list",
Handler: system.GetUserThirdPartyLoginListHandler(serverCtx),
},
}..., }...,
), ),
rest.WithJwt(serverCtx.Config.Auth.AccessSecret), rest.WithJwt(serverCtx.Config.Auth.AccessSecret),

View File

@@ -0,0 +1,29 @@
package storage
import (
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/storage"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetImageBedUploadListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.ImageBedUploadListRequest
if err := httpx.Parse(r, &req); err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
return
}
l := storage.NewGetImageBedUploadListLogic(r.Context(), svcCtx)
resp, err := l.GetImageBedUploadList(&req)
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,21 @@
package storage
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/storage"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func ImageBedUploadHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := storage.NewImageBedUploadLogic(r.Context(), svcCtx)
resp, err := l.ImageBedUpload(r)
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,29 @@
package storage
import (
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/storage"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"schisandra-album-cloud-microservices/common/xhttp"
)
func RecoverImageHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.RecoverImageRequest
if err := httpx.Parse(r, &req); err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
return
}
l := storage.NewRecoverImageLogic(r.Context(), svcCtx)
resp, err := l.RecoverImage(&req)
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,21 @@
package system
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/system"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetAllCommentListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := system.NewGetAllCommentListLogic(r.Context(), svcCtx)
resp, err := l.GetAllCommentList()
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,21 @@
package system
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/system"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetAllRoleListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := system.NewGetAllRoleListLogic(r.Context(), svcCtx)
resp, err := l.GetAllRoleList()
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,21 @@
package system
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/system"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetAllStorageListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := system.NewGetAllStorageListLogic(r.Context(), svcCtx)
resp, err := l.GetAllStorageList()
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,21 @@
package system
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/system"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetPermissionRuleListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := system.NewGetPermissionRuleListLogic(r.Context(), svcCtx)
resp, err := l.GetPermissionRuleList()
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,21 @@
package system
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/system"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetUserLoginLogListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := system.NewGetUserLoginLogListLogic(r.Context(), svcCtx)
resp, err := l.GetUserLoginLogList()
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,21 @@
package system
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/system"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetUserThirdPartyLoginListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := system.NewGetUserThirdPartyLoginListLogic(r.Context(), svcCtx)
resp, err := l.GetUserThirdPartyLoginList()
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,134 @@
package storage
import (
"context"
"encoding/json"
"errors"
"github.com/redis/go-redis/v9"
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
"schisandra-album-cloud-microservices/common/constant"
"schisandra-album-cloud-microservices/common/encrypt"
"schisandra-album-cloud-microservices/common/storage/config"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetImageBedUploadListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetImageBedUploadListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetImageBedUploadListLogic {
return &GetImageBedUploadListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetImageBedUploadListLogic) GetImageBedUploadList(req *types.ImageBedUploadListRequest) (resp *types.ImageBedUploadListResponse, err error) {
uid, ok := l.ctx.Value("user_id").(string)
if !ok {
return nil, errors.New("user_id not found")
}
storageImgBed := l.svcCtx.DB.ScaStorageImgBed
imgBeds, err := storageImgBed.Where(
storageImgBed.UserID.Eq(uid),
storageImgBed.Provider.Eq(req.Provider),
storageImgBed.Bucket.Eq(req.Bucket)).Find()
if err != nil {
return nil, err
}
cacheKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, req.Provider)
if err != nil {
return nil, errors.New("get oss config failed")
}
//service, err := l.svcCtx.StorageManager.GetStorage(uid, ossConfig)
//if err != nil {
// return nil, errors.New("get storage failed")
//}
var records []types.ImageBedUploadMeta
for _, imgBed := range imgBeds {
records = append(records, types.ImageBedUploadMeta{
ID: imgBed.ID,
FileName: imgBed.FileName,
FileSize: imgBed.FileSize,
FileType: imgBed.FileType,
Path: ossConfig.Endpoint + "/" + ossConfig.BucketName + "/" + imgBed.Path,
Thumbnail: ossConfig.Endpoint + "/" + ossConfig.BucketName + "/" + imgBed.ThumbPath,
CreatedAt: imgBed.CreatedAt.Format("2006-01-02 15:04:05"),
Width: int64(imgBed.Width),
Height: int64(imgBed.Height),
})
}
return &types.ImageBedUploadListResponse{
Records: records,
}, nil
}
// 提取解密操作为函数
func (l *GetImageBedUploadListLogic) decryptConfig(dbConfig *model.ScaStorageConfig) (*config.StorageConfig, error) {
accessKey, err := encrypt.Decrypt(dbConfig.AccessKey, l.svcCtx.Config.Encrypt.Key)
if err != nil {
return nil, errors.New("decrypt access key failed")
}
secretKey, err := encrypt.Decrypt(dbConfig.SecretKey, l.svcCtx.Config.Encrypt.Key)
if err != nil {
return nil, errors.New("decrypt secret key failed")
}
return &config.StorageConfig{
Provider: dbConfig.Provider,
Endpoint: dbConfig.Endpoint,
AccessKey: accessKey,
SecretKey: secretKey,
BucketName: dbConfig.Bucket,
Region: dbConfig.Region,
}, nil
}
// 从缓存或数据库中获取 OSS 配置
func (l *GetImageBedUploadListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*config.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed")
}
var ossConfig *config.StorageConfig
if result != "" {
var redisOssConfig model.ScaStorageConfig
if err = json.Unmarshal([]byte(result), &redisOssConfig); err != nil {
return nil, errors.New("unmarshal oss config failed")
}
return l.decryptConfig(&redisOssConfig)
}
// 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First()
if err != nil {
return nil, err
}
// 缓存数据库配置
ossConfig, err = l.decryptConfig(dbOssConfig)
if err != nil {
return nil, err
}
marshalData, err := json.Marshal(dbOssConfig)
if err != nil {
return nil, errors.New("marshal oss config failed")
}
err = l.svcCtx.RedisClient.Set(l.ctx, cacheKey, marshalData, 0).Err()
if err != nil {
return nil, errors.New("set oss config failed")
}
return ossConfig, nil
}

View File

@@ -0,0 +1,177 @@
package storage
import (
"context"
"encoding/json"
"errors"
"fmt"
"github.com/ccpwcn/kgo"
"github.com/redis/go-redis/v9"
"net/http"
"path"
"path/filepath"
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
"schisandra-album-cloud-microservices/common/constant"
"schisandra-album-cloud-microservices/common/encrypt"
"schisandra-album-cloud-microservices/common/storage/config"
"strings"
"time"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type ImageBedUploadLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewImageBedUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ImageBedUploadLogic {
return &ImageBedUploadLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *ImageBedUploadLogic) ImageBedUpload(r *http.Request) (resp *types.ImageBedUploadResponse, err error) {
uid, ok := l.ctx.Value("user_id").(string)
if !ok {
return nil, errors.New("user_id not found")
}
formValue := r.PostFormValue("data")
var result types.ImageBedMeta
if err := json.Unmarshal([]byte(formValue), &result); err != nil {
return nil, errors.New("invalid result")
}
file, header, err := r.FormFile("file")
if err != nil {
return nil, errors.New("file not found")
}
defer file.Close()
// 解析缩略图
thumbFile, _, err := r.FormFile("thumbnail")
if err != nil {
return nil, errors.New("thumbnail not found")
}
defer thumbFile.Close()
// 上传文件到OSS
cacheKey := constant.UserOssConfigPrefix + uid + ":" + result.Provider
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, result.Provider)
if err != nil {
return nil, errors.New("get oss config failed")
}
service, err := l.svcCtx.StorageManager.GetStorage(uid, ossConfig)
if err != nil {
return nil, errors.New("get storage failed")
}
filePath := path.Join(
constant.ImageBedSpace,
constant.ImageSpace,
uid,
time.Now().Format("2006/01"), // 按年/月划分目录
fmt.Sprintf("%s_%s%s", strings.TrimSuffix(header.Filename, filepath.Ext(header.Filename)), kgo.SimpleUuid(), filepath.Ext(header.Filename)),
)
_, err = service.UploadFileSimple(l.ctx, ossConfig.BucketName, filePath, file, map[string]string{
"Content-Type": header.Header.Get("Content-Type")})
// 上传缩略图到OSS
if err != nil {
return nil, errors.New("upload file failed")
}
thumbFilePath := path.Join(
constant.ImageBedSpace,
constant.ThumbnailSpace,
uid,
time.Now().Format("2006/01"), // 按年/月划分目录
fmt.Sprintf("%s_%s%s", strings.TrimSuffix(header.Filename, filepath.Ext(header.Filename)), kgo.SimpleUuid(), filepath.Ext(header.Filename)),
)
_, err = service.UploadFileSimple(l.ctx, ossConfig.BucketName, thumbFilePath, thumbFile, map[string]string{
"Content-Type": header.Header.Get("Content-Type")})
if err != nil {
return nil, errors.New("upload file failed")
}
imgBed := model.ScaStorageImgBed{
UserID: uid,
Provider: result.Provider,
Bucket: ossConfig.BucketName,
Path: filePath,
ThumbPath: thumbFilePath,
FileSize: header.Size,
FileType: header.Header.Get("Content-Type"),
FileName: header.Filename,
Width: float64(result.Width),
Height: float64(result.Height),
}
err = l.svcCtx.DB.ScaStorageImgBed.Create(&imgBed)
if err != nil {
return nil, errors.New("create image bed failed")
}
return &types.ImageBedUploadResponse{ID: imgBed.ID}, nil
}
// 提取解密操作为函数
func (l *ImageBedUploadLogic) decryptConfig(dbConfig *model.ScaStorageConfig) (*config.StorageConfig, error) {
accessKey, err := encrypt.Decrypt(dbConfig.AccessKey, l.svcCtx.Config.Encrypt.Key)
if err != nil {
return nil, errors.New("decrypt access key failed")
}
secretKey, err := encrypt.Decrypt(dbConfig.SecretKey, l.svcCtx.Config.Encrypt.Key)
if err != nil {
return nil, errors.New("decrypt secret key failed")
}
return &config.StorageConfig{
Provider: dbConfig.Provider,
Endpoint: dbConfig.Endpoint,
AccessKey: accessKey,
SecretKey: secretKey,
BucketName: dbConfig.Bucket,
Region: dbConfig.Region,
}, nil
}
// 从缓存或数据库中获取 OSS 配置
func (l *ImageBedUploadLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*config.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed")
}
var ossConfig *config.StorageConfig
if result != "" {
var redisOssConfig model.ScaStorageConfig
if err = json.Unmarshal([]byte(result), &redisOssConfig); err != nil {
return nil, errors.New("unmarshal oss config failed")
}
return l.decryptConfig(&redisOssConfig)
}
// 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First()
if err != nil {
return nil, err
}
// 缓存数据库配置
ossConfig, err = l.decryptConfig(dbOssConfig)
if err != nil {
return nil, err
}
marshalData, err := json.Marshal(dbOssConfig)
if err != nil {
return nil, errors.New("marshal oss config failed")
}
err = l.svcCtx.RedisClient.Set(l.ctx, cacheKey, marshalData, 0).Err()
if err != nil {
return nil, errors.New("set oss config failed")
}
return ossConfig, nil
}

View File

@@ -0,0 +1,48 @@
package storage
import (
"context"
"errors"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type RecoverImageLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewRecoverImageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RecoverImageLogic {
return &RecoverImageLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *RecoverImageLogic) RecoverImage(req *types.RecoverImageRequest) (resp string, err error) {
uid, ok := l.ctx.Value("user_id").(string)
if !ok {
return "", errors.New("user_id not found")
}
storageInfo := l.svcCtx.DB.ScaStorageInfo
info, err := storageInfo.Where(
storageInfo.UserID.Eq(uid),
storageInfo.ID.Eq(req.ID),
storageInfo.Provider.Eq(req.Provider),
storageInfo.Bucket.Eq(req.Bucket),
).Update(storageInfo.DeletedAt, nil)
if err != nil {
return "", err
}
if info.RowsAffected == 0 {
return "", errors.New("image not found")
}
return "success", nil
}

View File

@@ -0,0 +1,36 @@
package system
import (
"context"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetAllCommentListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetAllCommentListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAllCommentListLogic {
return &GetAllCommentListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetAllCommentListLogic) GetAllCommentList() (resp *types.AllCommentListResponse, err error) {
commentReply := l.svcCtx.DB.ScaCommentReply
var records []types.CommentReplyMeta
err = commentReply.Scan(&records)
if err != nil {
return nil, err
}
return &types.AllCommentListResponse{
Records: records,
}, nil
}

View File

@@ -0,0 +1,33 @@
package system
import (
"context"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetAllRoleListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetAllRoleListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAllRoleListLogic {
return &GetAllRoleListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetAllRoleListLogic) GetAllRoleList() (resp *types.RoleListResponse, err error) {
authRole := l.svcCtx.DB.ScaAuthRole
var roles []types.RoleMeta
err = authRole.Scan(&roles)
if err != nil {
return nil, err
}
return &types.RoleListResponse{Records: roles}, nil
}

View File

@@ -0,0 +1,30 @@
package system
import (
"context"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetAllStorageListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetAllStorageListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAllStorageListLogic {
return &GetAllStorageListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetAllStorageListLogic) GetAllStorageList() (resp *types.AllStorageListResponse, err error) {
// todo: add your logic here and delete this line
return
}

View File

@@ -0,0 +1,36 @@
package system
import (
"context"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetPermissionRuleListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetPermissionRuleListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPermissionRuleListLogic {
return &GetPermissionRuleListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetPermissionRuleListLogic) GetPermissionRuleList() (resp *types.PermissionRuleListResponse, err error) {
permissionRule := l.svcCtx.DB.ScaAuthPermissionRule
var permissionRuleList []types.PermissionRuleMeta
err = permissionRule.Scan(&permissionRuleList)
if err != nil {
return nil, err
}
return &types.PermissionRuleListResponse{Records: permissionRuleList}, nil
}

View File

@@ -2,7 +2,6 @@ package system
import ( import (
"context" "context"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc" "schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types" "schisandra-album-cloud-microservices/app/auth/api/internal/types"
@@ -24,7 +23,28 @@ func NewGetUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUs
} }
func (l *GetUserListLogic) GetUserList() (resp *types.UserInfoListResponse, err error) { func (l *GetUserListLogic) GetUserList() (resp *types.UserInfoListResponse, err error) {
// todo: add your logic here and delete this line authUser := l.svcCtx.DB.ScaAuthUser
var userMetaList []types.UserMeta
return err = authUser.Select(
authUser.ID,
authUser.UID,
authUser.Username,
authUser.Nickname,
authUser.Email,
authUser.Phone,
authUser.Gender,
authUser.Avatar,
authUser.Location,
authUser.Company,
authUser.Blog,
authUser.Introduce,
authUser.Status,
authUser.CreatedAt,
authUser.UpdatedAt,
authUser.DeletedAt,
).Scan(&userMetaList)
if err != nil {
return nil, err
}
return &types.UserInfoListResponse{Records: userMetaList}, nil
} }

View File

@@ -0,0 +1,35 @@
package system
import (
"context"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetUserLoginLogListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetUserLoginLogListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserLoginLogListLogic {
return &GetUserLoginLogListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetUserLoginLogListLogic) GetUserLoginLogList() (resp *types.UserLoginLogListResponse, err error) {
userDevice := l.svcCtx.DB.ScaAuthUserDevice
var userLoginLogs []types.UserLoginLogMeta
err = userDevice.Scan(&userLoginLogs)
if err != nil {
return nil, err
}
return &types.UserLoginLogListResponse{Records: userLoginLogs}, nil
}

View File

@@ -0,0 +1,34 @@
package system
import (
"context"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetUserThirdPartyLoginListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetUserThirdPartyLoginListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserThirdPartyLoginListLogic {
return &GetUserThirdPartyLoginListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetUserThirdPartyLoginListLogic) GetUserThirdPartyLoginList() (resp *types.UserThirdPartyLoginListResponse, err error) {
userSocial := l.svcCtx.DB.ScaAuthUserSocial
var userSocialList []types.UserThirdPartyLoginMeta
err = userSocial.Scan(&userSocialList)
if err != nil {
}
return &types.UserThirdPartyLoginListResponse{Records: userSocialList}, nil
}

View File

@@ -116,3 +116,10 @@ type ZincFileInfo struct {
Province string `json:"province"` Province string `json:"province"`
City string `json:"city"` City string `json:"city"`
} }
type ImageBedMeta struct {
Provider string `json:"provider"`
Bucket string `json:"bucket"`
Width int64 `json:"width"`
Height int64 `json:"height"`
}

View File

@@ -75,6 +75,10 @@ type AlbumRenameResponse struct {
Name string `json:"name"` Name string `json:"name"`
} }
type AllCommentListResponse struct {
Records []CommentReplyMeta `json:"records"`
}
type AllImageDetail struct { type AllImageDetail struct {
Date string `json:"date"` Date string `json:"date"`
List []ImageMeta `json:"list"` List []ImageMeta `json:"list"`
@@ -91,6 +95,10 @@ type AllImageListResponse struct {
Records []AllImageDetail `json:"records"` Records []AllImageDetail `json:"records"`
} }
type AllStorageListResponse struct {
Records []StorageConfigMeta `json:"records"`
}
type BucketCapacityRequest struct { type BucketCapacityRequest struct {
Provider string `json:"provider"` Provider string `json:"provider"`
Bucket string `json:"bucket"` Bucket string `json:"bucket"`
@@ -149,6 +157,31 @@ type CommentListRequest struct {
IsHot bool `json:"is_hot,default=true,optional"` IsHot bool `json:"is_hot,default=true,optional"`
} }
type CommentReplyMeta struct {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
TopicID int64 `json:"topic_id"`
TopicType string `json:"topic_type"`
Content string `json:"content"`
CommentType string `json:"comment_type"`
ReplyTo int64 `json:"reply_to"`
ReplyID int64 `json:"reply_id"`
ReplyUser string `json:"reply_user"`
Author string `json:"author"`
Likes int64 `json:"likes"`
ReplyCount int64 `json:"reply_count"`
ImagePath string `json:"image_path"`
Browser string `json:"browser"`
OperatingSystem string `json:"operating_system"`
BrowserVersion string `json:"browser_version"`
CommentIP string `json:"comment_ip"`
Loaction string `json:"loaction"`
Agent string `json:"agent"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
type CommentRequest struct { type CommentRequest struct {
Content string `json:"content"` Content string `json:"content"`
Images string `json:"images,optional"` Images string `json:"images,optional"`
@@ -248,6 +281,31 @@ type HeatmapMeta struct {
Count int64 `json:"count"` Count int64 `json:"count"`
} }
type ImageBedUploadListRequest struct {
Provider string `json:"provider"`
Bucket string `json:"bucket"`
}
type ImageBedUploadListResponse struct {
Records []ImageBedUploadMeta `json:"records"`
}
type ImageBedUploadMeta struct {
ID int64 `json:"id"`
FileName string `json:"file_name"`
FileSize int64 `json:"file_size"`
FileType string `json:"file_type"`
Path string `json:"path"`
Thumbnail string `json:"thumbnail"`
CreatedAt string `json:"created_at"`
Width int64 `json:"width"`
Height int64 `json:"height"`
}
type ImageBedUploadResponse struct {
ID int64 `json:"id"`
}
type ImageMeta struct { type ImageMeta struct {
ID int64 `json:"id"` ID int64 `json:"id"`
FileName string `json:"file_name"` FileName string `json:"file_name"`
@@ -325,6 +383,21 @@ type OAuthWechatRequest struct {
ClientId string `json:"client_id"` ClientId string `json:"client_id"`
} }
type PermissionRuleListResponse struct {
Records []PermissionRuleMeta `json:"records"`
}
type PermissionRuleMeta struct {
ID int64 `json:"id"`
Ptype string `json:"ptype"`
V0 string `json:"v0"`
V1 string `json:"v1"`
V2 string `json:"v2"`
V3 string `json:"v3"`
V4 string `json:"v4"`
V5 string `json:"v5"`
}
type PhoneLoginRequest struct { type PhoneLoginRequest struct {
Phone string `json:"phone"` Phone string `json:"phone"`
Captcha string `json:"captcha"` Captcha string `json:"captcha"`
@@ -367,6 +440,12 @@ type RecentListResponse struct {
Records []AllImageDetail `json:"records"` Records []AllImageDetail `json:"records"`
} }
type RecoverImageRequest struct {
ID int64 `json:"id"`
Provider string `json:"provider"`
Bucket string `json:"bucket"`
}
type RefreshTokenResponse struct { type RefreshTokenResponse struct {
AccessToken string `json:"access_token"` AccessToken string `json:"access_token"`
ExpireAt int64 `json:"expire_at"` ExpireAt int64 `json:"expire_at"`
@@ -409,6 +488,19 @@ type ResetPasswordRequest struct {
Repassword string `json:"repassword"` Repassword string `json:"repassword"`
} }
type RoleListResponse struct {
Records []RoleMeta `json:"records"`
}
type RoleMeta struct {
ID int64 `json:"id"`
RoleName string `json:"role_name"`
RoleKey string `json:"role_key"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
type RotateCaptchaResponse struct { type RotateCaptchaResponse struct {
Key string `json:"key"` Key string `json:"key"`
Image string `json:"image"` Image string `json:"image"`
@@ -638,15 +730,47 @@ type UserInfoListResponse struct {
Records []UserMeta `json:"records"` Records []UserMeta `json:"records"`
} }
type UserLoginLogListResponse struct {
Records []UserLoginLogMeta `json:"records"`
}
type UserLoginLogMeta struct {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
IP string `json:"ip"`
Location string `json:"location"`
Agent string `json:"agent"`
CreatedAt string `json:"created_at"`
Browser string `json:"browser"`
OperatingSystem string `json:"operating_system"`
BrowserVersion string `json:"browser_version"`
Mobile string `json:"mobile"`
Bot int64 `json:"bot"`
Mozilla string `json:"mozilla"`
Platform string `json:"platform"`
EngineName string `json:"engine_name"`
EngineVersion string `json:"engine_version"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
type UserMeta struct { type UserMeta struct {
ID int64 `json:"id"` ID int64 `json:"id"`
UID string `json:"uid"`
Username string `json:"username"` Username string `json:"username"`
Nickname string `json:"nickname"` Nickname string `json:"nickname"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
Email string `json:"email"` Email string `json:"email"`
Phone string `json:"phone"` Phone string `json:"phone"`
Gender string `json:"gender"`
Introduce string `json:"introduce"`
Blog string `json:"blog"`
Location string `json:"location"`
Company string `json:"company"`
Status int64 `json:"status"` Status int64 `json:"status"`
CreatedAt string `json:"created_at"` CreatedAt string `json:"created_at"`
UpadatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
} }
type UserSecuritySettingResponse struct { type UserSecuritySettingResponse struct {
@@ -659,6 +783,21 @@ type UserSecuritySettingResponse struct {
SetPassword bool `json:"set_password,default=false"` SetPassword bool `json:"set_password,default=false"`
} }
type UserThirdPartyLoginListResponse struct {
Records []UserThirdPartyLoginMeta `json:"records"`
}
type UserThirdPartyLoginMeta struct {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
OpenID string `json:"open_id"`
Source string `json:"source"`
Status int64 `json:"status"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
DeletedAt string `json:"deleted_at"`
}
type UserUploadInfoResponse struct { type UserUploadInfoResponse struct {
ImageCount int64 `json:"image_count"` ImageCount int64 `json:"image_count"`
TodayUploadCount int64 `json:"today_upload_count"` TodayUploadCount int64 `json:"today_upload_count"`
@@ -673,8 +812,3 @@ type WechatOffiaccountLoginRequest struct {
Openid string `json:"openid"` Openid string `json:"openid"`
ClientId string `json:"client_id"` ClientId string `json:"client_id"`
} }
type ImageStreamResponse struct {
ContentType string `json:"content_type"`
Size int64 `json:"size"`
}

View File

@@ -119,6 +119,7 @@ func main() {
scaStorageShare := g.GenerateModel("sca_storage_share", fieldOpts...) scaStorageShare := g.GenerateModel("sca_storage_share", fieldOpts...)
scaStorageShareVisit := g.GenerateModel("sca_storage_share_visit", fieldOpts...) scaStorageShareVisit := g.GenerateModel("sca_storage_share_visit", fieldOpts...)
scaStorageExtra := g.GenerateModel("sca_storage_extra", fieldOpts...) scaStorageExtra := g.GenerateModel("sca_storage_extra", fieldOpts...)
scaStorageImgBed := g.GenerateModel("sca_storage_img_bed", fieldOpts...)
g.ApplyBasic( g.ApplyBasic(
scaAuthMenu, scaAuthMenu,
@@ -141,6 +142,7 @@ func main() {
scaStorageShare, scaStorageShare,
scaStorageShareVisit, scaStorageShareVisit,
scaStorageExtra, scaStorageExtra,
scaStorageImgBed,
) )
g.Execute() g.Execute()

View File

@@ -0,0 +1,36 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package model
import (
"time"
"gorm.io/gorm"
)
const TableNameScaStorageImgBed = "sca_storage_img_bed"
// ScaStorageImgBed mapped from table <sca_storage_img_bed>
type ScaStorageImgBed struct {
ID int64 `gorm:"column:id;type:bigint(20);primaryKey;autoIncrement:true;comment:主键;primary_key" json:"id,string"` // 主键
UserID string `gorm:"column:user_id;type:varchar(50);comment:用户ID" json:"user_id"` // 用户ID
Provider string `gorm:"column:provider;type:varchar(50);comment:供应商" json:"provider"` // 供应商
Bucket string `gorm:"column:bucket;type:varchar(100);comment:存储桶" json:"bucket"` // 存储桶
Path string `gorm:"column:path;type:text;comment:路径" json:"path"` // 路径
ThumbPath string `gorm:"column:thumb_path;type:text;comment:缩略图路径" json:"thumb_path"` // 缩略图路径
FileName string `gorm:"column:file_name;type:varchar(100);comment:文件名称" json:"file_name"` // 文件名称
FileSize int64 `gorm:"column:file_size;type:bigint(20);comment:文件大小" json:"file_size"` // 文件大小
FileType string `gorm:"column:file_type;type:varchar(50);comment:文件类型" json:"file_type"` // 文件类型
Width float64 `gorm:"column:width;type:double;comment:宽" json:"width"` // 宽
Height float64 `gorm:"column:height;type:double;comment:高" json:"height"` // 高
CreatedAt time.Time `gorm:"column:created_at;type:timestamp;autoCreateTime;comment:创建时间" json:"created_at"` // 创建时间
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp;autoUpdateTime;comment:更新时间" json:"updated_at"` // 更新时间
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp;comment:删除时间" json:"deleted_at"` // 删除时间
}
// TableName ScaStorageImgBed's table name
func (*ScaStorageImgBed) TableName() string {
return TableNameScaStorageImgBed
}

View File

@@ -29,6 +29,7 @@ var (
ScaStorageAlbum *scaStorageAlbum ScaStorageAlbum *scaStorageAlbum
ScaStorageConfig *scaStorageConfig ScaStorageConfig *scaStorageConfig
ScaStorageExtra *scaStorageExtra ScaStorageExtra *scaStorageExtra
ScaStorageImgBed *scaStorageImgBed
ScaStorageInfo *scaStorageInfo ScaStorageInfo *scaStorageInfo
ScaStorageLocation *scaStorageLocation ScaStorageLocation *scaStorageLocation
ScaStorageShare *scaStorageShare ScaStorageShare *scaStorageShare
@@ -53,6 +54,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
ScaStorageAlbum = &Q.ScaStorageAlbum ScaStorageAlbum = &Q.ScaStorageAlbum
ScaStorageConfig = &Q.ScaStorageConfig ScaStorageConfig = &Q.ScaStorageConfig
ScaStorageExtra = &Q.ScaStorageExtra ScaStorageExtra = &Q.ScaStorageExtra
ScaStorageImgBed = &Q.ScaStorageImgBed
ScaStorageInfo = &Q.ScaStorageInfo ScaStorageInfo = &Q.ScaStorageInfo
ScaStorageLocation = &Q.ScaStorageLocation ScaStorageLocation = &Q.ScaStorageLocation
ScaStorageShare = &Q.ScaStorageShare ScaStorageShare = &Q.ScaStorageShare
@@ -78,6 +80,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
ScaStorageAlbum: newScaStorageAlbum(db, opts...), ScaStorageAlbum: newScaStorageAlbum(db, opts...),
ScaStorageConfig: newScaStorageConfig(db, opts...), ScaStorageConfig: newScaStorageConfig(db, opts...),
ScaStorageExtra: newScaStorageExtra(db, opts...), ScaStorageExtra: newScaStorageExtra(db, opts...),
ScaStorageImgBed: newScaStorageImgBed(db, opts...),
ScaStorageInfo: newScaStorageInfo(db, opts...), ScaStorageInfo: newScaStorageInfo(db, opts...),
ScaStorageLocation: newScaStorageLocation(db, opts...), ScaStorageLocation: newScaStorageLocation(db, opts...),
ScaStorageShare: newScaStorageShare(db, opts...), ScaStorageShare: newScaStorageShare(db, opts...),
@@ -104,6 +107,7 @@ type Query struct {
ScaStorageAlbum scaStorageAlbum ScaStorageAlbum scaStorageAlbum
ScaStorageConfig scaStorageConfig ScaStorageConfig scaStorageConfig
ScaStorageExtra scaStorageExtra ScaStorageExtra scaStorageExtra
ScaStorageImgBed scaStorageImgBed
ScaStorageInfo scaStorageInfo ScaStorageInfo scaStorageInfo
ScaStorageLocation scaStorageLocation ScaStorageLocation scaStorageLocation
ScaStorageShare scaStorageShare ScaStorageShare scaStorageShare
@@ -131,6 +135,7 @@ func (q *Query) clone(db *gorm.DB) *Query {
ScaStorageAlbum: q.ScaStorageAlbum.clone(db), ScaStorageAlbum: q.ScaStorageAlbum.clone(db),
ScaStorageConfig: q.ScaStorageConfig.clone(db), ScaStorageConfig: q.ScaStorageConfig.clone(db),
ScaStorageExtra: q.ScaStorageExtra.clone(db), ScaStorageExtra: q.ScaStorageExtra.clone(db),
ScaStorageImgBed: q.ScaStorageImgBed.clone(db),
ScaStorageInfo: q.ScaStorageInfo.clone(db), ScaStorageInfo: q.ScaStorageInfo.clone(db),
ScaStorageLocation: q.ScaStorageLocation.clone(db), ScaStorageLocation: q.ScaStorageLocation.clone(db),
ScaStorageShare: q.ScaStorageShare.clone(db), ScaStorageShare: q.ScaStorageShare.clone(db),
@@ -165,6 +170,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
ScaStorageAlbum: q.ScaStorageAlbum.replaceDB(db), ScaStorageAlbum: q.ScaStorageAlbum.replaceDB(db),
ScaStorageConfig: q.ScaStorageConfig.replaceDB(db), ScaStorageConfig: q.ScaStorageConfig.replaceDB(db),
ScaStorageExtra: q.ScaStorageExtra.replaceDB(db), ScaStorageExtra: q.ScaStorageExtra.replaceDB(db),
ScaStorageImgBed: q.ScaStorageImgBed.replaceDB(db),
ScaStorageInfo: q.ScaStorageInfo.replaceDB(db), ScaStorageInfo: q.ScaStorageInfo.replaceDB(db),
ScaStorageLocation: q.ScaStorageLocation.replaceDB(db), ScaStorageLocation: q.ScaStorageLocation.replaceDB(db),
ScaStorageShare: q.ScaStorageShare.replaceDB(db), ScaStorageShare: q.ScaStorageShare.replaceDB(db),
@@ -189,6 +195,7 @@ type queryCtx struct {
ScaStorageAlbum IScaStorageAlbumDo ScaStorageAlbum IScaStorageAlbumDo
ScaStorageConfig IScaStorageConfigDo ScaStorageConfig IScaStorageConfigDo
ScaStorageExtra IScaStorageExtraDo ScaStorageExtra IScaStorageExtraDo
ScaStorageImgBed IScaStorageImgBedDo
ScaStorageInfo IScaStorageInfoDo ScaStorageInfo IScaStorageInfoDo
ScaStorageLocation IScaStorageLocationDo ScaStorageLocation IScaStorageLocationDo
ScaStorageShare IScaStorageShareDo ScaStorageShare IScaStorageShareDo
@@ -213,6 +220,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx {
ScaStorageAlbum: q.ScaStorageAlbum.WithContext(ctx), ScaStorageAlbum: q.ScaStorageAlbum.WithContext(ctx),
ScaStorageConfig: q.ScaStorageConfig.WithContext(ctx), ScaStorageConfig: q.ScaStorageConfig.WithContext(ctx),
ScaStorageExtra: q.ScaStorageExtra.WithContext(ctx), ScaStorageExtra: q.ScaStorageExtra.WithContext(ctx),
ScaStorageImgBed: q.ScaStorageImgBed.WithContext(ctx),
ScaStorageInfo: q.ScaStorageInfo.WithContext(ctx), ScaStorageInfo: q.ScaStorageInfo.WithContext(ctx),
ScaStorageLocation: q.ScaStorageLocation.WithContext(ctx), ScaStorageLocation: q.ScaStorageLocation.WithContext(ctx),
ScaStorageShare: q.ScaStorageShare.WithContext(ctx), ScaStorageShare: q.ScaStorageShare.WithContext(ctx),

View File

@@ -0,0 +1,432 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package query
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"gorm.io/gen"
"gorm.io/gen/field"
"gorm.io/plugin/dbresolver"
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
)
func newScaStorageImgBed(db *gorm.DB, opts ...gen.DOOption) scaStorageImgBed {
_scaStorageImgBed := scaStorageImgBed{}
_scaStorageImgBed.scaStorageImgBedDo.UseDB(db, opts...)
_scaStorageImgBed.scaStorageImgBedDo.UseModel(&model.ScaStorageImgBed{})
tableName := _scaStorageImgBed.scaStorageImgBedDo.TableName()
_scaStorageImgBed.ALL = field.NewAsterisk(tableName)
_scaStorageImgBed.ID = field.NewInt64(tableName, "id")
_scaStorageImgBed.UserID = field.NewString(tableName, "user_id")
_scaStorageImgBed.Provider = field.NewString(tableName, "provider")
_scaStorageImgBed.Bucket = field.NewString(tableName, "bucket")
_scaStorageImgBed.Path = field.NewString(tableName, "path")
_scaStorageImgBed.ThumbPath = field.NewString(tableName, "thumb_path")
_scaStorageImgBed.FileName = field.NewString(tableName, "file_name")
_scaStorageImgBed.FileSize = field.NewInt64(tableName, "file_size")
_scaStorageImgBed.FileType = field.NewString(tableName, "file_type")
_scaStorageImgBed.Width = field.NewFloat64(tableName, "width")
_scaStorageImgBed.Height = field.NewFloat64(tableName, "height")
_scaStorageImgBed.CreatedAt = field.NewTime(tableName, "created_at")
_scaStorageImgBed.UpdatedAt = field.NewTime(tableName, "updated_at")
_scaStorageImgBed.DeletedAt = field.NewField(tableName, "deleted_at")
_scaStorageImgBed.fillFieldMap()
return _scaStorageImgBed
}
type scaStorageImgBed struct {
scaStorageImgBedDo
ALL field.Asterisk
ID field.Int64 // 主键
UserID field.String // 用户ID
Provider field.String // 供应商
Bucket field.String // 存储桶
Path field.String // 路径
ThumbPath field.String // 缩略图路径
FileName field.String // 文件名称
FileSize field.Int64 // 文件大小
FileType field.String // 文件类型
Width field.Float64 // 宽
Height field.Float64 // 高
CreatedAt field.Time // 创建时间
UpdatedAt field.Time // 更新时间
DeletedAt field.Field // 删除时间
fieldMap map[string]field.Expr
}
func (s scaStorageImgBed) Table(newTableName string) *scaStorageImgBed {
s.scaStorageImgBedDo.UseTable(newTableName)
return s.updateTableName(newTableName)
}
func (s scaStorageImgBed) As(alias string) *scaStorageImgBed {
s.scaStorageImgBedDo.DO = *(s.scaStorageImgBedDo.As(alias).(*gen.DO))
return s.updateTableName(alias)
}
func (s *scaStorageImgBed) updateTableName(table string) *scaStorageImgBed {
s.ALL = field.NewAsterisk(table)
s.ID = field.NewInt64(table, "id")
s.UserID = field.NewString(table, "user_id")
s.Provider = field.NewString(table, "provider")
s.Bucket = field.NewString(table, "bucket")
s.Path = field.NewString(table, "path")
s.ThumbPath = field.NewString(table, "thumb_path")
s.FileName = field.NewString(table, "file_name")
s.FileSize = field.NewInt64(table, "file_size")
s.FileType = field.NewString(table, "file_type")
s.Width = field.NewFloat64(table, "width")
s.Height = field.NewFloat64(table, "height")
s.CreatedAt = field.NewTime(table, "created_at")
s.UpdatedAt = field.NewTime(table, "updated_at")
s.DeletedAt = field.NewField(table, "deleted_at")
s.fillFieldMap()
return s
}
func (s *scaStorageImgBed) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
_f, ok := s.fieldMap[fieldName]
if !ok || _f == nil {
return nil, false
}
_oe, ok := _f.(field.OrderExpr)
return _oe, ok
}
func (s *scaStorageImgBed) fillFieldMap() {
s.fieldMap = make(map[string]field.Expr, 14)
s.fieldMap["id"] = s.ID
s.fieldMap["user_id"] = s.UserID
s.fieldMap["provider"] = s.Provider
s.fieldMap["bucket"] = s.Bucket
s.fieldMap["path"] = s.Path
s.fieldMap["thumb_path"] = s.ThumbPath
s.fieldMap["file_name"] = s.FileName
s.fieldMap["file_size"] = s.FileSize
s.fieldMap["file_type"] = s.FileType
s.fieldMap["width"] = s.Width
s.fieldMap["height"] = s.Height
s.fieldMap["created_at"] = s.CreatedAt
s.fieldMap["updated_at"] = s.UpdatedAt
s.fieldMap["deleted_at"] = s.DeletedAt
}
func (s scaStorageImgBed) clone(db *gorm.DB) scaStorageImgBed {
s.scaStorageImgBedDo.ReplaceConnPool(db.Statement.ConnPool)
return s
}
func (s scaStorageImgBed) replaceDB(db *gorm.DB) scaStorageImgBed {
s.scaStorageImgBedDo.ReplaceDB(db)
return s
}
type scaStorageImgBedDo struct{ gen.DO }
type IScaStorageImgBedDo interface {
gen.SubQuery
Debug() IScaStorageImgBedDo
WithContext(ctx context.Context) IScaStorageImgBedDo
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
ReplaceDB(db *gorm.DB)
ReadDB() IScaStorageImgBedDo
WriteDB() IScaStorageImgBedDo
As(alias string) gen.Dao
Session(config *gorm.Session) IScaStorageImgBedDo
Columns(cols ...field.Expr) gen.Columns
Clauses(conds ...clause.Expression) IScaStorageImgBedDo
Not(conds ...gen.Condition) IScaStorageImgBedDo
Or(conds ...gen.Condition) IScaStorageImgBedDo
Select(conds ...field.Expr) IScaStorageImgBedDo
Where(conds ...gen.Condition) IScaStorageImgBedDo
Order(conds ...field.Expr) IScaStorageImgBedDo
Distinct(cols ...field.Expr) IScaStorageImgBedDo
Omit(cols ...field.Expr) IScaStorageImgBedDo
Join(table schema.Tabler, on ...field.Expr) IScaStorageImgBedDo
LeftJoin(table schema.Tabler, on ...field.Expr) IScaStorageImgBedDo
RightJoin(table schema.Tabler, on ...field.Expr) IScaStorageImgBedDo
Group(cols ...field.Expr) IScaStorageImgBedDo
Having(conds ...gen.Condition) IScaStorageImgBedDo
Limit(limit int) IScaStorageImgBedDo
Offset(offset int) IScaStorageImgBedDo
Count() (count int64, err error)
Scopes(funcs ...func(gen.Dao) gen.Dao) IScaStorageImgBedDo
Unscoped() IScaStorageImgBedDo
Create(values ...*model.ScaStorageImgBed) error
CreateInBatches(values []*model.ScaStorageImgBed, batchSize int) error
Save(values ...*model.ScaStorageImgBed) error
First() (*model.ScaStorageImgBed, error)
Take() (*model.ScaStorageImgBed, error)
Last() (*model.ScaStorageImgBed, error)
Find() ([]*model.ScaStorageImgBed, error)
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.ScaStorageImgBed, err error)
FindInBatches(result *[]*model.ScaStorageImgBed, batchSize int, fc func(tx gen.Dao, batch int) error) error
Pluck(column field.Expr, dest interface{}) error
Delete(...*model.ScaStorageImgBed) (info gen.ResultInfo, err error)
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
Updates(value interface{}) (info gen.ResultInfo, err error)
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
UpdateFrom(q gen.SubQuery) gen.Dao
Attrs(attrs ...field.AssignExpr) IScaStorageImgBedDo
Assign(attrs ...field.AssignExpr) IScaStorageImgBedDo
Joins(fields ...field.RelationField) IScaStorageImgBedDo
Preload(fields ...field.RelationField) IScaStorageImgBedDo
FirstOrInit() (*model.ScaStorageImgBed, error)
FirstOrCreate() (*model.ScaStorageImgBed, error)
FindByPage(offset int, limit int) (result []*model.ScaStorageImgBed, count int64, err error)
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
Scan(result interface{}) (err error)
Returning(value interface{}, columns ...string) IScaStorageImgBedDo
UnderlyingDB() *gorm.DB
schema.Tabler
}
func (s scaStorageImgBedDo) Debug() IScaStorageImgBedDo {
return s.withDO(s.DO.Debug())
}
func (s scaStorageImgBedDo) WithContext(ctx context.Context) IScaStorageImgBedDo {
return s.withDO(s.DO.WithContext(ctx))
}
func (s scaStorageImgBedDo) ReadDB() IScaStorageImgBedDo {
return s.Clauses(dbresolver.Read)
}
func (s scaStorageImgBedDo) WriteDB() IScaStorageImgBedDo {
return s.Clauses(dbresolver.Write)
}
func (s scaStorageImgBedDo) Session(config *gorm.Session) IScaStorageImgBedDo {
return s.withDO(s.DO.Session(config))
}
func (s scaStorageImgBedDo) Clauses(conds ...clause.Expression) IScaStorageImgBedDo {
return s.withDO(s.DO.Clauses(conds...))
}
func (s scaStorageImgBedDo) Returning(value interface{}, columns ...string) IScaStorageImgBedDo {
return s.withDO(s.DO.Returning(value, columns...))
}
func (s scaStorageImgBedDo) Not(conds ...gen.Condition) IScaStorageImgBedDo {
return s.withDO(s.DO.Not(conds...))
}
func (s scaStorageImgBedDo) Or(conds ...gen.Condition) IScaStorageImgBedDo {
return s.withDO(s.DO.Or(conds...))
}
func (s scaStorageImgBedDo) Select(conds ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.Select(conds...))
}
func (s scaStorageImgBedDo) Where(conds ...gen.Condition) IScaStorageImgBedDo {
return s.withDO(s.DO.Where(conds...))
}
func (s scaStorageImgBedDo) Order(conds ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.Order(conds...))
}
func (s scaStorageImgBedDo) Distinct(cols ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.Distinct(cols...))
}
func (s scaStorageImgBedDo) Omit(cols ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.Omit(cols...))
}
func (s scaStorageImgBedDo) Join(table schema.Tabler, on ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.Join(table, on...))
}
func (s scaStorageImgBedDo) LeftJoin(table schema.Tabler, on ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.LeftJoin(table, on...))
}
func (s scaStorageImgBedDo) RightJoin(table schema.Tabler, on ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.RightJoin(table, on...))
}
func (s scaStorageImgBedDo) Group(cols ...field.Expr) IScaStorageImgBedDo {
return s.withDO(s.DO.Group(cols...))
}
func (s scaStorageImgBedDo) Having(conds ...gen.Condition) IScaStorageImgBedDo {
return s.withDO(s.DO.Having(conds...))
}
func (s scaStorageImgBedDo) Limit(limit int) IScaStorageImgBedDo {
return s.withDO(s.DO.Limit(limit))
}
func (s scaStorageImgBedDo) Offset(offset int) IScaStorageImgBedDo {
return s.withDO(s.DO.Offset(offset))
}
func (s scaStorageImgBedDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IScaStorageImgBedDo {
return s.withDO(s.DO.Scopes(funcs...))
}
func (s scaStorageImgBedDo) Unscoped() IScaStorageImgBedDo {
return s.withDO(s.DO.Unscoped())
}
func (s scaStorageImgBedDo) Create(values ...*model.ScaStorageImgBed) error {
if len(values) == 0 {
return nil
}
return s.DO.Create(values)
}
func (s scaStorageImgBedDo) CreateInBatches(values []*model.ScaStorageImgBed, batchSize int) error {
return s.DO.CreateInBatches(values, batchSize)
}
// Save : !!! underlying implementation is different with GORM
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
func (s scaStorageImgBedDo) Save(values ...*model.ScaStorageImgBed) error {
if len(values) == 0 {
return nil
}
return s.DO.Save(values)
}
func (s scaStorageImgBedDo) First() (*model.ScaStorageImgBed, error) {
if result, err := s.DO.First(); err != nil {
return nil, err
} else {
return result.(*model.ScaStorageImgBed), nil
}
}
func (s scaStorageImgBedDo) Take() (*model.ScaStorageImgBed, error) {
if result, err := s.DO.Take(); err != nil {
return nil, err
} else {
return result.(*model.ScaStorageImgBed), nil
}
}
func (s scaStorageImgBedDo) Last() (*model.ScaStorageImgBed, error) {
if result, err := s.DO.Last(); err != nil {
return nil, err
} else {
return result.(*model.ScaStorageImgBed), nil
}
}
func (s scaStorageImgBedDo) Find() ([]*model.ScaStorageImgBed, error) {
result, err := s.DO.Find()
return result.([]*model.ScaStorageImgBed), err
}
func (s scaStorageImgBedDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.ScaStorageImgBed, err error) {
buf := make([]*model.ScaStorageImgBed, 0, batchSize)
err = s.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
defer func() { results = append(results, buf...) }()
return fc(tx, batch)
})
return results, err
}
func (s scaStorageImgBedDo) FindInBatches(result *[]*model.ScaStorageImgBed, batchSize int, fc func(tx gen.Dao, batch int) error) error {
return s.DO.FindInBatches(result, batchSize, fc)
}
func (s scaStorageImgBedDo) Attrs(attrs ...field.AssignExpr) IScaStorageImgBedDo {
return s.withDO(s.DO.Attrs(attrs...))
}
func (s scaStorageImgBedDo) Assign(attrs ...field.AssignExpr) IScaStorageImgBedDo {
return s.withDO(s.DO.Assign(attrs...))
}
func (s scaStorageImgBedDo) Joins(fields ...field.RelationField) IScaStorageImgBedDo {
for _, _f := range fields {
s = *s.withDO(s.DO.Joins(_f))
}
return &s
}
func (s scaStorageImgBedDo) Preload(fields ...field.RelationField) IScaStorageImgBedDo {
for _, _f := range fields {
s = *s.withDO(s.DO.Preload(_f))
}
return &s
}
func (s scaStorageImgBedDo) FirstOrInit() (*model.ScaStorageImgBed, error) {
if result, err := s.DO.FirstOrInit(); err != nil {
return nil, err
} else {
return result.(*model.ScaStorageImgBed), nil
}
}
func (s scaStorageImgBedDo) FirstOrCreate() (*model.ScaStorageImgBed, error) {
if result, err := s.DO.FirstOrCreate(); err != nil {
return nil, err
} else {
return result.(*model.ScaStorageImgBed), nil
}
}
func (s scaStorageImgBedDo) FindByPage(offset int, limit int) (result []*model.ScaStorageImgBed, count int64, err error) {
result, err = s.Offset(offset).Limit(limit).Find()
if err != nil {
return
}
if size := len(result); 0 < limit && 0 < size && size < limit {
count = int64(size + offset)
return
}
count, err = s.Offset(-1).Limit(-1).Count()
return
}
func (s scaStorageImgBedDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
count, err = s.Count()
if err != nil {
return
}
err = s.Offset(offset).Limit(limit).Scan(result)
return
}
func (s scaStorageImgBedDo) Scan(result interface{}) (err error) {
return s.DO.Scan(result)
}
func (s scaStorageImgBedDo) Delete(models ...*model.ScaStorageImgBed) (result gen.ResultInfo, err error) {
return s.DO.Delete(models)
}
func (s *scaStorageImgBedDo) withDO(do gen.Dao) *scaStorageImgBedDo {
s.DO = *do.(*gen.DO)
return s
}

View File

@@ -3,4 +3,5 @@ package constant
const ( const (
ImageSpace = "image_space" ImageSpace = "image_space"
ThumbnailSpace = "thumbnail_space" ThumbnailSpace = "thumbnail_space"
ImageBedSpace = "image_bed_space"
) )

38
go.mod
View File

@@ -4,7 +4,7 @@ go 1.24.1
require ( require (
github.com/ArtisanCloud/PowerLibs/v3 v3.3.2 github.com/ArtisanCloud/PowerLibs/v3 v3.3.2
github.com/ArtisanCloud/PowerWeChat/v3 v3.4.1 github.com/ArtisanCloud/PowerWeChat/v3 v3.4.3
github.com/Kagami/go-face v0.0.0-20210630145111-0c14797b4d0e github.com/Kagami/go-face v0.0.0-20210630145111-0c14797b4d0e
github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.2.1 github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.2.1
github.com/asjdf/gorm-cache v1.2.3 github.com/asjdf/gorm-cache v1.2.3
@@ -14,7 +14,7 @@ require (
github.com/corona10/goimagehash v1.1.0 github.com/corona10/goimagehash v1.1.0
github.com/duke-git/lancet/v2 v2.3.5 github.com/duke-git/lancet/v2 v2.3.5
github.com/go-resty/resty/v2 v2.16.5 github.com/go-resty/resty/v2 v2.16.5
github.com/golang-jwt/jwt/v5 v5.2.1 github.com/golang-jwt/jwt/v5 v5.2.2
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/landaiqing/go-pixelnebula v0.1.0 github.com/landaiqing/go-pixelnebula v0.1.0
github.com/lionsoul2014/ip2region/binding/golang v0.0.0-20241220152942-06eb5c6e8230 github.com/lionsoul2014/ip2region/binding/golang v0.0.0-20241220152942-06eb5c6e8230
@@ -27,19 +27,19 @@ require (
github.com/paulmach/orb v0.11.1 github.com/paulmach/orb v0.11.1
github.com/pelletier/go-toml/v2 v2.2.3 github.com/pelletier/go-toml/v2 v2.2.3
github.com/pkg6/go-sms v0.1.2 github.com/pkg6/go-sms v0.1.2
github.com/redis/go-redis/v9 v9.7.1 github.com/redis/go-redis/v9 v9.7.3
github.com/tencentyun/cos-go-sdk-v5 v0.7.62 github.com/tencentyun/cos-go-sdk-v5 v0.7.63
github.com/wenlng/go-captcha-assets v1.0.5 github.com/wenlng/go-captcha-assets v1.0.5
github.com/wenlng/go-captcha/v2 v2.0.3 github.com/wenlng/go-captcha/v2 v2.0.3
github.com/yitter/idgenerator-go v1.3.3 github.com/yitter/idgenerator-go v1.3.3
github.com/zeromicro/go-zero v1.8.1 github.com/zeromicro/go-zero v1.8.1
github.com/zmexing/go-sensitive-word v1.3.0 github.com/zmexing/go-sensitive-word v1.3.0
gocv.io/x/gocv v0.40.0 gocv.io/x/gocv v0.41.0
golang.org/x/crypto v0.36.0 golang.org/x/crypto v0.36.0
golang.org/x/sync v0.12.0 golang.org/x/sync v0.12.0
golang.org/x/text v0.23.0 golang.org/x/text v0.23.0
google.golang.org/grpc v1.71.0 google.golang.org/grpc v1.71.0
google.golang.org/protobuf v1.36.5 google.golang.org/protobuf v1.36.6
gorm.io/driver/mysql v1.5.7 gorm.io/driver/mysql v1.5.7
gorm.io/gen v0.3.26 gorm.io/gen v0.3.26
gorm.io/gorm v1.25.12 gorm.io/gorm v1.25.12
@@ -79,11 +79,11 @@ require (
github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/swag v0.23.1 // indirect github.com/go-openapi/swag v0.23.1 // indirect
github.com/go-playground/assert/v2 v2.2.0 // indirect github.com/go-playground/assert/v2 v2.2.0 // indirect
github.com/go-sql-driver/mysql v1.9.0 // indirect github.com/go-sql-driver/mysql v1.9.1 // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
github.com/goccy/go-json v0.10.5 // indirect github.com/goccy/go-json v0.10.5 // indirect
github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/golang/mock v1.6.0 // indirect github.com/golang/mock v1.6.0 // indirect
@@ -102,7 +102,7 @@ require (
github.com/imroc/req/v3 v3.50.0 // indirect github.com/imroc/req/v3 v3.50.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/pgx/v5 v5.7.2 // indirect github.com/jackc/pgx/v5 v5.7.4 // indirect
github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect github.com/jinzhu/now v1.1.5 // indirect
@@ -125,7 +125,7 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
github.com/onsi/ginkgo/v2 v2.23.1 // indirect github.com/onsi/ginkgo/v2 v2.23.3 // indirect
github.com/openzipkin/zipkin-go v0.4.3 // indirect github.com/openzipkin/zipkin-go v0.4.3 // indirect
github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
@@ -136,15 +136,15 @@ require (
github.com/prometheus/common v0.63.0 // indirect github.com/prometheus/common v0.63.0 // indirect
github.com/prometheus/procfs v0.16.0 // indirect github.com/prometheus/procfs v0.16.0 // indirect
github.com/quic-go/qpack v0.5.1 // indirect github.com/quic-go/qpack v0.5.1 // indirect
github.com/quic-go/quic-go v0.50.0 // indirect github.com/quic-go/quic-go v0.50.1 // indirect
github.com/refraction-networking/utls v1.6.7 // indirect github.com/refraction-networking/utls v1.6.7 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/rs/xid v1.6.0 // indirect github.com/rs/xid v1.6.0 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/x448/float16 v0.8.4 // indirect github.com/x448/float16 v0.8.4 // indirect
go.etcd.io/etcd/api/v3 v3.5.19 // indirect go.etcd.io/etcd/api/v3 v3.5.20 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.19 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.20 // indirect
go.etcd.io/etcd/client/v3 v3.5.19 // indirect go.etcd.io/etcd/client/v3 v3.5.20 // indirect
go.mongodb.org/mongo-driver v1.17.3 // indirect go.mongodb.org/mongo-driver v1.17.3 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel v1.35.0 // indirect
@@ -171,8 +171,8 @@ require (
golang.org/x/term v0.30.0 // indirect golang.org/x/term v0.30.0 // indirect
golang.org/x/time v0.11.0 // indirect golang.org/x/time v0.11.0 // indirect
golang.org/x/tools v0.31.0 // indirect golang.org/x/tools v0.31.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect
@@ -186,11 +186,11 @@ require (
k8s.io/client-go v0.32.3 // indirect k8s.io/client-go v0.32.3 // indirect
k8s.io/klog/v2 v2.130.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e // indirect
modernc.org/libc v1.61.13 // indirect modernc.org/libc v1.61.13 // indirect
modernc.org/mathutil v1.7.1 // indirect modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.9.0 // indirect modernc.org/memory v1.9.1 // indirect
modernc.org/sqlite v1.36.1 // indirect modernc.org/sqlite v1.36.2 // indirect
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect

40
go.sum
View File

@@ -6,6 +6,8 @@ github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7 h1:P+erNlErr+X2v7Et+yTWaTfIRhw+
github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7/go.mod h1:VZQNCvcK/rldF3QaExiSl1gJEAkyc5/I8RLOd3WFZq4= github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7/go.mod h1:VZQNCvcK/rldF3QaExiSl1gJEAkyc5/I8RLOd3WFZq4=
github.com/ArtisanCloud/PowerWeChat/v3 v3.4.1 h1:N8duKMsES4HU+t6P518/BTKPYHd4v2ggVH48TZ1Gg7M= github.com/ArtisanCloud/PowerWeChat/v3 v3.4.1 h1:N8duKMsES4HU+t6P518/BTKPYHd4v2ggVH48TZ1Gg7M=
github.com/ArtisanCloud/PowerWeChat/v3 v3.4.1/go.mod h1:ybM3u4Lhso0X+ZsgoRCF4e5W1KT2fBc6plpjPZ2fop4= github.com/ArtisanCloud/PowerWeChat/v3 v3.4.1/go.mod h1:ybM3u4Lhso0X+ZsgoRCF4e5W1KT2fBc6plpjPZ2fop4=
github.com/ArtisanCloud/PowerWeChat/v3 v3.4.3 h1:5GMUHK49m3/jSY1rre7/HNLOVmM8+im7tNsw/nz9VDU=
github.com/ArtisanCloud/PowerWeChat/v3 v3.4.3/go.mod h1:ybM3u4Lhso0X+ZsgoRCF4e5W1KT2fBc6plpjPZ2fop4=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA=
@@ -123,6 +125,9 @@ github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo= github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo=
github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw= github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw=
github.com/go-sql-driver/mysql v1.9.1 h1:FrjNGn/BsJQjVRuSa8CBrM5BWA9BWoXXat3KrtSb/iI=
github.com/go-sql-driver/mysql v1.9.1/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
@@ -132,10 +137,14 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
@@ -175,6 +184,7 @@ github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
@@ -194,6 +204,8 @@ github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7Ulw
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI= github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI=
github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ=
github.com/jackc/pgx/v5 v5.7.4 h1:9wKznZrhWa2QiHL+NjTSPP6yjl3451BX3imWDnokYlg=
github.com/jackc/pgx/v5 v5.7.4/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ=
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
@@ -285,6 +297,8 @@ github.com/nsqio/go-nsq v1.1.0 h1:PQg+xxiUjA7V+TLdXw7nVrJ5Jbl3sN86EhGCQj4+FYE=
github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY= github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
github.com/onsi/ginkgo/v2 v2.23.1 h1:Ox0cOPv/t8RzKJUfDo9ZKtRvBOJY369sFJnl00CjqwY= github.com/onsi/ginkgo/v2 v2.23.1 h1:Ox0cOPv/t8RzKJUfDo9ZKtRvBOJY369sFJnl00CjqwY=
github.com/onsi/ginkgo/v2 v2.23.1/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= github.com/onsi/ginkgo/v2 v2.23.1/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM=
github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0=
github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM=
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg=
@@ -324,8 +338,12 @@ github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
github.com/quic-go/quic-go v0.50.0 h1:3H/ld1pa3CYhkcc20TPIyG1bNsdhn9qZBGN3b9/UyUo= github.com/quic-go/quic-go v0.50.0 h1:3H/ld1pa3CYhkcc20TPIyG1bNsdhn9qZBGN3b9/UyUo=
github.com/quic-go/quic-go v0.50.0/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= github.com/quic-go/quic-go v0.50.0/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E=
github.com/quic-go/quic-go v0.50.1 h1:unsgjFIUqW8a2oopkY7YNONpV1gYND6Nt9hnt1PN94Q=
github.com/quic-go/quic-go v0.50.1/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E=
github.com/redis/go-redis/v9 v9.7.1 h1:4LhKRCIduqXqtvCUlaq9c8bdHOkICjDMrr1+Zb3osAc= github.com/redis/go-redis/v9 v9.7.1 h1:4LhKRCIduqXqtvCUlaq9c8bdHOkICjDMrr1+Zb3osAc=
github.com/redis/go-redis/v9 v9.7.1/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= github.com/redis/go-redis/v9 v9.7.1/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM=
github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA=
github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM=
github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
@@ -357,6 +375,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.563/go.mod
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0=
github.com/tencentyun/cos-go-sdk-v5 v0.7.62 h1:7SZVCc31rkvMxod8nwvG1Ko0N5npT39/s3NhpHBvs70= github.com/tencentyun/cos-go-sdk-v5 v0.7.62 h1:7SZVCc31rkvMxod8nwvG1Ko0N5npT39/s3NhpHBvs70=
github.com/tencentyun/cos-go-sdk-v5 v0.7.62/go.mod h1:8+hG+mQMuRP/OIS9d83syAvXvrMj9HhkND6Q1fLghw0= github.com/tencentyun/cos-go-sdk-v5 v0.7.62/go.mod h1:8+hG+mQMuRP/OIS9d83syAvXvrMj9HhkND6Q1fLghw0=
github.com/tencentyun/cos-go-sdk-v5 v0.7.63 h1:A+FH9HU8a2ozcd36VkrtiCooyzDPEOupIGWKgATtGlQ=
github.com/tencentyun/cos-go-sdk-v5 v0.7.63/go.mod h1:8+hG+mQMuRP/OIS9d83syAvXvrMj9HhkND6Q1fLghw0=
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/wenlng/go-captcha-assets v1.0.5 h1:TL+31Qe/kJwcuYyU+jHedjSTZnMu1XKgktKL++lH9Js= github.com/wenlng/go-captcha-assets v1.0.5 h1:TL+31Qe/kJwcuYyU+jHedjSTZnMu1XKgktKL++lH9Js=
github.com/wenlng/go-captcha-assets v1.0.5/go.mod h1:zinRACsdYcL/S6pHgI9Iv7FKTU41d00+43pNX+b9+MM= github.com/wenlng/go-captcha-assets v1.0.5/go.mod h1:zinRACsdYcL/S6pHgI9Iv7FKTU41d00+43pNX+b9+MM=
@@ -384,10 +404,16 @@ github.com/zmexing/go-sensitive-word v1.3.0 h1:dB9S9kNklksOODGLLAov0RaVCwC2w9Kwx
github.com/zmexing/go-sensitive-word v1.3.0/go.mod h1:wkNIpkq1iPOe3l7l83zvnnV5mm20jfj2x8V8kjOTsUM= github.com/zmexing/go-sensitive-word v1.3.0/go.mod h1:wkNIpkq1iPOe3l7l83zvnnV5mm20jfj2x8V8kjOTsUM=
go.etcd.io/etcd/api/v3 v3.5.19 h1:w3L6sQZGsWPuBxRQ4m6pPP3bVUtV8rjW033EGwlr0jw= go.etcd.io/etcd/api/v3 v3.5.19 h1:w3L6sQZGsWPuBxRQ4m6pPP3bVUtV8rjW033EGwlr0jw=
go.etcd.io/etcd/api/v3 v3.5.19/go.mod h1:QqKGViq4KTgOG43dr/uH0vmGWIaoJY3ggFi6ZH0TH/U= go.etcd.io/etcd/api/v3 v3.5.19/go.mod h1:QqKGViq4KTgOG43dr/uH0vmGWIaoJY3ggFi6ZH0TH/U=
go.etcd.io/etcd/api/v3 v3.5.20 h1:aKfz3nPZECWoZJXMSH9y6h2adXjtOHaHTGEVCuCmaz0=
go.etcd.io/etcd/api/v3 v3.5.20/go.mod h1:QqKGViq4KTgOG43dr/uH0vmGWIaoJY3ggFi6ZH0TH/U=
go.etcd.io/etcd/client/pkg/v3 v3.5.19 h1:9VsyGhg0WQGjDWWlDI4VuaS9PZJGNbPkaHEIuLwtixk= go.etcd.io/etcd/client/pkg/v3 v3.5.19 h1:9VsyGhg0WQGjDWWlDI4VuaS9PZJGNbPkaHEIuLwtixk=
go.etcd.io/etcd/client/pkg/v3 v3.5.19/go.mod h1:qaOi1k4ZA9lVLejXNvyPABrVEe7VymMF2433yyRQ7O0= go.etcd.io/etcd/client/pkg/v3 v3.5.19/go.mod h1:qaOi1k4ZA9lVLejXNvyPABrVEe7VymMF2433yyRQ7O0=
go.etcd.io/etcd/client/pkg/v3 v3.5.20 h1:sZIAtra+xCo56gdf6BR62to/hiie5Bwl7hQIqMzVTEM=
go.etcd.io/etcd/client/pkg/v3 v3.5.20/go.mod h1:qaOi1k4ZA9lVLejXNvyPABrVEe7VymMF2433yyRQ7O0=
go.etcd.io/etcd/client/v3 v3.5.19 h1:+4byIz6ti3QC28W0zB0cEZWwhpVHXdrKovyycJh1KNo= go.etcd.io/etcd/client/v3 v3.5.19 h1:+4byIz6ti3QC28W0zB0cEZWwhpVHXdrKovyycJh1KNo=
go.etcd.io/etcd/client/v3 v3.5.19/go.mod h1:FNzyinmMIl0oVsty1zA3hFeUrxXI/JpEnz4sG+POzjU= go.etcd.io/etcd/client/v3 v3.5.19/go.mod h1:FNzyinmMIl0oVsty1zA3hFeUrxXI/JpEnz4sG+POzjU=
go.etcd.io/etcd/client/v3 v3.5.20 h1:jMT2MwQEhyvhQg49Cec+1ZHJzfUf6ZgcmV0GjPv0tIQ=
go.etcd.io/etcd/client/v3 v3.5.20/go.mod h1:J5lbzYRMUR20YolS5UjlqqMcu3/wdEvG5VNBhzyo3m0=
go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ= go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ=
go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
@@ -429,6 +455,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
gocv.io/x/gocv v0.40.0 h1:kGBu/UVj+dO6A9dhQmGOnCICSL7ke7b5YtX3R3azdXI= gocv.io/x/gocv v0.40.0 h1:kGBu/UVj+dO6A9dhQmGOnCICSL7ke7b5YtX3R3azdXI=
gocv.io/x/gocv v0.40.0/go.mod h1:zYdWMj29WAEznM3Y8NsU3A0TRq/wR/cy75jeUypThqU= gocv.io/x/gocv v0.40.0/go.mod h1:zYdWMj29WAEznM3Y8NsU3A0TRq/wR/cy75jeUypThqU=
gocv.io/x/gocv v0.41.0 h1:KM+zRXUP28b6dHfhy+4JxDODbCNQNtLg8kio+YE7TqA=
gocv.io/x/gocv v0.41.0/go.mod h1:zYdWMj29WAEznM3Y8NsU3A0TRq/wR/cy75jeUypThqU=
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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -552,14 +580,20 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 h1:IFnXJq3UPB3oBREOodn1v1aGQeZYQclEmvWRMN0PSsY= google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 h1:IFnXJq3UPB3oBREOodn1v1aGQeZYQclEmvWRMN0PSsY=
google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:c8q6Z6OCqnfVIqUFJkCzKcrj8eCvUrz+K4KRzSTuANg= google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:c8q6Z6OCqnfVIqUFJkCzKcrj8eCvUrz+K4KRzSTuANg=
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM=
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
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 h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
@@ -614,6 +648,8 @@ k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUy
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro=
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
modernc.org/cc/v4 v4.24.4 h1:TFkx1s6dCkQpd6dKurBNmpo+G8Zl4Sq/ztJ+2+DEsh0= modernc.org/cc/v4 v4.24.4 h1:TFkx1s6dCkQpd6dKurBNmpo+G8Zl4Sq/ztJ+2+DEsh0=
modernc.org/cc/v4 v4.24.4/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= modernc.org/cc/v4 v4.24.4/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
modernc.org/ccgo/v4 v4.23.16 h1:Z2N+kk38b7SfySC1ZkpGLN2vthNJP1+ZzGZIlH7uBxo= modernc.org/ccgo/v4 v4.23.16 h1:Z2N+kk38b7SfySC1ZkpGLN2vthNJP1+ZzGZIlH7uBxo=
@@ -628,12 +664,16 @@ modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
modernc.org/memory v1.9.0 h1:smV8d5mrOAvj5QIYbc2XLSRWvAIyPI+kQHqxZaxEqCM= modernc.org/memory v1.9.0 h1:smV8d5mrOAvj5QIYbc2XLSRWvAIyPI+kQHqxZaxEqCM=
modernc.org/memory v1.9.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= modernc.org/memory v1.9.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
modernc.org/memory v1.9.1 h1:V/Z1solwAVmMW1yttq3nDdZPJqV1rM05Ccq6KMSZ34g=
modernc.org/memory v1.9.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
modernc.org/sqlite v1.36.1 h1:bDa8BJUH4lg6EGkLbahKe/8QqoF8p9gArSc6fTqYhyQ= modernc.org/sqlite v1.36.1 h1:bDa8BJUH4lg6EGkLbahKe/8QqoF8p9gArSc6fTqYhyQ=
modernc.org/sqlite v1.36.1/go.mod h1:7MPwH7Z6bREicF9ZVUR78P1IKuxfZ8mRIDHD0iD+8TU= modernc.org/sqlite v1.36.1/go.mod h1:7MPwH7Z6bREicF9ZVUR78P1IKuxfZ8mRIDHD0iD+8TU=
modernc.org/sqlite v1.36.2 h1:vjcSazuoFve9Wm0IVNHgmJECoOXLZM1KfMXbcX2axHA=
modernc.org/sqlite v1.36.2/go.mod h1:ADySlx7K4FdY5MaJcEv86hTJ0PjedAloTUuif0YS3ws=
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=