♻️ use minio instead of mongodb
This commit is contained in:
@@ -255,35 +255,35 @@ service auth {
|
||||
type (
|
||||
// 评论提交请求参数
|
||||
CommentRequest {
|
||||
Content string `json:"content"`
|
||||
Images []string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
Content string `json:"content"`
|
||||
Images string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
}
|
||||
// 回复评论提交请求参数
|
||||
ReplyCommentRequest {
|
||||
Content string `json:"content"`
|
||||
Images []string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id" `
|
||||
ReplyId int64 `json:"reply_id" `
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
Content string `json:"content"`
|
||||
Images string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id" `
|
||||
ReplyId int64 `json:"reply_id" `
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
}
|
||||
// 回复回复请求参数
|
||||
ReplyReplyRequest {
|
||||
Content string `json:"content"`
|
||||
Images []string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
ReplyTo int64 `json:"reply_to"`
|
||||
ReplyId int64 `json:"reply_id"`
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
Content string `json:"content"`
|
||||
Images string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
ReplyTo int64 `json:"reply_to"`
|
||||
ReplyId int64 `json:"reply_id"`
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
}
|
||||
// 评论列表请求参数
|
||||
CommentListRequest {
|
||||
@@ -314,26 +314,26 @@ type (
|
||||
type (
|
||||
// CommentContent 评论内容
|
||||
CommentContent {
|
||||
NickName string `json:"nickname"`
|
||||
Avatar string `json:"avatar"`
|
||||
Level int64 `json:"level,omitempty" default:"0"`
|
||||
Id int64 `json:"id"`
|
||||
UserId string `json:"user_id"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Content string `json:"content"`
|
||||
ReplyTo int64 `json:"reply_to,omitempty"`
|
||||
ReplyId int64 `json:"reply_id,omitempty"`
|
||||
ReplyUser string `json:"reply_user,omitempty"`
|
||||
ReplyNickname string `json:"reply_nickname,omitempty"`
|
||||
IsAuthor int64 `json:"is_author"`
|
||||
Likes int64 `json:"likes"`
|
||||
ReplyCount int64 `json:"reply_count"`
|
||||
CreatedTime string `json:"created_time"`
|
||||
Location string `json:"location"`
|
||||
Browser string `json:"browser"`
|
||||
OperatingSystem string `json:"operating_system"`
|
||||
IsLiked bool `json:"is_liked" default:"false"`
|
||||
Images []string `json:"images,omitempty"`
|
||||
NickName string `json:"nickname"`
|
||||
Avatar string `json:"avatar"`
|
||||
Level int64 `json:"level,omitempty" default:"0"`
|
||||
Id int64 `json:"id"`
|
||||
UserId string `json:"user_id"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Content string `json:"content"`
|
||||
ReplyTo int64 `json:"reply_to,omitempty"`
|
||||
ReplyId int64 `json:"reply_id,omitempty"`
|
||||
ReplyUser string `json:"reply_user,omitempty"`
|
||||
ReplyNickname string `json:"reply_nickname,omitempty"`
|
||||
IsAuthor int64 `json:"is_author"`
|
||||
Likes int64 `json:"likes"`
|
||||
ReplyCount int64 `json:"reply_count"`
|
||||
CreatedTime string `json:"created_time"`
|
||||
Location string `json:"location"`
|
||||
Browser string `json:"browser"`
|
||||
OperatingSystem string `json:"operating_system"`
|
||||
IsLiked bool `json:"is_liked" default:"false"`
|
||||
Images string `json:"images,omitempty"`
|
||||
}
|
||||
// CommentListPageResponse 评论返回值
|
||||
CommentListPageResponse {
|
||||
@@ -365,7 +365,7 @@ type (
|
||||
timeout: 10s // 超时时间
|
||||
maxBytes: 1048576 // 最大请求大小
|
||||
signature: false // 是否开启签名验证
|
||||
middleware: SecurityHeadersMiddleware,CasbinVerifyMiddleware,AuthorizationMiddleware,NonceMiddleware // 注册中间件
|
||||
middleware: SecurityHeadersMiddleware,CasbinVerifyMiddleware,NonceMiddleware // 注册中间件
|
||||
MaxConns: true // 是否开启最大连接数限制
|
||||
Recover: true // 是否开启自动恢复
|
||||
jwt: Auth // 是否开启jwt验证
|
||||
@@ -427,6 +427,28 @@ type (
|
||||
Bucket string `json:"bucket"`
|
||||
Region string `json:"region"`
|
||||
}
|
||||
FaceSampleLibrary {
|
||||
ID int64 `json:"id"`
|
||||
FaceName string `json:"face_name"`
|
||||
FaceImage string `json:"face_image"`
|
||||
}
|
||||
FaceSampleLibraryListRequest {
|
||||
Type int64 `json:"type"`
|
||||
}
|
||||
FaceSampleLibraryListResponse {
|
||||
faces []FaceSampleLibrary `json:"faces"`
|
||||
}
|
||||
ModifyFaceNameRequestAndResponse {
|
||||
ID int64 `json:"id"`
|
||||
FaceName string `json:"face_name"`
|
||||
}
|
||||
ModifyFaceTypeRequest {
|
||||
IDs []int64 `json:"ids"`
|
||||
FaceType int64 `json:"face_type"`
|
||||
}
|
||||
ModifyFaceTypeResponse {
|
||||
result string `json:"result"`
|
||||
}
|
||||
)
|
||||
|
||||
// 文件上传
|
||||
@@ -436,7 +458,7 @@ type (
|
||||
timeout: 20s // 超时时间
|
||||
maxBytes: 104857600 // 最大请求大小
|
||||
signature: false // 是否开启签名验证
|
||||
middleware: SecurityHeadersMiddleware,CasbinVerifyMiddleware,AuthorizationMiddleware,NonceMiddleware // 注册中间件
|
||||
middleware: SecurityHeadersMiddleware,CasbinVerifyMiddleware,NonceMiddleware // 注册中间件
|
||||
MaxConns: true // 是否开启最大连接数限制
|
||||
Recover: true // 是否开启自动恢复
|
||||
jwt: Auth // 是否开启jwt验证
|
||||
@@ -449,5 +471,17 @@ service auth {
|
||||
// 设置存储配置
|
||||
@handler setStorageConfig
|
||||
post /config (StorageConfigRequest) returns (string)
|
||||
|
||||
// 获取人脸样本库列表
|
||||
@handler getFaceSampleLibraryList
|
||||
post /face/sample/list (FaceSampleLibraryListRequest) returns (FaceSampleLibraryListResponse)
|
||||
|
||||
// 修改人脸样本名称
|
||||
@handler modifyFaceLibraryName
|
||||
post /face/sample/modify/name (ModifyFaceNameRequestAndResponse) returns (ModifyFaceNameRequestAndResponse)
|
||||
|
||||
// 修改人脸样本类型
|
||||
@handler modifyFaceLibraryType
|
||||
post /face/sample/modify/type (ModifyFaceTypeRequest) returns (ModifyFaceTypeResponse)
|
||||
}
|
||||
|
||||
|
@@ -170,6 +170,17 @@ SMS:
|
||||
Username: landaiqing
|
||||
# 短信宝用户密码
|
||||
Password: $LDQ20020618xxx$
|
||||
# 高德地图配置
|
||||
Map:
|
||||
# 高德地图API Key
|
||||
Key: 54823a494909959a9c8cd8af101bbc32
|
||||
Key: 54823a494909959a9c8cd8af101bbc32
|
||||
# Minio配置
|
||||
Minio:
|
||||
# Minio 地址
|
||||
Endpoint: 1.95.0.111:9000
|
||||
# Minio 访问密钥
|
||||
AccessKeyID: JNLVxMGro1XXwajodLBX
|
||||
# Minio 访问密钥
|
||||
SecretAccessKey: XEHkwExqQdAlEPfpRk36xpc0Sie8hZkcmlhXQJXw
|
||||
# Minio 使用SSL
|
||||
UseSSL: false
|
@@ -74,4 +74,10 @@ type Config struct {
|
||||
Map struct {
|
||||
Key string
|
||||
}
|
||||
Minio struct {
|
||||
Endpoint string
|
||||
AccessKeyID string
|
||||
SecretAccessKey string
|
||||
UseSSL bool
|
||||
}
|
||||
}
|
||||
|
@@ -62,7 +62,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
|
||||
server.AddRoutes(
|
||||
rest.WithMiddlewares(
|
||||
[]rest.Middleware{serverCtx.SecurityHeadersMiddleware, serverCtx.CasbinVerifyMiddleware, serverCtx.AuthorizationMiddleware, serverCtx.NonceMiddleware},
|
||||
[]rest.Middleware{serverCtx.SecurityHeadersMiddleware, serverCtx.CasbinVerifyMiddleware, serverCtx.NonceMiddleware},
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
@@ -186,13 +186,28 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
|
||||
server.AddRoutes(
|
||||
rest.WithMiddlewares(
|
||||
[]rest.Middleware{serverCtx.SecurityHeadersMiddleware, serverCtx.CasbinVerifyMiddleware, serverCtx.AuthorizationMiddleware, serverCtx.NonceMiddleware},
|
||||
[]rest.Middleware{serverCtx.SecurityHeadersMiddleware, serverCtx.CasbinVerifyMiddleware, serverCtx.NonceMiddleware},
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/config",
|
||||
Handler: storage.SetStorageConfigHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/face/sample/list",
|
||||
Handler: storage.GetFaceSampleLibraryListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/face/sample/modify/name",
|
||||
Handler: storage.ModifyFaceLibraryNameHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/face/sample/modify/type",
|
||||
Handler: storage.ModifyFaceLibraryTypeHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/uploads",
|
||||
|
@@ -0,0 +1,29 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"net/http"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
|
||||
"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 GetFaceSampleLibraryListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.FaceSampleLibraryListRequest
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
return
|
||||
}
|
||||
|
||||
l := storage.NewGetFaceSampleLibraryListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.GetFaceSampleLibraryList(&req)
|
||||
if err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
} else {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
|
||||
}
|
||||
}
|
||||
}
|
@@ -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 ModifyFaceLibraryNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.ModifyFaceNameRequestAndResponse
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
return
|
||||
}
|
||||
|
||||
l := storage.NewModifyFaceLibraryNameLogic(r.Context(), svcCtx)
|
||||
resp, err := l.ModifyFaceLibraryName(&req)
|
||||
if err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
} else {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
|
||||
}
|
||||
}
|
||||
}
|
@@ -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 ModifyFaceLibraryTypeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.ModifyFaceTypeRequest
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
return
|
||||
}
|
||||
|
||||
l := storage.NewModifyFaceLibraryTypeLogic(r.Context(), svcCtx)
|
||||
resp, err := l.ModifyFaceLibraryType(&req)
|
||||
if err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
} else {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
|
||||
}
|
||||
}
|
||||
}
|
@@ -34,7 +34,7 @@ func (l *GenerateClientIdLogic) GenerateClientId(clientIP string) (resp string,
|
||||
return clientId, nil
|
||||
}
|
||||
simpleUuid := kgo.SimpleUuid()
|
||||
if err = l.svcCtx.RedisClient.SetEx(l.ctx, constant.UserClientPrefix+clientIP, simpleUuid, time.Hour*24*7).Err(); err != nil {
|
||||
if err = l.svcCtx.RedisClient.SetEx(l.ctx, constant.UserClientPrefix+clientIP, simpleUuid, time.Hour*24*3).Err(); err != nil {
|
||||
return "", errors.New(http.StatusInternalServerError, err.Error())
|
||||
}
|
||||
return simpleUuid, nil
|
||||
|
@@ -2,17 +2,14 @@ package comment
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mongodb"
|
||||
"schisandra-album-cloud-microservices/common/constant"
|
||||
"schisandra-album-cloud-microservices/common/utils"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/chenmingyong0423/go-mongox/v2/builder/query"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"gorm.io/gen/field"
|
||||
)
|
||||
@@ -60,6 +57,7 @@ func (l *GetCommentListLogic) GetCommentList(req *types.CommentListRequest) (res
|
||||
comment.Browser,
|
||||
comment.OperatingSystem,
|
||||
comment.Location,
|
||||
comment.ImagePath,
|
||||
user.Avatar,
|
||||
user.Nickname,
|
||||
).LeftJoin(user, comment.UserID.EqCol(user.UID)).
|
||||
@@ -82,7 +80,7 @@ func (l *GetCommentListLogic) GetCommentList(req *types.CommentListRequest) (res
|
||||
for _, commentList := range commentQueryList {
|
||||
commentIds = append(commentIds, commentList.ID)
|
||||
}
|
||||
l.wg.Add(2)
|
||||
l.wg.Add(1)
|
||||
|
||||
// *************** 获取评论点赞状态 **********
|
||||
likeMap := make(map[int64]bool)
|
||||
@@ -102,36 +100,22 @@ func (l *GetCommentListLogic) GetCommentList(req *types.CommentListRequest) (res
|
||||
likeMap[like.CommentID] = true
|
||||
}
|
||||
}()
|
||||
// ***************获取评论图片 **********
|
||||
commentImageMap := make(map[int64][]string)
|
||||
go func() {
|
||||
defer l.wg.Done()
|
||||
newCollection := mongodb.MustNewCollection[types.CommentImages](l.svcCtx.MongoClient, constant.COMMENT_IMAGES)
|
||||
commentImages, err := newCollection.Finder().
|
||||
Filter(query.Eq("topic_id", req.TopicId)).
|
||||
Filter(query.In("comment_id", commentIds...)).
|
||||
Find(l.ctx)
|
||||
if err != nil {
|
||||
logx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, image := range commentImages {
|
||||
if len(image.Images) == 0 {
|
||||
continue
|
||||
}
|
||||
imagesBase64 := make([]string, len(image.Images))
|
||||
for i, img := range image.Images {
|
||||
imagesBase64[i] = fmt.Sprintf("data:%s;base64,%s", utils.GetMimeType(img), base64.StdEncoding.EncodeToString(img))
|
||||
}
|
||||
commentImageMap[image.CommentId] = imagesBase64
|
||||
}
|
||||
}()
|
||||
l.wg.Wait()
|
||||
|
||||
// *************** 组装数据 **********
|
||||
result := make([]types.CommentContent, 0, len(commentQueryList))
|
||||
for _, commentData := range commentQueryList {
|
||||
var imagePath string
|
||||
if commentData.ImagePath != "" {
|
||||
reqParams := make(url.Values)
|
||||
presignedURL, err := l.svcCtx.MinioClient.PresignedGetObject(l.ctx, constant.CommentImagesBucketName, commentData.ImagePath, time.Hour*24, reqParams)
|
||||
if err != nil {
|
||||
logx.Error(err)
|
||||
continue
|
||||
}
|
||||
imagePath = presignedURL.String()
|
||||
}
|
||||
commentContent := types.CommentContent{
|
||||
Avatar: commentData.Avatar,
|
||||
NickName: commentData.Nickname,
|
||||
@@ -148,7 +132,7 @@ func (l *GetCommentListLogic) GetCommentList(req *types.CommentListRequest) (res
|
||||
Browser: commentData.Browser,
|
||||
OperatingSystem: commentData.OperatingSystem,
|
||||
IsLiked: likeMap[commentData.ID],
|
||||
Images: commentImageMap[commentData.ID],
|
||||
Images: imagePath,
|
||||
}
|
||||
result = append(result, commentContent)
|
||||
}
|
||||
|
@@ -2,17 +2,13 @@ package comment
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mongodb"
|
||||
"schisandra-album-cloud-microservices/common/constant"
|
||||
"schisandra-album-cloud-microservices/common/utils"
|
||||
"sync"
|
||||
|
||||
"github.com/chenmingyong0423/go-mongox/v2/builder/query"
|
||||
"time"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
@@ -59,6 +55,7 @@ func (l *GetReplyListLogic) GetReplyList(req *types.ReplyListRequest) (resp *typ
|
||||
reply.ReplyUser,
|
||||
reply.ReplyTo,
|
||||
reply.ReplyID,
|
||||
reply.ImagePath,
|
||||
commentUser.Avatar,
|
||||
commentUser.Nickname,
|
||||
replyUser.Nickname.As("reply_nickname"),
|
||||
@@ -82,7 +79,7 @@ func (l *GetReplyListLogic) GetReplyList(req *types.ReplyListRequest) (resp *typ
|
||||
for _, commentList := range replyQueryList {
|
||||
commentIds = append(commentIds, commentList.ID)
|
||||
}
|
||||
l.wg.Add(2)
|
||||
l.wg.Add(1)
|
||||
|
||||
// *************** 获取评论点赞状态 **********
|
||||
likeMap := make(map[int64]bool)
|
||||
@@ -102,36 +99,22 @@ func (l *GetReplyListLogic) GetReplyList(req *types.ReplyListRequest) (resp *typ
|
||||
likeMap[like.CommentID] = true
|
||||
}
|
||||
}()
|
||||
// ***************获取评论图片 **********
|
||||
commentImageMap := make(map[int64][]string)
|
||||
go func() {
|
||||
defer l.wg.Done()
|
||||
newCollection := mongodb.MustNewCollection[types.CommentImages](l.svcCtx.MongoClient, constant.COMMENT_IMAGES)
|
||||
commentImages, err := newCollection.Finder().
|
||||
Filter(query.Eq("topic_id", req.TopicId)).
|
||||
Filter(query.In("comment_id", commentIds...)).
|
||||
Find(l.ctx)
|
||||
if err != nil {
|
||||
logx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, image := range commentImages {
|
||||
if len(image.Images) == 0 {
|
||||
continue
|
||||
}
|
||||
imagesBase64 := make([]string, len(image.Images))
|
||||
for i, img := range image.Images {
|
||||
imagesBase64[i] = fmt.Sprintf("data:%s;base64,%s", utils.GetMimeType(img), base64.StdEncoding.EncodeToString(img))
|
||||
}
|
||||
commentImageMap[image.CommentId] = imagesBase64
|
||||
}
|
||||
}()
|
||||
l.wg.Wait()
|
||||
|
||||
// *************** 组装数据 **********
|
||||
result := make([]types.CommentContent, 0, len(replyQueryList))
|
||||
for _, replyData := range replyQueryList {
|
||||
|
||||
var imagePath string
|
||||
if replyData.ImagePath != "" {
|
||||
reqParams := make(url.Values)
|
||||
presignedURL, err := l.svcCtx.MinioClient.PresignedGetObject(l.ctx, constant.CommentImagesBucketName, replyData.ImagePath, time.Hour*24, reqParams)
|
||||
if err != nil {
|
||||
logx.Error(err)
|
||||
continue
|
||||
}
|
||||
imagePath = presignedURL.String()
|
||||
}
|
||||
commentContent := types.CommentContent{
|
||||
Avatar: replyData.Avatar,
|
||||
NickName: replyData.Nickname,
|
||||
@@ -148,7 +131,7 @@ func (l *GetReplyListLogic) GetReplyList(req *types.ReplyListRequest) (resp *typ
|
||||
Browser: replyData.Browser,
|
||||
OperatingSystem: replyData.OperatingSystem,
|
||||
IsLiked: likeMap[replyData.ID],
|
||||
Images: commentImageMap[replyData.ID],
|
||||
Images: imagePath,
|
||||
ReplyUser: replyData.ReplyUser,
|
||||
ReplyTo: replyData.ReplyTo,
|
||||
ReplyId: replyData.ReplyId,
|
||||
|
@@ -1,13 +1,18 @@
|
||||
package comment
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/ccpwcn/kgo"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"net/http"
|
||||
"path"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mongodb"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
|
||||
"strconv"
|
||||
|
||||
"schisandra-album-cloud-microservices/common/captcha/verify"
|
||||
"schisandra-album-cloud-microservices/common/constant"
|
||||
@@ -41,9 +46,6 @@ func (l *SubmitCommentLogic) SubmitComment(r *http.Request, req *types.CommentRe
|
||||
if !res {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "captcha.verificationFailure"))
|
||||
}
|
||||
if len(req.Images) > 3 {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "comment.tooManyImages"))
|
||||
}
|
||||
userAgent := r.Header.Get("User-Agent")
|
||||
if userAgent == "" {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "comment.commentError"))
|
||||
@@ -74,6 +76,7 @@ func (l *SubmitCommentLogic) SubmitComment(r *http.Request, req *types.CommentRe
|
||||
commentContent := l.svcCtx.Sensitive.Replace(xssFilterContent, '*')
|
||||
topicType := constant.CommentTopicType
|
||||
commentType := constant.COMMENT
|
||||
commentReply := l.svcCtx.DB.ScaCommentReply
|
||||
comment := &model.ScaCommentReply{
|
||||
Content: commentContent,
|
||||
UserID: uid,
|
||||
@@ -87,28 +90,52 @@ func (l *SubmitCommentLogic) SubmitComment(r *http.Request, req *types.CommentRe
|
||||
OperatingSystem: operatingSystem,
|
||||
Agent: userAgent,
|
||||
}
|
||||
err = l.svcCtx.DB.ScaCommentReply.Create(comment)
|
||||
err = commentReply.Create(comment)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(req.Images) > 0 {
|
||||
imagesData, err := utils.ProcessImages(req.Images)
|
||||
if req.Images != "" {
|
||||
imagesData, err := utils.Base64ToBytes(req.Images)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
commentImages := &types.CommentImages{
|
||||
UserId: uid,
|
||||
TopicId: req.TopicId,
|
||||
CommentId: comment.ID,
|
||||
Images: imagesData,
|
||||
objectKey := path.Join(
|
||||
req.TopicId,
|
||||
time.Now().Format("2006/01"), // 按年/月划分目录
|
||||
strconv.FormatInt(comment.ID, 10),
|
||||
fmt.Sprintf("%s_%s.jpg", uid, kgo.SimpleUuid()),
|
||||
)
|
||||
|
||||
exists, err := l.svcCtx.MinioClient.BucketExists(l.ctx, constant.CommentImagesBucketName)
|
||||
if err != nil || !exists {
|
||||
err = l.svcCtx.MinioClient.MakeBucket(l.ctx, constant.CommentImagesBucketName, minio.MakeBucketOptions{Region: "us-east-1", ObjectLocking: true})
|
||||
if err != nil {
|
||||
logx.Errorf("Failed to create MinIO bucket: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
newCollection := mongodb.MustNewCollection[types.CommentImages](l.svcCtx.MongoClient, constant.COMMENT_IMAGES)
|
||||
_, err = newCollection.Creator().InsertOne(l.ctx, commentImages)
|
||||
// 上传到MinIO
|
||||
_, err = l.svcCtx.MinioClient.PutObject(
|
||||
l.ctx,
|
||||
constant.CommentImagesBucketName,
|
||||
objectKey,
|
||||
bytes.NewReader(imagesData),
|
||||
int64(len(imagesData)),
|
||||
minio.PutObjectOptions{
|
||||
ContentType: "image/jpeg",
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
logx.Errorf("Failed to upload image to MinIO: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
info, err := commentReply.Where(commentReply.ID.Eq(comment.ID)).Update(commentReply.ImagePath, objectKey)
|
||||
if err != nil || info.RowsAffected == 0 {
|
||||
return nil, errors.New("update image path failed")
|
||||
}
|
||||
|
||||
}
|
||||
commentResponse := &types.CommentResponse{
|
||||
Id: comment.ID,
|
||||
|
@@ -1,18 +1,23 @@
|
||||
package comment
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/ccpwcn/kgo"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"net/http"
|
||||
"path"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mongodb"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
|
||||
"schisandra-album-cloud-microservices/common/captcha/verify"
|
||||
"schisandra-album-cloud-microservices/common/constant"
|
||||
errors2 "schisandra-album-cloud-microservices/common/errors"
|
||||
"schisandra-album-cloud-microservices/common/i18n"
|
||||
"schisandra-album-cloud-microservices/common/utils"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/mssola/useragent"
|
||||
@@ -39,9 +44,6 @@ func (l *SubmitReplyCommentLogic) SubmitReplyComment(r *http.Request, req *types
|
||||
if !res {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "captcha.verificationFailure"))
|
||||
}
|
||||
if len(req.Images) > 3 {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "comment.tooManyImages"))
|
||||
}
|
||||
userAgent := r.Header.Get("User-Agent")
|
||||
if userAgent == "" {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "comment.commentError"))
|
||||
@@ -105,24 +107,47 @@ func (l *SubmitReplyCommentLogic) SubmitReplyComment(r *http.Request, req *types
|
||||
|
||||
}
|
||||
|
||||
if len(req.Images) > 0 {
|
||||
imagesData, err := utils.ProcessImages(req.Images)
|
||||
if req.Images != "" {
|
||||
imagesData, err := utils.Base64ToBytes(req.Images)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
objectKey := path.Join(
|
||||
req.TopicId,
|
||||
time.Now().Format("2006/01"), // 按年/月划分目录
|
||||
strconv.FormatInt(reply.ID, 10),
|
||||
fmt.Sprintf("%s_%s.jpg", uid, kgo.SimpleUuid()),
|
||||
)
|
||||
|
||||
commentImages := &types.CommentImages{
|
||||
UserId: uid,
|
||||
TopicId: req.TopicId,
|
||||
CommentId: reply.ID,
|
||||
Images: imagesData,
|
||||
exists, err := l.svcCtx.MinioClient.BucketExists(l.ctx, constant.CommentImagesBucketName)
|
||||
if err != nil || !exists {
|
||||
err = l.svcCtx.MinioClient.MakeBucket(l.ctx, constant.CommentImagesBucketName, minio.MakeBucketOptions{Region: "us-east-1", ObjectLocking: true})
|
||||
if err != nil {
|
||||
logx.Errorf("Failed to create MinIO bucket: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
newCollection := mongodb.MustNewCollection[types.CommentImages](l.svcCtx.MongoClient, constant.COMMENT_IMAGES)
|
||||
_, err = newCollection.Creator().InsertOne(l.ctx, commentImages)
|
||||
// 上传到MinIO
|
||||
_, err = l.svcCtx.MinioClient.PutObject(
|
||||
l.ctx,
|
||||
constant.CommentImagesBucketName,
|
||||
objectKey,
|
||||
bytes.NewReader(imagesData),
|
||||
int64(len(imagesData)),
|
||||
minio.PutObjectOptions{
|
||||
ContentType: "image/jpeg",
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
logx.Errorf("Failed to upload image to MinIO: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
info, err := commentReply.Where(commentReply.ID.Eq(reply.ID)).Update(commentReply.ImagePath, objectKey)
|
||||
if err != nil || info.RowsAffected == 0 {
|
||||
return nil, errors.New("update image path failed")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
commentResponse := &types.CommentResponse{
|
||||
|
@@ -1,18 +1,23 @@
|
||||
package comment
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/ccpwcn/kgo"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"net/http"
|
||||
"path"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mongodb"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
|
||||
"schisandra-album-cloud-microservices/common/captcha/verify"
|
||||
"schisandra-album-cloud-microservices/common/constant"
|
||||
errors2 "schisandra-album-cloud-microservices/common/errors"
|
||||
"schisandra-album-cloud-microservices/common/i18n"
|
||||
"schisandra-album-cloud-microservices/common/utils"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/mssola/useragent"
|
||||
@@ -39,9 +44,6 @@ func (l *SubmitReplyReplyLogic) SubmitReplyReply(r *http.Request, req *types.Rep
|
||||
if !res {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "captcha.verificationFailure"))
|
||||
}
|
||||
if len(req.Images) > 3 {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "comment.tooManyImages"))
|
||||
}
|
||||
userAgent := r.Header.Get("User-Agent")
|
||||
if userAgent == "" {
|
||||
return nil, errors2.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "comment.commentError"))
|
||||
@@ -112,24 +114,47 @@ func (l *SubmitReplyReplyLogic) SubmitReplyReply(r *http.Request, req *types.Rep
|
||||
|
||||
}
|
||||
|
||||
// 处理图片
|
||||
if len(req.Images) > 0 {
|
||||
imagesData, err := utils.ProcessImages(req.Images)
|
||||
if req.Images != "" {
|
||||
imagesData, err := utils.Base64ToBytes(req.Images)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
commentImages := &types.CommentImages{
|
||||
UserId: uid,
|
||||
TopicId: req.TopicId,
|
||||
CommentId: replyReply.ID,
|
||||
Images: imagesData,
|
||||
objectKey := path.Join(
|
||||
req.TopicId,
|
||||
time.Now().Format("2006/01"), // 按年/月划分目录
|
||||
strconv.FormatInt(replyReply.ID, 10),
|
||||
fmt.Sprintf("%s_%s.jpg", uid, kgo.SimpleUuid()),
|
||||
)
|
||||
|
||||
exists, err := l.svcCtx.MinioClient.BucketExists(l.ctx, constant.CommentImagesBucketName)
|
||||
if err != nil || !exists {
|
||||
err = l.svcCtx.MinioClient.MakeBucket(l.ctx, constant.CommentImagesBucketName, minio.MakeBucketOptions{Region: "us-east-1", ObjectLocking: true})
|
||||
if err != nil {
|
||||
logx.Errorf("Failed to create MinIO bucket: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
newCollection := mongodb.MustNewCollection[types.CommentImages](l.svcCtx.MongoClient, constant.COMMENT_IMAGES)
|
||||
_, err = newCollection.Creator().InsertOne(l.ctx, commentImages)
|
||||
// 上传到MinIO
|
||||
_, err = l.svcCtx.MinioClient.PutObject(
|
||||
l.ctx,
|
||||
constant.CommentImagesBucketName,
|
||||
objectKey,
|
||||
bytes.NewReader(imagesData),
|
||||
int64(len(imagesData)),
|
||||
minio.PutObjectOptions{
|
||||
ContentType: "image/jpeg",
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
logx.Errorf("Failed to upload image to MinIO: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
info, err := commentReply.Where(commentReply.ID.Eq(replyReply.ID)).Update(commentReply.ImagePath, objectKey)
|
||||
if err != nil || info.RowsAffected == 0 {
|
||||
return nil, errors.New("update image path failed")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 构建响应
|
||||
|
@@ -0,0 +1,48 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"schisandra-album-cloud-microservices/app/aisvc/rpc/pb"
|
||||
|
||||
"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 GetFaceSampleLibraryListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewGetFaceSampleLibraryListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetFaceSampleLibraryListLogic {
|
||||
return &GetFaceSampleLibraryListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *GetFaceSampleLibraryListLogic) GetFaceSampleLibraryList(req *types.FaceSampleLibraryListRequest) (resp *types.FaceSampleLibraryListResponse, err error) {
|
||||
uid, ok := l.ctx.Value("user_id").(string)
|
||||
if !ok {
|
||||
return nil, errors.New("user_id not found")
|
||||
}
|
||||
faceLibrary, err := l.svcCtx.AiSvcRpc.QueryFaceLibrary(l.ctx, &pb.QueryFaceLibraryRequest{UserId: uid, Type: req.Type})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var faceSampleLibraries []types.FaceSampleLibrary
|
||||
for _, face := range faceLibrary.GetFaces() {
|
||||
faceSampleLibraries = append(faceSampleLibraries, types.FaceSampleLibrary{
|
||||
ID: face.GetId(),
|
||||
FaceName: face.GetFaceName(),
|
||||
FaceImage: face.GetFaceImage(),
|
||||
})
|
||||
}
|
||||
return &types.FaceSampleLibraryListResponse{
|
||||
Faces: faceSampleLibraries,
|
||||
}, nil
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"schisandra-album-cloud-microservices/app/aisvc/rpc/pb"
|
||||
|
||||
"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 ModifyFaceLibraryNameLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewModifyFaceLibraryNameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ModifyFaceLibraryNameLogic {
|
||||
return &ModifyFaceLibraryNameLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *ModifyFaceLibraryNameLogic) ModifyFaceLibraryName(req *types.ModifyFaceNameRequestAndResponse) (resp *types.ModifyFaceNameRequestAndResponse, err error) {
|
||||
uid, ok := l.ctx.Value("user_id").(string)
|
||||
if !ok {
|
||||
return nil, errors.New("user_id not found")
|
||||
}
|
||||
faceInfo, err := l.svcCtx.AiSvcRpc.ModifyFaceName(l.ctx, &pb.ModifyFaceNameRequest{UserId: uid, FaceId: req.ID, FaceName: req.FaceName})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &types.ModifyFaceNameRequestAndResponse{ID: faceInfo.GetFaceId(), FaceName: faceInfo.GetFaceName()}, nil
|
||||
}
|
@@ -0,0 +1,46 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"schisandra-album-cloud-microservices/app/aisvc/rpc/pb"
|
||||
|
||||
"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 ModifyFaceLibraryTypeLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewModifyFaceLibraryTypeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ModifyFaceLibraryTypeLogic {
|
||||
return &ModifyFaceLibraryTypeLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *ModifyFaceLibraryTypeLogic) ModifyFaceLibraryType(req *types.ModifyFaceTypeRequest) (resp *types.ModifyFaceTypeResponse, err error) {
|
||||
uid, ok := l.ctx.Value("user_id").(string)
|
||||
if !ok {
|
||||
return nil, errors.New("user_id not found")
|
||||
}
|
||||
faceInfo, err := l.svcCtx.AiSvcRpc.ModifyFaceType(l.ctx, &pb.ModifyFaceTypeRequest{UserId: uid, FaceId: req.IDs, Type: req.FaceType})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
storageInfo := l.svcCtx.DB.ScaStorageInfo
|
||||
resultInfo, err := storageInfo.Where(storageInfo.FaceID.In(req.IDs...)).Update(storageInfo.Hide, req.FaceType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if resultInfo.RowsAffected != int64(len(req.IDs)) {
|
||||
return nil, errors.New("update failed")
|
||||
}
|
||||
return &types.ModifyFaceTypeResponse{Result: faceInfo.Result}, nil
|
||||
}
|
@@ -1,20 +0,0 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"schisandra-album-cloud-microservices/common/middleware"
|
||||
)
|
||||
|
||||
type AuthorizationMiddleware struct {
|
||||
}
|
||||
|
||||
func NewAuthorizationMiddleware() *AuthorizationMiddleware {
|
||||
return &AuthorizationMiddleware{}
|
||||
}
|
||||
|
||||
func (m *AuthorizationMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
middleware.AuthorizationMiddleware(w, r)
|
||||
next(w, r)
|
||||
}
|
||||
}
|
@@ -4,23 +4,23 @@ import (
|
||||
"github.com/ArtisanCloud/PowerWeChat/v3/src/officialAccount"
|
||||
"github.com/casbin/casbin/v2"
|
||||
"github.com/lionsoul2014/ip2region/binding/golang/xdb"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"github.com/wenlng/go-captcha/v2/rotate"
|
||||
"github.com/wenlng/go-captcha/v2/slide"
|
||||
"github.com/zeromicro/go-zero/rest"
|
||||
"github.com/zeromicro/go-zero/zrpc"
|
||||
sensitive "github.com/zmexing/go-sensitive-word"
|
||||
"go.mongodb.org/mongo-driver/v2/mongo"
|
||||
"schisandra-album-cloud-microservices/app/aisvc/rpc/client/aiservice"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/config"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/middleware"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mongodb"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mysql"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mysql/query"
|
||||
"schisandra-album-cloud-microservices/common/captcha/initialize"
|
||||
"schisandra-album-cloud-microservices/common/casbinx"
|
||||
"schisandra-album-cloud-microservices/common/gao_map"
|
||||
"schisandra-album-cloud-microservices/common/ip2region"
|
||||
"schisandra-album-cloud-microservices/common/miniox"
|
||||
"schisandra-album-cloud-microservices/common/redisx"
|
||||
"schisandra-album-cloud-microservices/common/sensitivex"
|
||||
"schisandra-album-cloud-microservices/common/storage"
|
||||
@@ -33,19 +33,18 @@ type ServiceContext struct {
|
||||
AiSvcRpc aiservice.AiService
|
||||
SecurityHeadersMiddleware rest.Middleware
|
||||
CasbinVerifyMiddleware rest.Middleware
|
||||
AuthorizationMiddleware rest.Middleware
|
||||
NonceMiddleware rest.Middleware
|
||||
DB *query.Query
|
||||
RedisClient *redis.Client
|
||||
Ip2Region *xdb.Searcher
|
||||
CasbinEnforcer *casbin.SyncedCachedEnforcer
|
||||
WechatOfficial *officialAccount.OfficialAccount
|
||||
MongoClient *mongo.Database
|
||||
RotateCaptcha rotate.Captcha
|
||||
SlideCaptcha slide.Captcha
|
||||
Sensitive *sensitive.Manager
|
||||
StorageManager *manager.Manager
|
||||
GaoMap *gao_map.AmapClient
|
||||
MinioClient *minio.Client
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
@@ -56,7 +55,6 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
||||
Config: c,
|
||||
SecurityHeadersMiddleware: middleware.NewSecurityHeadersMiddleware().Handle,
|
||||
CasbinVerifyMiddleware: middleware.NewCasbinVerifyMiddleware(casbinEnforcer).Handle,
|
||||
AuthorizationMiddleware: middleware.NewAuthorizationMiddleware().Handle,
|
||||
NonceMiddleware: middleware.NewNonceMiddleware(redisClient).Handle,
|
||||
DB: queryDB,
|
||||
RedisClient: redisClient,
|
||||
@@ -65,10 +63,10 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
||||
WechatOfficial: wechat_official.NewWechatPublic(c.Wechat.AppID, c.Wechat.AppSecret, c.Wechat.Token, c.Wechat.AESKey, c.Redis.Host, c.Redis.Pass, c.Redis.DB),
|
||||
RotateCaptcha: initialize.NewRotateCaptcha(),
|
||||
SlideCaptcha: initialize.NewSlideCaptcha(),
|
||||
MongoClient: mongodb.NewMongoDB(c.Mongo.Uri, c.Mongo.Username, c.Mongo.Password, c.Mongo.AuthSource, c.Mongo.Database),
|
||||
Sensitive: sensitivex.NewSensitive(),
|
||||
StorageManager: storage.InitStorageManager(),
|
||||
GaoMap: gao_map.NewAmapClient(c.Map.Key, ""),
|
||||
AiSvcRpc: aiservice.NewAiService(zrpc.MustNewClient(c.AiSvcRpc)),
|
||||
MinioClient: miniox.NewMinio(c.Minio.Endpoint, c.Minio.AccessKeyID, c.Minio.SecretAccessKey, c.Minio.UseSSL),
|
||||
}
|
||||
}
|
||||
|
@@ -2,19 +2,8 @@ package types
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/chenmingyong0423/go-mongox/v2"
|
||||
)
|
||||
|
||||
// CommentImages 评论 图片
|
||||
type CommentImages struct {
|
||||
mongox.Model `bson:",inline"`
|
||||
TopicId string `json:"topic_id" bson:"topic_id"`
|
||||
CommentId int64 `json:"comment_id" bson:"comment_id"`
|
||||
UserId string `json:"user_id" bson:"user_id"`
|
||||
Images [][]byte `json:"images" bson:"images"`
|
||||
}
|
||||
|
||||
// CommentListQueryResult 评论列表查询结果
|
||||
type CommentListQueryResult struct {
|
||||
ID int64 `json:"id"`
|
||||
@@ -30,6 +19,7 @@ type CommentListQueryResult struct {
|
||||
Location string `json:"location"`
|
||||
Avatar string `json:"avatar"`
|
||||
Nickname string `json:"nickname"`
|
||||
ImagePath string `json:"image_path"`
|
||||
}
|
||||
|
||||
// ReplyListQueryResult 回复列表查询结果
|
||||
@@ -51,4 +41,5 @@ type ReplyListQueryResult struct {
|
||||
ReplyId int64 `json:"reply_id"`
|
||||
ReplyTo int64 `json:"reply_to"`
|
||||
ReplyNickname string `json:"reply_nickname"`
|
||||
ImagePath string `json:"image_path"`
|
||||
}
|
||||
|
@@ -12,26 +12,26 @@ type AccountLoginRequest struct {
|
||||
}
|
||||
|
||||
type CommentContent struct {
|
||||
NickName string `json:"nickname"`
|
||||
Avatar string `json:"avatar"`
|
||||
Level int64 `json:"level,omitempty" default:"0"`
|
||||
Id int64 `json:"id"`
|
||||
UserId string `json:"user_id"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Content string `json:"content"`
|
||||
ReplyTo int64 `json:"reply_to,omitempty"`
|
||||
ReplyId int64 `json:"reply_id,omitempty"`
|
||||
ReplyUser string `json:"reply_user,omitempty"`
|
||||
ReplyNickname string `json:"reply_nickname,omitempty"`
|
||||
IsAuthor int64 `json:"is_author"`
|
||||
Likes int64 `json:"likes"`
|
||||
ReplyCount int64 `json:"reply_count"`
|
||||
CreatedTime string `json:"created_time"`
|
||||
Location string `json:"location"`
|
||||
Browser string `json:"browser"`
|
||||
OperatingSystem string `json:"operating_system"`
|
||||
IsLiked bool `json:"is_liked" default:"false"`
|
||||
Images []string `json:"images,omitempty"`
|
||||
NickName string `json:"nickname"`
|
||||
Avatar string `json:"avatar"`
|
||||
Level int64 `json:"level,omitempty" default:"0"`
|
||||
Id int64 `json:"id"`
|
||||
UserId string `json:"user_id"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Content string `json:"content"`
|
||||
ReplyTo int64 `json:"reply_to,omitempty"`
|
||||
ReplyId int64 `json:"reply_id,omitempty"`
|
||||
ReplyUser string `json:"reply_user,omitempty"`
|
||||
ReplyNickname string `json:"reply_nickname,omitempty"`
|
||||
IsAuthor int64 `json:"is_author"`
|
||||
Likes int64 `json:"likes"`
|
||||
ReplyCount int64 `json:"reply_count"`
|
||||
CreatedTime string `json:"created_time"`
|
||||
Location string `json:"location"`
|
||||
Browser string `json:"browser"`
|
||||
OperatingSystem string `json:"operating_system"`
|
||||
IsLiked bool `json:"is_liked" default:"false"`
|
||||
Images string `json:"images,omitempty"`
|
||||
}
|
||||
|
||||
type CommentDisLikeRequest struct {
|
||||
@@ -59,12 +59,12 @@ type CommentListRequest struct {
|
||||
}
|
||||
|
||||
type CommentRequest struct {
|
||||
Content string `json:"content"`
|
||||
Images []string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
Content string `json:"content"`
|
||||
Images string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
}
|
||||
|
||||
type CommentResponse struct {
|
||||
@@ -82,6 +82,20 @@ type CommentResponse struct {
|
||||
ReplyTo int64 `json:"reply_to,omitempty"`
|
||||
}
|
||||
|
||||
type FaceSampleLibrary struct {
|
||||
ID int64 `json:"id"`
|
||||
FaceName string `json:"face_name"`
|
||||
FaceImage string `json:"face_image"`
|
||||
}
|
||||
|
||||
type FaceSampleLibraryListRequest struct {
|
||||
Type int64 `json:"type"`
|
||||
}
|
||||
|
||||
type FaceSampleLibraryListResponse struct {
|
||||
Faces []FaceSampleLibrary `json:"faces"`
|
||||
}
|
||||
|
||||
type LoginResponse struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
ExpireAt int64 `json:"expire_at"`
|
||||
@@ -92,6 +106,20 @@ type LoginResponse struct {
|
||||
Status int64 `json:"status"`
|
||||
}
|
||||
|
||||
type ModifyFaceNameRequestAndResponse struct {
|
||||
ID int64 `json:"id"`
|
||||
FaceName string `json:"face_name"`
|
||||
}
|
||||
|
||||
type ModifyFaceTypeRequest struct {
|
||||
IDs []int64 `json:"ids"`
|
||||
FaceType int64 `json:"face_type"`
|
||||
}
|
||||
|
||||
type ModifyFaceTypeResponse struct {
|
||||
Result string `json:"result"`
|
||||
}
|
||||
|
||||
type OAuthCallbackRequest struct {
|
||||
Code string `form:"code"`
|
||||
}
|
||||
@@ -116,14 +144,14 @@ type RefreshTokenResponse struct {
|
||||
}
|
||||
|
||||
type ReplyCommentRequest struct {
|
||||
Content string `json:"content"`
|
||||
Images []string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id" `
|
||||
ReplyId int64 `json:"reply_id" `
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
Content string `json:"content"`
|
||||
Images string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id" `
|
||||
ReplyId int64 `json:"reply_id" `
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
}
|
||||
|
||||
type ReplyListRequest struct {
|
||||
@@ -134,15 +162,15 @@ type ReplyListRequest struct {
|
||||
}
|
||||
|
||||
type ReplyReplyRequest struct {
|
||||
Content string `json:"content"`
|
||||
Images []string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
ReplyTo int64 `json:"reply_to"`
|
||||
ReplyId int64 `json:"reply_id"`
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
Content string `json:"content"`
|
||||
Images string `json:"images,optional"`
|
||||
TopicId string `json:"topic_id"`
|
||||
ReplyTo int64 `json:"reply_to"`
|
||||
ReplyId int64 `json:"reply_id"`
|
||||
ReplyUser string `json:"reply_user" `
|
||||
Author string `json:"author"`
|
||||
Key string `json:"key"`
|
||||
Point []int64 `json:"point"`
|
||||
}
|
||||
|
||||
type ResetPasswordRequest struct {
|
||||
|
@@ -1,12 +0,0 @@
|
||||
package mongodb
|
||||
|
||||
import (
|
||||
"github.com/chenmingyong0423/go-mongox/v2"
|
||||
"go.mongodb.org/mongo-driver/v2/mongo"
|
||||
)
|
||||
|
||||
// MustNewCollection creates a new Collection instance with the given name.
|
||||
func MustNewCollection[T any](mongoClient *mongo.Database, collectionName string) *mongox.Collection[T] {
|
||||
collection := mongoClient.Collection(collectionName)
|
||||
return mongox.NewCollection[T](collection)
|
||||
}
|
@@ -1,26 +0,0 @@
|
||||
package mongodb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"go.mongodb.org/mongo-driver/v2/mongo"
|
||||
"go.mongodb.org/mongo-driver/v2/mongo/options"
|
||||
"go.mongodb.org/mongo-driver/v2/mongo/readpref"
|
||||
)
|
||||
|
||||
// NewMongoDB initializes the MongoDB connection and returns the database object
|
||||
func NewMongoDB(uri string, username string, password string, authSource string, database string) *mongo.Database {
|
||||
client, err := mongo.Connect(options.Client().ApplyURI(uri).SetAuth(options.Credential{
|
||||
Username: username,
|
||||
Password: password,
|
||||
AuthSource: authSource,
|
||||
}))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = client.Ping(context.Background(), readpref.Primary())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
db := client.Database(database)
|
||||
return db
|
||||
}
|
@@ -115,6 +115,7 @@ func main() {
|
||||
scaUserFollows := g.GenerateModel("sca_user_follows", fieldOpts...)
|
||||
scaUserLevel := g.GenerateModel("sca_user_level", fieldOpts...)
|
||||
scaUserMessage := g.GenerateModel("sca_user_message", fieldOpts...)
|
||||
scaStorageAlbum := g.GenerateModel("sca_storage_album", fieldOpts...)
|
||||
|
||||
g.ApplyBasic(
|
||||
scaAuthMenu,
|
||||
@@ -133,6 +134,7 @@ func main() {
|
||||
scaUserFollows,
|
||||
scaUserLevel,
|
||||
scaUserMessage,
|
||||
scaStorageAlbum,
|
||||
)
|
||||
|
||||
g.Execute()
|
||||
|
@@ -27,6 +27,7 @@ type ScaCommentReply struct {
|
||||
Author int64 `gorm:"column:author;type:tinyint(4);comment:评论回复是否作者 0否 1是" json:"author"` // 评论回复是否作者 0否 1是
|
||||
Likes int64 `gorm:"column:likes;type:bigint(20);comment:点赞数" json:"likes"` // 点赞数
|
||||
ReplyCount int64 `gorm:"column:reply_count;type:bigint(20);comment:回复数量" json:"reply_count"` // 回复数量
|
||||
ImagePath string `gorm:"column:image_path;type:text;comment:评论图片地址" json:"image_path"` // 评论图片地址
|
||||
Browser string `gorm:"column:browser;type:varchar(50);comment:浏览器" json:"browser"` // 浏览器
|
||||
OperatingSystem string `gorm:"column:operating_system;type:varchar(50);comment:操作系统" json:"operating_system"` // 操作系统
|
||||
CommentIP string `gorm:"column:comment_ip;type:varchar(50);comment:IP地址" json:"comment_ip"` // IP地址
|
||||
|
29
app/auth/model/mysql/model/sca_storage_album.gen.go
Normal file
29
app/auth/model/mysql/model/sca_storage_album.gen.go
Normal file
@@ -0,0 +1,29 @@
|
||||
// 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 TableNameScaStorageAlbum = "sca_storage_album"
|
||||
|
||||
// ScaStorageAlbum mapped from table <sca_storage_album>
|
||||
type ScaStorageAlbum 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
|
||||
AlbumName string `gorm:"column:album_name;type:varchar(50);comment:相册名称" json:"album_name"` // 相册名称
|
||||
AlbumType string `gorm:"column:album_type;type:varchar(50);comment:相册类型" json:"album_type"` // 相册类型
|
||||
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 ScaStorageAlbum's table name
|
||||
func (*ScaStorageAlbum) TableName() string {
|
||||
return TableNameScaStorageAlbum
|
||||
}
|
@@ -34,6 +34,8 @@ type ScaStorageInfo struct {
|
||||
Gps string `gorm:"column:gps;type:varchar(255);comment:GPS" json:"gps"` // GPS
|
||||
Screenshot string `gorm:"column:screenshot;type:varchar(50);comment:是否是截图" json:"screenshot"` // 是否是截图
|
||||
Exif string `gorm:"column:exif;type:json;comment:exif 信息" json:"exif"` // exif 信息
|
||||
Hide int64 `gorm:"column:hide;type:int(11) unsigned zerofill;comment:是否隐藏(0 不隐藏 1 隐藏)" json:"hide"` // 是否隐藏(0 不隐藏 1 隐藏)
|
||||
AlbumID int64 `gorm:"column:album_id;type:bigint(20);comment:相册ID" json:"album_id"` // 相册ID
|
||||
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"` // 删除时间
|
||||
|
@@ -26,6 +26,7 @@ var (
|
||||
ScaCommentLike *scaCommentLike
|
||||
ScaCommentReply *scaCommentReply
|
||||
ScaMessageReport *scaMessageReport
|
||||
ScaStorageAlbum *scaStorageAlbum
|
||||
ScaStorageConfig *scaStorageConfig
|
||||
ScaStorageInfo *scaStorageInfo
|
||||
ScaStorageTag *scaStorageTag
|
||||
@@ -46,6 +47,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||
ScaCommentLike = &Q.ScaCommentLike
|
||||
ScaCommentReply = &Q.ScaCommentReply
|
||||
ScaMessageReport = &Q.ScaMessageReport
|
||||
ScaStorageAlbum = &Q.ScaStorageAlbum
|
||||
ScaStorageConfig = &Q.ScaStorageConfig
|
||||
ScaStorageInfo = &Q.ScaStorageInfo
|
||||
ScaStorageTag = &Q.ScaStorageTag
|
||||
@@ -67,6 +69,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||
ScaCommentLike: newScaCommentLike(db, opts...),
|
||||
ScaCommentReply: newScaCommentReply(db, opts...),
|
||||
ScaMessageReport: newScaMessageReport(db, opts...),
|
||||
ScaStorageAlbum: newScaStorageAlbum(db, opts...),
|
||||
ScaStorageConfig: newScaStorageConfig(db, opts...),
|
||||
ScaStorageInfo: newScaStorageInfo(db, opts...),
|
||||
ScaStorageTag: newScaStorageTag(db, opts...),
|
||||
@@ -89,6 +92,7 @@ type Query struct {
|
||||
ScaCommentLike scaCommentLike
|
||||
ScaCommentReply scaCommentReply
|
||||
ScaMessageReport scaMessageReport
|
||||
ScaStorageAlbum scaStorageAlbum
|
||||
ScaStorageConfig scaStorageConfig
|
||||
ScaStorageInfo scaStorageInfo
|
||||
ScaStorageTag scaStorageTag
|
||||
@@ -112,6 +116,7 @@ func (q *Query) clone(db *gorm.DB) *Query {
|
||||
ScaCommentLike: q.ScaCommentLike.clone(db),
|
||||
ScaCommentReply: q.ScaCommentReply.clone(db),
|
||||
ScaMessageReport: q.ScaMessageReport.clone(db),
|
||||
ScaStorageAlbum: q.ScaStorageAlbum.clone(db),
|
||||
ScaStorageConfig: q.ScaStorageConfig.clone(db),
|
||||
ScaStorageInfo: q.ScaStorageInfo.clone(db),
|
||||
ScaStorageTag: q.ScaStorageTag.clone(db),
|
||||
@@ -142,6 +147,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
||||
ScaCommentLike: q.ScaCommentLike.replaceDB(db),
|
||||
ScaCommentReply: q.ScaCommentReply.replaceDB(db),
|
||||
ScaMessageReport: q.ScaMessageReport.replaceDB(db),
|
||||
ScaStorageAlbum: q.ScaStorageAlbum.replaceDB(db),
|
||||
ScaStorageConfig: q.ScaStorageConfig.replaceDB(db),
|
||||
ScaStorageInfo: q.ScaStorageInfo.replaceDB(db),
|
||||
ScaStorageTag: q.ScaStorageTag.replaceDB(db),
|
||||
@@ -162,6 +168,7 @@ type queryCtx struct {
|
||||
ScaCommentLike IScaCommentLikeDo
|
||||
ScaCommentReply IScaCommentReplyDo
|
||||
ScaMessageReport IScaMessageReportDo
|
||||
ScaStorageAlbum IScaStorageAlbumDo
|
||||
ScaStorageConfig IScaStorageConfigDo
|
||||
ScaStorageInfo IScaStorageInfoDo
|
||||
ScaStorageTag IScaStorageTagDo
|
||||
@@ -182,6 +189,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||
ScaCommentLike: q.ScaCommentLike.WithContext(ctx),
|
||||
ScaCommentReply: q.ScaCommentReply.WithContext(ctx),
|
||||
ScaMessageReport: q.ScaMessageReport.WithContext(ctx),
|
||||
ScaStorageAlbum: q.ScaStorageAlbum.WithContext(ctx),
|
||||
ScaStorageConfig: q.ScaStorageConfig.WithContext(ctx),
|
||||
ScaStorageInfo: q.ScaStorageInfo.WithContext(ctx),
|
||||
ScaStorageTag: q.ScaStorageTag.WithContext(ctx),
|
||||
|
@@ -39,6 +39,7 @@ func newScaCommentReply(db *gorm.DB, opts ...gen.DOOption) scaCommentReply {
|
||||
_scaCommentReply.Author = field.NewInt64(tableName, "author")
|
||||
_scaCommentReply.Likes = field.NewInt64(tableName, "likes")
|
||||
_scaCommentReply.ReplyCount = field.NewInt64(tableName, "reply_count")
|
||||
_scaCommentReply.ImagePath = field.NewString(tableName, "image_path")
|
||||
_scaCommentReply.Browser = field.NewString(tableName, "browser")
|
||||
_scaCommentReply.OperatingSystem = field.NewString(tableName, "operating_system")
|
||||
_scaCommentReply.CommentIP = field.NewString(tableName, "comment_ip")
|
||||
@@ -70,6 +71,7 @@ type scaCommentReply struct {
|
||||
Author field.Int64 // 评论回复是否作者 0否 1是
|
||||
Likes field.Int64 // 点赞数
|
||||
ReplyCount field.Int64 // 回复数量
|
||||
ImagePath field.String // 评论图片地址
|
||||
Browser field.String // 浏览器
|
||||
OperatingSystem field.String // 操作系统
|
||||
CommentIP field.String // IP地址
|
||||
@@ -107,6 +109,7 @@ func (s *scaCommentReply) updateTableName(table string) *scaCommentReply {
|
||||
s.Author = field.NewInt64(table, "author")
|
||||
s.Likes = field.NewInt64(table, "likes")
|
||||
s.ReplyCount = field.NewInt64(table, "reply_count")
|
||||
s.ImagePath = field.NewString(table, "image_path")
|
||||
s.Browser = field.NewString(table, "browser")
|
||||
s.OperatingSystem = field.NewString(table, "operating_system")
|
||||
s.CommentIP = field.NewString(table, "comment_ip")
|
||||
@@ -132,7 +135,7 @@ func (s *scaCommentReply) GetFieldByName(fieldName string) (field.OrderExpr, boo
|
||||
}
|
||||
|
||||
func (s *scaCommentReply) fillFieldMap() {
|
||||
s.fieldMap = make(map[string]field.Expr, 21)
|
||||
s.fieldMap = make(map[string]field.Expr, 22)
|
||||
s.fieldMap["id"] = s.ID
|
||||
s.fieldMap["user_id"] = s.UserID
|
||||
s.fieldMap["topic_id"] = s.TopicID
|
||||
@@ -145,6 +148,7 @@ func (s *scaCommentReply) fillFieldMap() {
|
||||
s.fieldMap["author"] = s.Author
|
||||
s.fieldMap["likes"] = s.Likes
|
||||
s.fieldMap["reply_count"] = s.ReplyCount
|
||||
s.fieldMap["image_path"] = s.ImagePath
|
||||
s.fieldMap["browser"] = s.Browser
|
||||
s.fieldMap["operating_system"] = s.OperatingSystem
|
||||
s.fieldMap["comment_ip"] = s.CommentIP
|
||||
|
404
app/auth/model/mysql/query/sca_storage_album.gen.go
Normal file
404
app/auth/model/mysql/query/sca_storage_album.gen.go
Normal file
@@ -0,0 +1,404 @@
|
||||
// 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 newScaStorageAlbum(db *gorm.DB, opts ...gen.DOOption) scaStorageAlbum {
|
||||
_scaStorageAlbum := scaStorageAlbum{}
|
||||
|
||||
_scaStorageAlbum.scaStorageAlbumDo.UseDB(db, opts...)
|
||||
_scaStorageAlbum.scaStorageAlbumDo.UseModel(&model.ScaStorageAlbum{})
|
||||
|
||||
tableName := _scaStorageAlbum.scaStorageAlbumDo.TableName()
|
||||
_scaStorageAlbum.ALL = field.NewAsterisk(tableName)
|
||||
_scaStorageAlbum.ID = field.NewInt64(tableName, "id")
|
||||
_scaStorageAlbum.UserID = field.NewString(tableName, "user_id")
|
||||
_scaStorageAlbum.AlbumName = field.NewString(tableName, "album_name")
|
||||
_scaStorageAlbum.AlbumType = field.NewString(tableName, "album_type")
|
||||
_scaStorageAlbum.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_scaStorageAlbum.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_scaStorageAlbum.DeletedAt = field.NewField(tableName, "deleted_at")
|
||||
|
||||
_scaStorageAlbum.fillFieldMap()
|
||||
|
||||
return _scaStorageAlbum
|
||||
}
|
||||
|
||||
type scaStorageAlbum struct {
|
||||
scaStorageAlbumDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int64 // 主键
|
||||
UserID field.String // 用户ID
|
||||
AlbumName field.String // 相册名称
|
||||
AlbumType field.String // 相册类型
|
||||
CreatedAt field.Time // 创建时间
|
||||
UpdatedAt field.Time // 更新时间
|
||||
DeletedAt field.Field // 删除时间
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (s scaStorageAlbum) Table(newTableName string) *scaStorageAlbum {
|
||||
s.scaStorageAlbumDo.UseTable(newTableName)
|
||||
return s.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (s scaStorageAlbum) As(alias string) *scaStorageAlbum {
|
||||
s.scaStorageAlbumDo.DO = *(s.scaStorageAlbumDo.As(alias).(*gen.DO))
|
||||
return s.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (s *scaStorageAlbum) updateTableName(table string) *scaStorageAlbum {
|
||||
s.ALL = field.NewAsterisk(table)
|
||||
s.ID = field.NewInt64(table, "id")
|
||||
s.UserID = field.NewString(table, "user_id")
|
||||
s.AlbumName = field.NewString(table, "album_name")
|
||||
s.AlbumType = field.NewString(table, "album_type")
|
||||
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 *scaStorageAlbum) 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 *scaStorageAlbum) fillFieldMap() {
|
||||
s.fieldMap = make(map[string]field.Expr, 7)
|
||||
s.fieldMap["id"] = s.ID
|
||||
s.fieldMap["user_id"] = s.UserID
|
||||
s.fieldMap["album_name"] = s.AlbumName
|
||||
s.fieldMap["album_type"] = s.AlbumType
|
||||
s.fieldMap["created_at"] = s.CreatedAt
|
||||
s.fieldMap["updated_at"] = s.UpdatedAt
|
||||
s.fieldMap["deleted_at"] = s.DeletedAt
|
||||
}
|
||||
|
||||
func (s scaStorageAlbum) clone(db *gorm.DB) scaStorageAlbum {
|
||||
s.scaStorageAlbumDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return s
|
||||
}
|
||||
|
||||
func (s scaStorageAlbum) replaceDB(db *gorm.DB) scaStorageAlbum {
|
||||
s.scaStorageAlbumDo.ReplaceDB(db)
|
||||
return s
|
||||
}
|
||||
|
||||
type scaStorageAlbumDo struct{ gen.DO }
|
||||
|
||||
type IScaStorageAlbumDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IScaStorageAlbumDo
|
||||
WithContext(ctx context.Context) IScaStorageAlbumDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IScaStorageAlbumDo
|
||||
WriteDB() IScaStorageAlbumDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IScaStorageAlbumDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IScaStorageAlbumDo
|
||||
Not(conds ...gen.Condition) IScaStorageAlbumDo
|
||||
Or(conds ...gen.Condition) IScaStorageAlbumDo
|
||||
Select(conds ...field.Expr) IScaStorageAlbumDo
|
||||
Where(conds ...gen.Condition) IScaStorageAlbumDo
|
||||
Order(conds ...field.Expr) IScaStorageAlbumDo
|
||||
Distinct(cols ...field.Expr) IScaStorageAlbumDo
|
||||
Omit(cols ...field.Expr) IScaStorageAlbumDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IScaStorageAlbumDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IScaStorageAlbumDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IScaStorageAlbumDo
|
||||
Group(cols ...field.Expr) IScaStorageAlbumDo
|
||||
Having(conds ...gen.Condition) IScaStorageAlbumDo
|
||||
Limit(limit int) IScaStorageAlbumDo
|
||||
Offset(offset int) IScaStorageAlbumDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IScaStorageAlbumDo
|
||||
Unscoped() IScaStorageAlbumDo
|
||||
Create(values ...*model.ScaStorageAlbum) error
|
||||
CreateInBatches(values []*model.ScaStorageAlbum, batchSize int) error
|
||||
Save(values ...*model.ScaStorageAlbum) error
|
||||
First() (*model.ScaStorageAlbum, error)
|
||||
Take() (*model.ScaStorageAlbum, error)
|
||||
Last() (*model.ScaStorageAlbum, error)
|
||||
Find() ([]*model.ScaStorageAlbum, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.ScaStorageAlbum, err error)
|
||||
FindInBatches(result *[]*model.ScaStorageAlbum, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*model.ScaStorageAlbum) (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) IScaStorageAlbumDo
|
||||
Assign(attrs ...field.AssignExpr) IScaStorageAlbumDo
|
||||
Joins(fields ...field.RelationField) IScaStorageAlbumDo
|
||||
Preload(fields ...field.RelationField) IScaStorageAlbumDo
|
||||
FirstOrInit() (*model.ScaStorageAlbum, error)
|
||||
FirstOrCreate() (*model.ScaStorageAlbum, error)
|
||||
FindByPage(offset int, limit int) (result []*model.ScaStorageAlbum, 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) IScaStorageAlbumDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Debug() IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Debug())
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) WithContext(ctx context.Context) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) ReadDB() IScaStorageAlbumDo {
|
||||
return s.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) WriteDB() IScaStorageAlbumDo {
|
||||
return s.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Session(config *gorm.Session) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Session(config))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Clauses(conds ...clause.Expression) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Returning(value interface{}, columns ...string) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Not(conds ...gen.Condition) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Or(conds ...gen.Condition) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Select(conds ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Where(conds ...gen.Condition) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Order(conds ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Distinct(cols ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Omit(cols ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Join(table schema.Tabler, on ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) LeftJoin(table schema.Tabler, on ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) RightJoin(table schema.Tabler, on ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Group(cols ...field.Expr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Having(conds ...gen.Condition) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Limit(limit int) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Offset(offset int) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Unscoped() IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Create(values ...*model.ScaStorageAlbum) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return s.DO.Create(values)
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) CreateInBatches(values []*model.ScaStorageAlbum, 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 scaStorageAlbumDo) Save(values ...*model.ScaStorageAlbum) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return s.DO.Save(values)
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) First() (*model.ScaStorageAlbum, error) {
|
||||
if result, err := s.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.ScaStorageAlbum), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Take() (*model.ScaStorageAlbum, error) {
|
||||
if result, err := s.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.ScaStorageAlbum), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Last() (*model.ScaStorageAlbum, error) {
|
||||
if result, err := s.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.ScaStorageAlbum), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Find() ([]*model.ScaStorageAlbum, error) {
|
||||
result, err := s.DO.Find()
|
||||
return result.([]*model.ScaStorageAlbum), err
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.ScaStorageAlbum, err error) {
|
||||
buf := make([]*model.ScaStorageAlbum, 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 scaStorageAlbumDo) FindInBatches(result *[]*model.ScaStorageAlbum, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return s.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Attrs(attrs ...field.AssignExpr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Assign(attrs ...field.AssignExpr) IScaStorageAlbumDo {
|
||||
return s.withDO(s.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Joins(fields ...field.RelationField) IScaStorageAlbumDo {
|
||||
for _, _f := range fields {
|
||||
s = *s.withDO(s.DO.Joins(_f))
|
||||
}
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Preload(fields ...field.RelationField) IScaStorageAlbumDo {
|
||||
for _, _f := range fields {
|
||||
s = *s.withDO(s.DO.Preload(_f))
|
||||
}
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) FirstOrInit() (*model.ScaStorageAlbum, error) {
|
||||
if result, err := s.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.ScaStorageAlbum), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) FirstOrCreate() (*model.ScaStorageAlbum, error) {
|
||||
if result, err := s.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.ScaStorageAlbum), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) FindByPage(offset int, limit int) (result []*model.ScaStorageAlbum, 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 scaStorageAlbumDo) 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 scaStorageAlbumDo) Scan(result interface{}) (err error) {
|
||||
return s.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (s scaStorageAlbumDo) Delete(models ...*model.ScaStorageAlbum) (result gen.ResultInfo, err error) {
|
||||
return s.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (s *scaStorageAlbumDo) withDO(do gen.Dao) *scaStorageAlbumDo {
|
||||
s.DO = *do.(*gen.DO)
|
||||
return s
|
||||
}
|
@@ -47,6 +47,8 @@ func newScaStorageInfo(db *gorm.DB, opts ...gen.DOOption) scaStorageInfo {
|
||||
_scaStorageInfo.Gps = field.NewString(tableName, "gps")
|
||||
_scaStorageInfo.Screenshot = field.NewString(tableName, "screenshot")
|
||||
_scaStorageInfo.Exif = field.NewString(tableName, "exif")
|
||||
_scaStorageInfo.Hide = field.NewInt64(tableName, "hide")
|
||||
_scaStorageInfo.AlbumID = field.NewInt64(tableName, "album_id")
|
||||
_scaStorageInfo.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_scaStorageInfo.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_scaStorageInfo.DeletedAt = field.NewField(tableName, "deleted_at")
|
||||
@@ -80,6 +82,8 @@ type scaStorageInfo struct {
|
||||
Gps field.String // GPS
|
||||
Screenshot field.String // 是否是截图
|
||||
Exif field.String // exif 信息
|
||||
Hide field.Int64 // 是否隐藏(0 不隐藏 1 隐藏)
|
||||
AlbumID field.Int64 // 相册ID
|
||||
CreatedAt field.Time // 创建时间
|
||||
UpdatedAt field.Time // 更新时间
|
||||
DeletedAt field.Field // 删除时间
|
||||
@@ -119,6 +123,8 @@ func (s *scaStorageInfo) updateTableName(table string) *scaStorageInfo {
|
||||
s.Gps = field.NewString(table, "gps")
|
||||
s.Screenshot = field.NewString(table, "screenshot")
|
||||
s.Exif = field.NewString(table, "exif")
|
||||
s.Hide = field.NewInt64(table, "hide")
|
||||
s.AlbumID = field.NewInt64(table, "album_id")
|
||||
s.CreatedAt = field.NewTime(table, "created_at")
|
||||
s.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
s.DeletedAt = field.NewField(table, "deleted_at")
|
||||
@@ -138,7 +144,7 @@ func (s *scaStorageInfo) GetFieldByName(fieldName string) (field.OrderExpr, bool
|
||||
}
|
||||
|
||||
func (s *scaStorageInfo) fillFieldMap() {
|
||||
s.fieldMap = make(map[string]field.Expr, 23)
|
||||
s.fieldMap = make(map[string]field.Expr, 25)
|
||||
s.fieldMap["id"] = s.ID
|
||||
s.fieldMap["user_id"] = s.UserID
|
||||
s.fieldMap["provider"] = s.Provider
|
||||
@@ -159,6 +165,8 @@ func (s *scaStorageInfo) fillFieldMap() {
|
||||
s.fieldMap["gps"] = s.Gps
|
||||
s.fieldMap["screenshot"] = s.Screenshot
|
||||
s.fieldMap["exif"] = s.Exif
|
||||
s.fieldMap["hide"] = s.Hide
|
||||
s.fieldMap["album_id"] = s.AlbumID
|
||||
s.fieldMap["created_at"] = s.CreatedAt
|
||||
s.fieldMap["updated_at"] = s.UpdatedAt
|
||||
s.fieldMap["deleted_at"] = s.DeletedAt
|
||||
|
Reference in New Issue
Block a user