From afcd128256e2e4410cf675b4c2714f42c3cff644 Mon Sep 17 00:00:00 2001 From: landaiqing Date: Thu, 27 Mar 2025 01:01:30 +0800 Subject: [PATCH] :construction: developing... --- app/auth/api/auth.api | 175 ++++++- app/auth/api/internal/handler/routes.go | 45 ++ .../get_image_bed_upload_list_handler.go | 29 ++ .../storage/image_bed_upload_handler.go | 21 + .../handler/storage/recover_image_handler.go | 29 ++ .../system/get_all_comment_list_handler.go | 21 + .../system/get_all_role_list_handler.go | 21 + .../system/get_all_storage_list_handler.go | 21 + .../get_permission_rule_list_handler.go | 21 + .../system/get_user_login_log_list_handler.go | 21 + ...get_user_third_party_login_list_handler.go | 21 + .../get_image_bed_upload_list_logic.go | 134 ++++++ .../logic/storage/image_bed_upload_logic.go | 177 +++++++ .../logic/storage/recover_image_logic.go | 48 ++ .../system/get_all_comment_list_logic.go | 36 ++ .../logic/system/get_all_role_list_logic.go | 33 ++ .../system/get_all_storage_list_logic.go | 30 ++ .../system/get_permission_rule_list_logic.go | 36 ++ .../logic/system/get_user_list_logic.go | 28 +- .../system/get_user_login_log_list_logic.go | 35 ++ .../get_user_third_party_login_list_logic.go | 34 ++ app/auth/api/internal/types/file_types.go | 7 + app/auth/api/internal/types/types.go | 160 ++++++- app/auth/model/mysql/generate/generate.go | 2 + .../mysql/model/sca_storage_img_bed.gen.go | 36 ++ app/auth/model/mysql/query/gen.go | 8 + .../mysql/query/sca_storage_img_bed.gen.go | 432 ++++++++++++++++++ common/constant/storage_space_name.go | 1 + go.mod | 38 +- go.sum | 40 ++ 30 files changed, 1696 insertions(+), 44 deletions(-) create mode 100644 app/auth/api/internal/handler/storage/get_image_bed_upload_list_handler.go create mode 100644 app/auth/api/internal/handler/storage/image_bed_upload_handler.go create mode 100644 app/auth/api/internal/handler/storage/recover_image_handler.go create mode 100644 app/auth/api/internal/handler/system/get_all_comment_list_handler.go create mode 100644 app/auth/api/internal/handler/system/get_all_role_list_handler.go create mode 100644 app/auth/api/internal/handler/system/get_all_storage_list_handler.go create mode 100644 app/auth/api/internal/handler/system/get_permission_rule_list_handler.go create mode 100644 app/auth/api/internal/handler/system/get_user_login_log_list_handler.go create mode 100644 app/auth/api/internal/handler/system/get_user_third_party_login_list_handler.go create mode 100644 app/auth/api/internal/logic/storage/get_image_bed_upload_list_logic.go create mode 100644 app/auth/api/internal/logic/storage/image_bed_upload_logic.go create mode 100644 app/auth/api/internal/logic/storage/recover_image_logic.go create mode 100644 app/auth/api/internal/logic/system/get_all_comment_list_logic.go create mode 100644 app/auth/api/internal/logic/system/get_all_role_list_logic.go create mode 100644 app/auth/api/internal/logic/system/get_all_storage_list_logic.go create mode 100644 app/auth/api/internal/logic/system/get_permission_rule_list_logic.go create mode 100644 app/auth/api/internal/logic/system/get_user_login_log_list_logic.go create mode 100644 app/auth/api/internal/logic/system/get_user_third_party_login_list_logic.go create mode 100644 app/auth/model/mysql/model/sca_storage_img_bed.gen.go create mode 100644 app/auth/model/mysql/query/sca_storage_img_bed.gen.go diff --git a/app/auth/api/auth.api b/app/auth/api/auth.api index 10b993e..084b327 100644 --- a/app/auth/api/auth.api +++ b/app/auth/api/auth.api @@ -771,6 +771,32 @@ type ( CoordinateListResponse { 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 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 ( @@ -1073,18 +1111,115 @@ service auth { type ( UserMeta { - ID int64 `json:"id"` - Username string `json:"username"` - Nickname string `json:"nickname"` - Avatar string `json:"avatar"` - Email string `json:"email"` - Phone string `json:"phone"` - Status int64 `json:"status"` - CreatedAt string `json:"created_at"` + ID int64 `json:"id"` + UID string `json:"uid"` + Username string `json:"username"` + Nickname string `json:"nickname"` + Avatar string `json:"avatar"` + Email string `json:"email"` + 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"` + CreatedAt string `json:"created_at"` + UpadatedAt string `json:"updated_at"` + DeletedAt string `json:"deleted_at"` } UserInfoListResponse { 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 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) } diff --git a/app/auth/api/internal/handler/routes.go b/app/auth/api/internal/handler/routes.go index 81ce484..c8221c7 100644 --- a/app/auth/api/internal/handler/routes.go +++ b/app/auth/api/internal/handler/routes.go @@ -381,6 +381,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/image/all/list", 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, Path: "/image/delete", @@ -411,6 +421,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/image/recent/list", Handler: storage.QueryRecentImageListHandler(serverCtx), }, + { + Method: http.MethodPost, + Path: "/image/recover", + Handler: storage.RecoverImageHandler(serverCtx), + }, { Method: http.MethodPost, Path: "/image/search", @@ -468,11 +483,41 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { rest.WithMiddlewares( []rest.Middleware{serverCtx.SecurityHeadersMiddleware, serverCtx.CasbinVerifyMiddleware, serverCtx.NonceMiddleware, serverCtx.AuthMiddleware}, []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, Path: "/user/list", 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), diff --git a/app/auth/api/internal/handler/storage/get_image_bed_upload_list_handler.go b/app/auth/api/internal/handler/storage/get_image_bed_upload_list_handler.go new file mode 100644 index 0000000..5faf75b --- /dev/null +++ b/app/auth/api/internal/handler/storage/get_image_bed_upload_list_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/storage/image_bed_upload_handler.go b/app/auth/api/internal/handler/storage/image_bed_upload_handler.go new file mode 100644 index 0000000..377209e --- /dev/null +++ b/app/auth/api/internal/handler/storage/image_bed_upload_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/storage/recover_image_handler.go b/app/auth/api/internal/handler/storage/recover_image_handler.go new file mode 100644 index 0000000..b7ded80 --- /dev/null +++ b/app/auth/api/internal/handler/storage/recover_image_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/system/get_all_comment_list_handler.go b/app/auth/api/internal/handler/system/get_all_comment_list_handler.go new file mode 100644 index 0000000..2a4a553 --- /dev/null +++ b/app/auth/api/internal/handler/system/get_all_comment_list_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/system/get_all_role_list_handler.go b/app/auth/api/internal/handler/system/get_all_role_list_handler.go new file mode 100644 index 0000000..575957e --- /dev/null +++ b/app/auth/api/internal/handler/system/get_all_role_list_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/system/get_all_storage_list_handler.go b/app/auth/api/internal/handler/system/get_all_storage_list_handler.go new file mode 100644 index 0000000..2959787 --- /dev/null +++ b/app/auth/api/internal/handler/system/get_all_storage_list_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/system/get_permission_rule_list_handler.go b/app/auth/api/internal/handler/system/get_permission_rule_list_handler.go new file mode 100644 index 0000000..b6a0b54 --- /dev/null +++ b/app/auth/api/internal/handler/system/get_permission_rule_list_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/system/get_user_login_log_list_handler.go b/app/auth/api/internal/handler/system/get_user_login_log_list_handler.go new file mode 100644 index 0000000..18137ac --- /dev/null +++ b/app/auth/api/internal/handler/system/get_user_login_log_list_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/handler/system/get_user_third_party_login_list_handler.go b/app/auth/api/internal/handler/system/get_user_third_party_login_list_handler.go new file mode 100644 index 0000000..ba70efc --- /dev/null +++ b/app/auth/api/internal/handler/system/get_user_third_party_login_list_handler.go @@ -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) + } + } +} diff --git a/app/auth/api/internal/logic/storage/get_image_bed_upload_list_logic.go b/app/auth/api/internal/logic/storage/get_image_bed_upload_list_logic.go new file mode 100644 index 0000000..27794b1 --- /dev/null +++ b/app/auth/api/internal/logic/storage/get_image_bed_upload_list_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/storage/image_bed_upload_logic.go b/app/auth/api/internal/logic/storage/image_bed_upload_logic.go new file mode 100644 index 0000000..5d45c98 --- /dev/null +++ b/app/auth/api/internal/logic/storage/image_bed_upload_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/storage/recover_image_logic.go b/app/auth/api/internal/logic/storage/recover_image_logic.go new file mode 100644 index 0000000..4c58550 --- /dev/null +++ b/app/auth/api/internal/logic/storage/recover_image_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/system/get_all_comment_list_logic.go b/app/auth/api/internal/logic/system/get_all_comment_list_logic.go new file mode 100644 index 0000000..a164c99 --- /dev/null +++ b/app/auth/api/internal/logic/system/get_all_comment_list_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/system/get_all_role_list_logic.go b/app/auth/api/internal/logic/system/get_all_role_list_logic.go new file mode 100644 index 0000000..6cfac28 --- /dev/null +++ b/app/auth/api/internal/logic/system/get_all_role_list_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/system/get_all_storage_list_logic.go b/app/auth/api/internal/logic/system/get_all_storage_list_logic.go new file mode 100644 index 0000000..f9a59f0 --- /dev/null +++ b/app/auth/api/internal/logic/system/get_all_storage_list_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/system/get_permission_rule_list_logic.go b/app/auth/api/internal/logic/system/get_permission_rule_list_logic.go new file mode 100644 index 0000000..7a44abd --- /dev/null +++ b/app/auth/api/internal/logic/system/get_permission_rule_list_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/system/get_user_list_logic.go b/app/auth/api/internal/logic/system/get_user_list_logic.go index a664888..5266ae3 100644 --- a/app/auth/api/internal/logic/system/get_user_list_logic.go +++ b/app/auth/api/internal/logic/system/get_user_list_logic.go @@ -2,7 +2,6 @@ package system import ( "context" - "schisandra-album-cloud-microservices/app/auth/api/internal/svc" "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) { - // todo: add your logic here and delete this line - - return + authUser := l.svcCtx.DB.ScaAuthUser + var userMetaList []types.UserMeta + 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 } diff --git a/app/auth/api/internal/logic/system/get_user_login_log_list_logic.go b/app/auth/api/internal/logic/system/get_user_login_log_list_logic.go new file mode 100644 index 0000000..043df78 --- /dev/null +++ b/app/auth/api/internal/logic/system/get_user_login_log_list_logic.go @@ -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 +} diff --git a/app/auth/api/internal/logic/system/get_user_third_party_login_list_logic.go b/app/auth/api/internal/logic/system/get_user_third_party_login_list_logic.go new file mode 100644 index 0000000..5ac773f --- /dev/null +++ b/app/auth/api/internal/logic/system/get_user_third_party_login_list_logic.go @@ -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 +} diff --git a/app/auth/api/internal/types/file_types.go b/app/auth/api/internal/types/file_types.go index cdb06e5..fd59e30 100644 --- a/app/auth/api/internal/types/file_types.go +++ b/app/auth/api/internal/types/file_types.go @@ -116,3 +116,10 @@ type ZincFileInfo struct { Province string `json:"province"` City string `json:"city"` } + +type ImageBedMeta struct { + Provider string `json:"provider"` + Bucket string `json:"bucket"` + Width int64 `json:"width"` + Height int64 `json:"height"` +} diff --git a/app/auth/api/internal/types/types.go b/app/auth/api/internal/types/types.go index fca7198..d90e273 100644 --- a/app/auth/api/internal/types/types.go +++ b/app/auth/api/internal/types/types.go @@ -75,6 +75,10 @@ type AlbumRenameResponse struct { Name string `json:"name"` } +type AllCommentListResponse struct { + Records []CommentReplyMeta `json:"records"` +} + type AllImageDetail struct { Date string `json:"date"` List []ImageMeta `json:"list"` @@ -91,6 +95,10 @@ type AllImageListResponse struct { Records []AllImageDetail `json:"records"` } +type AllStorageListResponse struct { + Records []StorageConfigMeta `json:"records"` +} + type BucketCapacityRequest struct { Provider string `json:"provider"` Bucket string `json:"bucket"` @@ -149,6 +157,31 @@ type CommentListRequest struct { 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 { Content string `json:"content"` Images string `json:"images,optional"` @@ -248,6 +281,31 @@ type HeatmapMeta struct { 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 { ID int64 `json:"id"` FileName string `json:"file_name"` @@ -325,6 +383,21 @@ type OAuthWechatRequest struct { 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 { Phone string `json:"phone"` Captcha string `json:"captcha"` @@ -367,6 +440,12 @@ type RecentListResponse struct { Records []AllImageDetail `json:"records"` } +type RecoverImageRequest struct { + ID int64 `json:"id"` + Provider string `json:"provider"` + Bucket string `json:"bucket"` +} + type RefreshTokenResponse struct { AccessToken string `json:"access_token"` ExpireAt int64 `json:"expire_at"` @@ -409,6 +488,19 @@ type ResetPasswordRequest struct { 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 { Key string `json:"key"` Image string `json:"image"` @@ -638,15 +730,47 @@ type UserInfoListResponse struct { 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 { - ID int64 `json:"id"` - Username string `json:"username"` - Nickname string `json:"nickname"` - Avatar string `json:"avatar"` - Email string `json:"email"` - Phone string `json:"phone"` - Status int64 `json:"status"` - CreatedAt string `json:"created_at"` + ID int64 `json:"id"` + UID string `json:"uid"` + Username string `json:"username"` + Nickname string `json:"nickname"` + Avatar string `json:"avatar"` + Email string `json:"email"` + 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"` + CreatedAt string `json:"created_at"` + UpadatedAt string `json:"updated_at"` + DeletedAt string `json:"deleted_at"` } type UserSecuritySettingResponse struct { @@ -659,6 +783,21 @@ type UserSecuritySettingResponse struct { 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 { ImageCount int64 `json:"image_count"` TodayUploadCount int64 `json:"today_upload_count"` @@ -673,8 +812,3 @@ type WechatOffiaccountLoginRequest struct { Openid string `json:"openid"` ClientId string `json:"client_id"` } - -type ImageStreamResponse struct { - ContentType string `json:"content_type"` - Size int64 `json:"size"` -} diff --git a/app/auth/model/mysql/generate/generate.go b/app/auth/model/mysql/generate/generate.go index 23bfe2a..5190a02 100644 --- a/app/auth/model/mysql/generate/generate.go +++ b/app/auth/model/mysql/generate/generate.go @@ -119,6 +119,7 @@ func main() { scaStorageShare := g.GenerateModel("sca_storage_share", fieldOpts...) scaStorageShareVisit := g.GenerateModel("sca_storage_share_visit", fieldOpts...) scaStorageExtra := g.GenerateModel("sca_storage_extra", fieldOpts...) + scaStorageImgBed := g.GenerateModel("sca_storage_img_bed", fieldOpts...) g.ApplyBasic( scaAuthMenu, @@ -141,6 +142,7 @@ func main() { scaStorageShare, scaStorageShareVisit, scaStorageExtra, + scaStorageImgBed, ) g.Execute() diff --git a/app/auth/model/mysql/model/sca_storage_img_bed.gen.go b/app/auth/model/mysql/model/sca_storage_img_bed.gen.go new file mode 100644 index 0000000..0d8f4b2 --- /dev/null +++ b/app/auth/model/mysql/model/sca_storage_img_bed.gen.go @@ -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 +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 +} diff --git a/app/auth/model/mysql/query/gen.go b/app/auth/model/mysql/query/gen.go index 5568016..1b8864c 100644 --- a/app/auth/model/mysql/query/gen.go +++ b/app/auth/model/mysql/query/gen.go @@ -29,6 +29,7 @@ var ( ScaStorageAlbum *scaStorageAlbum ScaStorageConfig *scaStorageConfig ScaStorageExtra *scaStorageExtra + ScaStorageImgBed *scaStorageImgBed ScaStorageInfo *scaStorageInfo ScaStorageLocation *scaStorageLocation ScaStorageShare *scaStorageShare @@ -53,6 +54,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) { ScaStorageAlbum = &Q.ScaStorageAlbum ScaStorageConfig = &Q.ScaStorageConfig ScaStorageExtra = &Q.ScaStorageExtra + ScaStorageImgBed = &Q.ScaStorageImgBed ScaStorageInfo = &Q.ScaStorageInfo ScaStorageLocation = &Q.ScaStorageLocation ScaStorageShare = &Q.ScaStorageShare @@ -78,6 +80,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query { ScaStorageAlbum: newScaStorageAlbum(db, opts...), ScaStorageConfig: newScaStorageConfig(db, opts...), ScaStorageExtra: newScaStorageExtra(db, opts...), + ScaStorageImgBed: newScaStorageImgBed(db, opts...), ScaStorageInfo: newScaStorageInfo(db, opts...), ScaStorageLocation: newScaStorageLocation(db, opts...), ScaStorageShare: newScaStorageShare(db, opts...), @@ -104,6 +107,7 @@ type Query struct { ScaStorageAlbum scaStorageAlbum ScaStorageConfig scaStorageConfig ScaStorageExtra scaStorageExtra + ScaStorageImgBed scaStorageImgBed ScaStorageInfo scaStorageInfo ScaStorageLocation scaStorageLocation ScaStorageShare scaStorageShare @@ -131,6 +135,7 @@ func (q *Query) clone(db *gorm.DB) *Query { ScaStorageAlbum: q.ScaStorageAlbum.clone(db), ScaStorageConfig: q.ScaStorageConfig.clone(db), ScaStorageExtra: q.ScaStorageExtra.clone(db), + ScaStorageImgBed: q.ScaStorageImgBed.clone(db), ScaStorageInfo: q.ScaStorageInfo.clone(db), ScaStorageLocation: q.ScaStorageLocation.clone(db), ScaStorageShare: q.ScaStorageShare.clone(db), @@ -165,6 +170,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query { ScaStorageAlbum: q.ScaStorageAlbum.replaceDB(db), ScaStorageConfig: q.ScaStorageConfig.replaceDB(db), ScaStorageExtra: q.ScaStorageExtra.replaceDB(db), + ScaStorageImgBed: q.ScaStorageImgBed.replaceDB(db), ScaStorageInfo: q.ScaStorageInfo.replaceDB(db), ScaStorageLocation: q.ScaStorageLocation.replaceDB(db), ScaStorageShare: q.ScaStorageShare.replaceDB(db), @@ -189,6 +195,7 @@ type queryCtx struct { ScaStorageAlbum IScaStorageAlbumDo ScaStorageConfig IScaStorageConfigDo ScaStorageExtra IScaStorageExtraDo + ScaStorageImgBed IScaStorageImgBedDo ScaStorageInfo IScaStorageInfoDo ScaStorageLocation IScaStorageLocationDo ScaStorageShare IScaStorageShareDo @@ -213,6 +220,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx { ScaStorageAlbum: q.ScaStorageAlbum.WithContext(ctx), ScaStorageConfig: q.ScaStorageConfig.WithContext(ctx), ScaStorageExtra: q.ScaStorageExtra.WithContext(ctx), + ScaStorageImgBed: q.ScaStorageImgBed.WithContext(ctx), ScaStorageInfo: q.ScaStorageInfo.WithContext(ctx), ScaStorageLocation: q.ScaStorageLocation.WithContext(ctx), ScaStorageShare: q.ScaStorageShare.WithContext(ctx), diff --git a/app/auth/model/mysql/query/sca_storage_img_bed.gen.go b/app/auth/model/mysql/query/sca_storage_img_bed.gen.go new file mode 100644 index 0000000..607ab9d --- /dev/null +++ b/app/auth/model/mysql/query/sca_storage_img_bed.gen.go @@ -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 +} diff --git a/common/constant/storage_space_name.go b/common/constant/storage_space_name.go index aa2ce6c..8ecdf0c 100644 --- a/common/constant/storage_space_name.go +++ b/common/constant/storage_space_name.go @@ -3,4 +3,5 @@ package constant const ( ImageSpace = "image_space" ThumbnailSpace = "thumbnail_space" + ImageBedSpace = "image_bed_space" ) diff --git a/go.mod b/go.mod index 5220cad..01b2e6b 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.24.1 require ( 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/aliyun/alibabacloud-oss-go-sdk-v2 v1.2.1 github.com/asjdf/gorm-cache v1.2.3 @@ -14,7 +14,7 @@ require ( github.com/corona10/goimagehash v1.1.0 github.com/duke-git/lancet/v2 v2.3.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/landaiqing/go-pixelnebula v0.1.0 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/pelletier/go-toml/v2 v2.2.3 github.com/pkg6/go-sms v0.1.2 - github.com/redis/go-redis/v9 v9.7.1 - github.com/tencentyun/cos-go-sdk-v5 v0.7.62 + github.com/redis/go-redis/v9 v9.7.3 + github.com/tencentyun/cos-go-sdk-v5 v0.7.63 github.com/wenlng/go-captcha-assets v1.0.5 github.com/wenlng/go-captcha/v2 v2.0.3 github.com/yitter/idgenerator-go v1.3.3 github.com/zeromicro/go-zero v1.8.1 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/sync v0.12.0 golang.org/x/text v0.23.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/gen v0.3.26 gorm.io/gorm v1.25.12 @@ -79,11 +79,11 @@ require ( github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/swag v0.23.1 // 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/goccy/go-json v0.10.5 // 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/sqlexp v0.1.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/jackc/pgpassfile v1.0.0 // 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/jinzhu/inflection v1.0.0 // 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/ncruces/go-strftime v0.1.9 // 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/orcaman/concurrent-map/v2 v2.0.1 // 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/procfs v0.16.0 // 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/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rs/xid v1.6.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/x448/float16 v0.8.4 // indirect - go.etcd.io/etcd/api/v3 v3.5.19 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.5.19 // indirect - go.etcd.io/etcd/client/v3 v3.5.19 // indirect + go.etcd.io/etcd/api/v3 v3.5.20 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.20 // indirect + go.etcd.io/etcd/client/v3 v3.5.20 // indirect go.mongodb.org/mongo-driver v1.17.3 // indirect go.opentelemetry.io/auto/sdk v1.1.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/time v0.11.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/rpc 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-20250324211829-b45e905df463 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect @@ -186,11 +186,11 @@ require ( k8s.io/client-go v0.32.3 // indirect k8s.io/klog/v2 v2.130.1 // 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/mathutil v1.7.1 // indirect - modernc.org/memory v1.9.0 // indirect - modernc.org/sqlite v1.36.1 // indirect + modernc.org/memory v1.9.1 // indirect + modernc.org/sqlite v1.36.2 // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect diff --git a/go.sum b/go.sum index 579d225..536f0bd 100644 --- a/go.sum +++ b/go.sum @@ -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/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.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.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= @@ -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.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.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/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= 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/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.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.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/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/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= 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/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/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/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= 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/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.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/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= 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/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.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/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= 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/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.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/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/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= 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/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.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/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= @@ -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= 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.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/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/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.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ= 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= 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.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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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= 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-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/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/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.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/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 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 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/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-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/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= 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/memory v1.9.0 h1:smV8d5mrOAvj5QIYbc2XLSRWvAIyPI+kQHqxZaxEqCM= 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/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= 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/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/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=