🎨 update project structure

This commit is contained in:
landaiqing
2024-09-29 15:46:35 +08:00
parent 2769467ce2
commit 87f1ff6961
85 changed files with 693 additions and 431 deletions

View File

@@ -1,29 +0,0 @@
package api
import (
"schisandra-cloud-album/api/captcha_api"
"schisandra-cloud-album/api/client_api"
"schisandra-cloud-album/api/comment_api"
"schisandra-cloud-album/api/oauth_api"
"schisandra-cloud-album/api/permission_api"
"schisandra-cloud-album/api/role_api"
"schisandra-cloud-album/api/sms_api"
"schisandra-cloud-album/api/user_api"
"schisandra-cloud-album/api/websocket_api"
)
// Apis 统一导出的api
type Apis struct {
UserApi user_api.UserAPI
CaptchaApi captcha_api.CaptchaAPI
SmsApi sms_api.SmsAPI
OAuthApi oauth_api.OAuthAPI
WebsocketApi websocket_api.WebsocketAPI
RoleApi role_api.RoleAPI
PermissionApi permission_api.PermissionAPI
ClientApi client_api.ClientAPI
CommonApi comment_api.CommentAPI
}
// Api new函数实例化实例化完成后会返回结构体地指针类型
var Api = new(Apis)

View File

@@ -1,3 +0,0 @@
package captcha_api
type CaptchaAPI struct{}

View File

@@ -1,7 +0,0 @@
package client_api
import "sync"
type ClientAPI struct{}
var mu sync.Mutex

View File

@@ -1,3 +0,0 @@
package permission_api
type PermissionAPI struct{}

View File

@@ -1,3 +0,0 @@
package role_api
type RoleAPI struct{}

View File

@@ -1,3 +0,0 @@
package sms_api
type SmsAPI struct{}

View File

@@ -1,7 +0,0 @@
package user_api
import "sync"
type UserAPI struct{}
var mu sync.Mutex

View File

@@ -1,4 +0,0 @@
package websocket_api
type WebsocketAPI struct {
}

View File

@@ -19,5 +19,5 @@ const (
// 系统相关的redis key
const (
SystemApiNonceRedisKey = "system:api:nonce:"
SystemApiNonceRedisKey = "system:controller:nonce:"
)

View File

@@ -0,0 +1,3 @@
package captcha_controller
type CaptchaController struct{}

View File

@@ -1,4 +1,4 @@
package captcha_api
package captcha_controller
import (
"encoding/json"
@@ -24,8 +24,8 @@ import (
// @Description 生成旋转验证码
// @Tags 旋转验证码
// @Success 200 {string} json
// @Router /api/captcha/rotate/get [get]
func (CaptchaAPI) GenerateRotateCaptcha(c *gin.Context) {
// @Router /controller/captcha/rotate/get [get]
func (CaptchaController) GenerateRotateCaptcha(c *gin.Context) {
captchaData, err := global.RotateCaptcha.Generate()
if err != nil {
global.LOG.Fatalln(err)
@@ -69,8 +69,8 @@ func (CaptchaAPI) GenerateRotateCaptcha(c *gin.Context) {
// @Param angle query string true "验证码角度"
// @Param key query string true "验证码key"
// @Success 200 {string} json
// @Router /api/captcha/rotate/check [post]
func (CaptchaAPI) CheckRotateData(c *gin.Context) {
// @Router /controller/captcha/rotate/check [post]
func (CaptchaController) CheckRotateData(c *gin.Context) {
var rotateRequest RotateCaptchaRequest
if err := c.ShouldBindJSON(&rotateRequest); err != nil {
result.FailWithNull(c)
@@ -110,8 +110,8 @@ func (CaptchaAPI) CheckRotateData(c *gin.Context) {
// @Tags 基础文字验证码
// @Param type query string true "验证码类型"
// @Success 200 {string} json
// @Router /api/captcha/text/get [get]
func (CaptchaAPI) GenerateBasicTextCaptcha(c *gin.Context) {
// @Router /controller/captcha/text/get [get]
func (CaptchaController) GenerateBasicTextCaptcha(c *gin.Context) {
var capt click.Captcha
if c.Query("type") == "light" {
capt = global.LightTextCaptcha
@@ -157,8 +157,8 @@ func (CaptchaAPI) GenerateBasicTextCaptcha(c *gin.Context) {
// @Param captcha query string true "验证码"
// @Param key query string true "验证码key"
// @Success 200 {string} json
// @Router /api/captcha/text/check [get]
func (CaptchaAPI) CheckClickData(c *gin.Context) {
// @Router /controller/captcha/text/check [get]
func (CaptchaController) CheckClickData(c *gin.Context) {
dots := c.Query("dots")
key := c.Query("key")
if dots == "" || key == "" {
@@ -204,8 +204,8 @@ func (CaptchaAPI) CheckClickData(c *gin.Context) {
// @Description 生成点击形状验证码
// @Tags 点击形状验证码
// @Success 200 {string} json
// @Router /api/captcha/shape/get [get]
func (CaptchaAPI) GenerateClickShapeCaptcha(c *gin.Context) {
// @Router /controller/captcha/shape/get [get]
func (CaptchaController) GenerateClickShapeCaptcha(c *gin.Context) {
captData, err := global.ClickShapeCaptcha.Generate()
if err != nil {
log.Fatalln(err)
@@ -243,8 +243,8 @@ func (CaptchaAPI) GenerateClickShapeCaptcha(c *gin.Context) {
// @Description 滑块基础验证码
// @Tags 滑块基础验证码
// @Success 200 {string} json
// @Router /api/captcha/slide/generate [get]
func (CaptchaAPI) GenerateSlideBasicCaptData(c *gin.Context) {
// @Router /controller/captcha/slide/generate [get]
func (CaptchaController) GenerateSlideBasicCaptData(c *gin.Context) {
captData, err := global.SlideCaptcha.Generate()
if err != nil {
global.LOG.Fatalln(err)
@@ -287,8 +287,8 @@ func (CaptchaAPI) GenerateSlideBasicCaptData(c *gin.Context) {
// @Description 生成滑动区域形状验证码
// @Tags 生成滑动区域形状验证码
// @Success 200 {string} json
// @Router /api/captcha/shape/slide/region/get [get]
func (CaptchaAPI) GenerateSlideRegionCaptData(c *gin.Context) {
// @Router /controller/captcha/shape/slide/region/get [get]
func (CaptchaController) GenerateSlideRegionCaptData(c *gin.Context) {
captData, err := global.SlideRegionCaptcha.Generate()
if err != nil {
global.LOG.Fatalln(err)
@@ -335,8 +335,8 @@ func (CaptchaAPI) GenerateSlideRegionCaptData(c *gin.Context) {
// @Param point query string true "点击坐标"
// @Param key query string true "验证码key"
// @Success 200 {string} json
// @Router /api/captcha/shape/slide/check [get]
func (CaptchaAPI) CheckSlideData(c *gin.Context) {
// @Router /controller/captcha/shape/slide/check [get]
func (CaptchaController) CheckSlideData(c *gin.Context) {
point := c.Query("point")
key := c.Query("key")
if point == "" || key == "" {

View File

@@ -1,4 +1,4 @@
package captcha_api
package captcha_controller
type RotateCaptchaRequest struct {
Angle int `json:"angle" binding:"required"`

View File

@@ -0,0 +1,7 @@
package client_controller
import "sync"
type ClientController struct{}
var mu sync.Mutex

View File

@@ -1,4 +1,4 @@
package client_api
package client_controller
import (
"github.com/gin-gonic/gin"
@@ -16,8 +16,8 @@ import (
// @Description 生成客户端ID
// @Tags 微信公众号
// @Produce json
// @Router /api/oauth/generate_client_id [get]
func (ClientAPI) GenerateClientId(c *gin.Context) {
// @Router /controller/oauth/generate_client_id [get]
func (ClientController) GenerateClientId(c *gin.Context) {
// 获取客户端IP
ip := utils.GetClientIP(c)
// 加锁

View File

@@ -1,16 +1,16 @@
package comment_api
package comment_controller
import (
"schisandra-cloud-album/service"
"schisandra-cloud-album/service/impl"
"sync"
"time"
)
type CommentAPI struct{}
type CommentController struct{}
var wg sync.WaitGroup
var mx sync.Mutex
var commentReplyService = service.Service.CommentReplyService
var commentReplyService = impl.CommentReplyServiceImpl{}
// CommentImages 评论图片
type CommentImages struct {

View File

@@ -1,4 +1,4 @@
package comment_api
package comment_controller
import (
"context"
@@ -28,7 +28,7 @@ import (
// @Produce json
// @Param comment_request body CommentRequest true "评论请求"
// @Router /auth/comment/submit [post]
func (CommentAPI) CommentSubmit(c *gin.Context) {
func (CommentController) CommentSubmit(c *gin.Context) {
commentRequest := CommentRequest{}
if err := c.ShouldBindJSON(&commentRequest); err != nil {
return
@@ -90,7 +90,7 @@ func (CommentAPI) CommentSubmit(c *gin.Context) {
// 使用 goroutine 进行异步评论保存
errCh := make(chan error, 2)
go func() {
errCh <- commentReplyService.CreateCommentReply(&commentReply)
errCh <- commentReplyService.CreateCommentReplyService(&commentReply)
}()
// 等待评论回复的创建
@@ -149,7 +149,7 @@ func (CommentAPI) CommentSubmit(c *gin.Context) {
// @Produce json
// @Param reply_comment_request body ReplyCommentRequest true "回复评论请求"
// @Router /auth/reply/submit [post]
func (CommentAPI) ReplySubmit(c *gin.Context) {
func (CommentController) ReplySubmit(c *gin.Context) {
replyCommentRequest := ReplyCommentRequest{}
if err := c.ShouldBindJSON(&replyCommentRequest); err != nil {
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
@@ -214,11 +214,11 @@ func (CommentAPI) ReplySubmit(c *gin.Context) {
errCh := make(chan error)
go func() {
errCh <- commentReplyService.CreateCommentReply(&commentReply)
errCh <- commentReplyService.CreateCommentReplyService(&commentReply)
}()
go func() {
errCh <- commentReplyService.UpdateCommentReplyCount(replyCommentRequest.ReplyId)
errCh <- commentReplyService.UpdateCommentReplyCountService(replyCommentRequest.ReplyId)
}()
// 等待评论回复的创建
if err = <-errCh; err != nil {
@@ -276,7 +276,7 @@ func (CommentAPI) ReplySubmit(c *gin.Context) {
// @Produce json
// @Param reply_reply_request body ReplyReplyRequest true "回复回复请求"
// @Router /auth/reply/reply/submit [post]
func (CommentAPI) ReplyReplySubmit(c *gin.Context) {
func (CommentController) ReplyReplySubmit(c *gin.Context) {
replyReplyRequest := ReplyReplyRequest{}
if err := c.ShouldBindJSON(&replyReplyRequest); err != nil {
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
@@ -341,10 +341,10 @@ func (CommentAPI) ReplyReplySubmit(c *gin.Context) {
errCh := make(chan error, 2)
go func() {
errCh <- commentReplyService.CreateCommentReply(&commentReply)
errCh <- commentReplyService.CreateCommentReplyService(&commentReply)
}()
go func() {
errCh <- commentReplyService.UpdateCommentReplyCount(replyReplyRequest.ReplyId)
errCh <- commentReplyService.UpdateCommentReplyCountService(replyReplyRequest.ReplyId)
}()
if err = <-errCh; err != nil {
@@ -401,7 +401,7 @@ func (CommentAPI) ReplyReplySubmit(c *gin.Context) {
// @Produce json
// @Param comment_list_request body CommentListRequest true "评论列表请求"
// @Router /auth/comment/list [post]
func (CommentAPI) CommentList(c *gin.Context) {
func (CommentController) CommentList(c *gin.Context) {
commentListRequest := CommentListRequest{}
err := c.ShouldBindJSON(&commentListRequest)
if err != nil {
@@ -576,7 +576,7 @@ func (CommentAPI) CommentList(c *gin.Context) {
// @Produce json
// @Param reply_list_request body ReplyListRequest true "回复列表请求"
// @Router /auth/reply/list [post]
func (CommentAPI) ReplyList(c *gin.Context) {
func (CommentController) ReplyList(c *gin.Context) {
replyListRequest := ReplyListRequest{}
err := c.ShouldBindJSON(&replyListRequest)
if err != nil {
@@ -757,7 +757,7 @@ func (CommentAPI) ReplyList(c *gin.Context) {
// @Produce json
// @Param comment_like_request body CommentLikeRequest true "点赞请求"
// @Router /auth/comment/like [post]
func (CommentAPI) CommentLikes(c *gin.Context) {
func (CommentController) CommentLikes(c *gin.Context) {
likeRequest := CommentLikeRequest{}
err := c.ShouldBindJSON(&likeRequest)
if err != nil {
@@ -790,7 +790,7 @@ func (CommentAPI) CommentLikes(c *gin.Context) {
// 异步更新点赞计数
go func() {
if err = commentReplyService.UpdateCommentLikesCount(likeRequest.CommentId, likeRequest.TopicId); err != nil {
if err = commentReplyService.UpdateCommentLikesCountService(likeRequest.CommentId, likeRequest.TopicId); err != nil {
global.LOG.Errorln(err)
}
}()
@@ -814,7 +814,7 @@ func (CommentAPI) CommentLikes(c *gin.Context) {
// @Produce json
// @Param comment_like_request body CommentLikeRequest true "取消点赞请求"
// @Router /auth/comment/cancel_like [post]
func (CommentAPI) CancelCommentLikes(c *gin.Context) {
func (CommentController) CancelCommentLikes(c *gin.Context) {
cancelLikeRequest := CommentLikeRequest{}
if err := c.ShouldBindJSON(&cancelLikeRequest); err != nil {
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
@@ -843,7 +843,7 @@ func (CommentAPI) CancelCommentLikes(c *gin.Context) {
// 异步更新点赞计数
go func() {
if err := commentReplyService.DecrementCommentLikesCount(cancelLikeRequest.CommentId, cancelLikeRequest.TopicId); err != nil {
if err := commentReplyService.DecrementCommentLikesCountService(cancelLikeRequest.CommentId, cancelLikeRequest.TopicId); err != nil {
global.LOG.Errorln(err)
}
}()

View File

@@ -1,4 +1,4 @@
package comment_api
package comment_controller
import (
"encoding/base64"

View File

@@ -1,4 +1,4 @@
package comment_api
package comment_controller
type CommentRequest struct {
Content string `json:"content" binding:"required"`

29
controller/controller.go Normal file
View File

@@ -0,0 +1,29 @@
package controller
import (
"schisandra-cloud-album/controller/captcha_controller"
"schisandra-cloud-album/controller/client_controller"
"schisandra-cloud-album/controller/comment_controller"
"schisandra-cloud-album/controller/oauth_controller"
"schisandra-cloud-album/controller/permission_controller"
"schisandra-cloud-album/controller/role_controller"
"schisandra-cloud-album/controller/sms_controller"
"schisandra-cloud-album/controller/user_controller"
"schisandra-cloud-album/controller/websocket_controller"
)
// Controllers 统一导出的控制器接口
type Controllers struct {
UserController user_controller.UserController
CaptchaController captcha_controller.CaptchaController
SmsController sms_controller.SmsController
OAuthController oauth_controller.OAuthController
WebsocketController websocket_controller.WebsocketController
RoleController role_controller.RoleController
PermissionController permission_controller.PermissionController
ClientController client_controller.ClientController
CommonController comment_controller.CommentController
}
// Controller new函数实例化实例化完成后会返回结构体地指针类型
var Controller = new(Controllers)

View File

@@ -1,4 +1,4 @@
package oauth_api
package oauth_controller
import (
"encoding/json"
@@ -55,8 +55,8 @@ type GiteeUser struct {
// @Tags Gitee OAuth
// @Produce json
// @Success 200 {string} string "登录地址"
// @Router /api/oauth/gitee/get_url [get]
func (OAuthAPI) GetGiteeRedirectUrl(c *gin.Context) {
// @Router /controller/oauth/gitee/get_url [get]
func (OAuthController) GetGiteeRedirectUrl(c *gin.Context) {
clientID := global.CONFIG.OAuth.Gitee.ClientID
redirectURI := global.CONFIG.OAuth.Gitee.RedirectURI
url := "https://gitee.com/oauth/authorize?client_id=" + clientID + "&redirect_uri=" + redirectURI + "&response_type=code"
@@ -133,8 +133,8 @@ func GetGiteeUserInfo(token *Token) (map[string]interface{}, error) {
// @Description 处理Gitee回调
// @Tags Gitee OAuth
// @Produce json
// @Router /api/oauth/gitee/callback [get]
func (OAuthAPI) GiteeCallback(c *gin.Context) {
// @Router /controller/oauth/gitee/callback [get]
func (OAuthController) GiteeCallback(c *gin.Context) {
var err error
// 获取 code
var code = c.Query("code")
@@ -191,7 +191,7 @@ func (OAuthAPI) GiteeCallback(c *gin.Context) {
}
Id := strconv.Itoa(giteeUser.ID)
userSocial, err := userSocialService.QueryUserSocialByUUID(Id, enum.OAuthSourceGitee)
userSocial, err := userSocialService.QueryUserSocialByOpenIDService(Id, enum.OAuthSourceGitee)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
db := global.DB
tx := db.Begin() // 开始事务
@@ -216,7 +216,7 @@ func (OAuthAPI) GiteeCallback(c *gin.Context) {
Email: &giteeUser.Email,
Gender: &enum.Male,
}
addUser, err := userService.AddUser(user)
addUser, err := userService.AddUserService(user)
if err != nil {
tx.Rollback()
global.LOG.Error(err)
@@ -228,7 +228,7 @@ func (OAuthAPI) GiteeCallback(c *gin.Context) {
OpenID: &Id,
Source: &gitee,
}
err = userSocialService.AddUserSocial(userSocial)
err = userSocialService.AddUserSocialService(userSocial)
if err != nil {
tx.Rollback()
global.LOG.Error(err)

View File

@@ -1,4 +1,4 @@
package oauth_api
package oauth_controller
import (
"encoding/json"
@@ -58,8 +58,8 @@ type GitHubUser struct {
// @Tags Github OAuth
// @Produce json
// @Success 200 {string} string "登录url"
// @Router /api/oauth/github/get_url [get]
func (OAuthAPI) GetRedirectUrl(c *gin.Context) {
// @Router /controller/oauth/github/get_url [get]
func (OAuthController) GetRedirectUrl(c *gin.Context) {
state := c.Query("state")
clientId := global.CONFIG.OAuth.Github.ClientID
redirectUrl := global.CONFIG.OAuth.Github.RedirectURI
@@ -139,8 +139,8 @@ func GetUserInfo(token *Token) (map[string]interface{}, error) {
// @Produce json
// @Param code query string true "code"
// @Success 200 {string} string "登录成功"
// @Router /api/oauth/github/callback [get]
func (OAuthAPI) Callback(c *gin.Context) {
// @Router /controller/oauth/github/callback [get]
func (OAuthController) Callback(c *gin.Context) {
var err error
// 获取 code
var code = c.Query("code")
@@ -201,7 +201,7 @@ func (OAuthAPI) Callback(c *gin.Context) {
return
}
Id := strconv.Itoa(gitHubUser.ID)
userSocial, err := userSocialService.QueryUserSocialByUUID(Id, enum.OAuthSourceGithub)
userSocial, err := userSocialService.QueryUserSocialByOpenIDService(Id, enum.OAuthSourceGithub)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
db := global.DB
tx := db.Begin() // 开始事务
@@ -226,7 +226,7 @@ func (OAuthAPI) Callback(c *gin.Context) {
Email: &gitHubUser.Email,
Gender: &enum.Male,
}
addUser, err := userService.AddUser(user)
addUser, err := userService.AddUserService(user)
if err != nil {
tx.Rollback()
global.LOG.Error(err)
@@ -238,7 +238,7 @@ func (OAuthAPI) Callback(c *gin.Context) {
OpenID: &Id,
Source: &github,
}
err = userSocialService.AddUserSocial(userSocial)
err = userSocialService.AddUserSocialService(userSocial)
if err != nil {
tx.Rollback()
global.LOG.Error(err)

View File

@@ -1,4 +1,4 @@
package oauth_api
package oauth_controller
import (
"encoding/json"
@@ -13,7 +13,7 @@ import (
"schisandra-cloud-album/common/result"
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
"schisandra-cloud-album/service"
"schisandra-cloud-album/service/impl"
"schisandra-cloud-album/utils"
"sync"
"time"
@@ -21,11 +21,11 @@ import (
var mu sync.Mutex
type OAuthAPI struct{}
type OAuthController struct{}
var userService = service.Service.UserService
var userSocialService = service.Service.UserSocialService
var userDeviceService = service.Service.UserDeviceService
var userSocialService = impl.UserSocialServiceImpl{}
var userService = impl.UserServiceImpl{}
var userDeviceService = impl.UserDeviceServiceImpl{}
type Token struct {
AccessToken string `json:"access_token"`
@@ -131,7 +131,7 @@ func HandelUserLogin(userId string, c *gin.Context) (bool, result.Response) {
}
// GetUserLoginDevice 获取用户登录设备
func (OAuthAPI) GetUserLoginDevice(c *gin.Context) {
func (OAuthController) GetUserLoginDevice(c *gin.Context) {
userId := c.Query("user_id")
if userId == "" {
return
@@ -174,16 +174,16 @@ func (OAuthAPI) GetUserLoginDevice(c *gin.Context) {
}
mu.Lock()
defer mu.Unlock()
userDevice, err := userDeviceService.GetUserDeviceByUIDIPAgent(userId, ip, userAgent)
userDevice, err := userDeviceService.GetUserDeviceByUIDIPAgentService(userId, ip, userAgent)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
err = userDeviceService.AddUserDevice(&device)
err = userDeviceService.AddUserDeviceService(&device)
if err != nil {
global.LOG.Errorln(err)
return
}
return
} else {
err := userDeviceService.UpdateUserDevice(userDevice.ID, &device)
err := userDeviceService.UpdateUserDeviceService(userDevice.ID, &device)
if err != nil {
global.LOG.Errorln(err)
return

View File

@@ -1,4 +1,4 @@
package oauth_api
package oauth_controller
import (
"encoding/json"
@@ -55,8 +55,8 @@ type QQUserInfo struct {
// @Tags QQ OAuth
// @Produce json
// @Success 200 {string} string "登录地址"
// @Router /api/oauth/qq/get_url [get]
func (OAuthAPI) GetQQRedirectUrl(c *gin.Context) {
// @Router /controller/oauth/qq/get_url [get]
func (OAuthController) GetQQRedirectUrl(c *gin.Context) {
state := c.Query("state")
clientId := global.CONFIG.OAuth.QQ.ClientID
redirectURI := global.CONFIG.OAuth.QQ.RedirectURI
@@ -164,8 +164,8 @@ func GetQQUserUserInfo(token *QQToken, openId string) (map[string]interface{}, e
// @Description QQ登录回调
// @Tags QQ OAuth
// @Produce json
// @Router /api/oauth/qq/callback [get]
func (OAuthAPI) QQCallback(c *gin.Context) {
// @Router /controller/oauth/qq/callback [get]
func (OAuthController) QQCallback(c *gin.Context) {
var err error
// 获取 code
var code = c.Query("code")
@@ -244,7 +244,7 @@ func (OAuthAPI) QQCallback(c *gin.Context) {
return
}
userSocial, err := userSocialService.QueryUserSocialByOpenID(authQQme.OpenID, enum.OAuthSourceQQ)
userSocial, err := userSocialService.QueryUserSocialByOpenIDService(authQQme.OpenID, enum.OAuthSourceQQ)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
db := global.DB
tx := db.Begin() // 开始事务
@@ -267,7 +267,7 @@ func (OAuthAPI) QQCallback(c *gin.Context) {
Avatar: &qqUserInfo.FigureurlQq1,
Gender: &qqUserInfo.Gender,
}
addUser, err := userService.AddUser(user)
addUser, err := userService.AddUserService(user)
if err != nil {
tx.Rollback()
global.LOG.Error(err)
@@ -279,7 +279,7 @@ func (OAuthAPI) QQCallback(c *gin.Context) {
OpenID: &authQQme.OpenID,
Source: &qq,
}
err = userSocialService.AddUserSocial(userSocial)
err = userSocialService.AddUserSocialService(userSocial)
if err != nil {
tx.Rollback()
global.LOG.Error(err)

View File

@@ -1,4 +1,4 @@
package oauth_api
package oauth_controller
import "encoding/json"

View File

@@ -1,4 +1,4 @@
package oauth_api
package oauth_controller
import (
"encoding/gob"
@@ -14,12 +14,12 @@ import (
"github.com/gin-gonic/gin"
"github.com/yitter/idgenerator-go/idgen"
"gorm.io/gorm"
"schisandra-cloud-album/api/websocket_api"
"schisandra-cloud-album/common/constant"
"schisandra-cloud-album/common/enum"
"schisandra-cloud-album/common/randomname"
"schisandra-cloud-album/common/redis"
"schisandra-cloud-album/common/result"
"schisandra-cloud-album/controller/websocket_controller"
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
"schisandra-cloud-album/utils"
@@ -33,8 +33,8 @@ import (
// @Tags 微信公众号
// @Description 微信回调
// @Produce json
// @Router /api/oauth/callback_notify [POST]
func (OAuthAPI) CallbackNotify(c *gin.Context) {
// @Router /controller/oauth/callback_notify [POST]
func (OAuthController) CallbackNotify(c *gin.Context) {
rs, err := global.Wechat.Server.Notify(c.Request, func(event contract.EventInterface) interface{} {
switch event.GetMsgType() {
case models2.CALLBACK_MSG_TYPE_EVENT:
@@ -102,8 +102,8 @@ func (OAuthAPI) CallbackNotify(c *gin.Context) {
// @Tags 微信公众号
// @Description 微信回调验证
// @Produce json
// @Router /api/oauth/callback_verify [get]
func (OAuthAPI) CallbackVerify(c *gin.Context) {
// @Router /controller/oauth/callback_verify [get]
func (OAuthController) CallbackVerify(c *gin.Context) {
rs, err := global.Wechat.Server.VerifyURL(c.Request)
if err != nil {
panic(err)
@@ -117,8 +117,8 @@ func (OAuthAPI) CallbackVerify(c *gin.Context) {
// @Description 获取临时二维码
// @Produce json
// @Param client_id query string true "客户端ID"
// @Router /api/oauth/get_temp_qrcode [get]
func (OAuthAPI) GetTempQrCode(c *gin.Context) {
// @Router /controller/oauth/get_temp_qrcode [get]
func (OAuthController) GetTempQrCode(c *gin.Context) {
clientId := c.Query("client_id")
if clientId == "" {
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
@@ -169,7 +169,7 @@ func wechatLoginHandler(openId string, clientId string, c *gin.Context) bool {
if openId == "" {
return false
}
authUserSocial, err := userSocialService.QueryUserSocialByOpenID(openId, enum.OAuthSourceWechat)
authUserSocial, err := userSocialService.QueryUserSocialByOpenIDService(openId, enum.OAuthSourceWechat)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
tx := global.DB.Begin()
defer func() {
@@ -198,7 +198,7 @@ func wechatLoginHandler(openId string, clientId string, c *gin.Context) bool {
addUserChan := make(chan *model.ScaAuthUser, 1)
errChan := make(chan error, 1)
go func() {
addUser, err := userService.AddUser(createUser)
addUser, err := userService.AddUserService(createUser)
if err != nil {
errChan <- err
return
@@ -225,7 +225,7 @@ func wechatLoginHandler(openId string, clientId string, c *gin.Context) bool {
// 异步添加用户社交信息
wrongChan := make(chan error, 1)
go func() {
wrong := userSocialService.AddUserSocial(userSocial)
wrong := userSocialService.AddUserSocialService(userSocial)
wrongChan <- wrong
}()
@@ -319,7 +319,7 @@ func handelUserLogin(userId string, clientId string, c *gin.Context) bool {
return
}
// gws方式发送消息
err = websocket_api.Handler.SendMessageToClient(clientId, tokenData)
err = websocket_controller.Handler.SendMessageToClient(clientId, tokenData)
if err != nil {
global.LOG.Error(err)
resultChan <- false

View File

@@ -0,0 +1,3 @@
package permission_controller
type PermissionController struct{}

View File

@@ -1,14 +1,14 @@
package permission_api
package permission_controller
import (
ginI18n "github.com/gin-contrib/i18n"
"github.com/gin-gonic/gin"
"schisandra-cloud-album/common/result"
"schisandra-cloud-album/global"
"schisandra-cloud-album/service"
"schisandra-cloud-album/service/impl"
)
var permissionService = service.Service.PermissionService
var permissionService = impl.PermissionServiceImpl{}
// AddPermissions 批量添加权限
// @Summary 批量添加权限
@@ -17,15 +17,15 @@ var permissionService = service.Service.PermissionService
// @Accept json
// @Produce json
// @Param permissions body AddPermissionRequest true "权限列表"
// @Router /api/auth/permission/add [post]
func (PermissionAPI) AddPermissions(c *gin.Context) {
// @Router /controller/auth/permission/add [post]
func (PermissionController) AddPermissions(c *gin.Context) {
addPermissionRequest := AddPermissionRequest{}
err := c.ShouldBind(&addPermissionRequest.Permissions)
if err != nil {
global.LOG.Error(err)
return
}
err = permissionService.CreatePermissions(addPermissionRequest.Permissions)
err = permissionService.CreatePermissionsService(addPermissionRequest.Permissions)
if err != nil {
global.LOG.Error(err)
result.FailWithMessage(ginI18n.MustGetMessage(c, "CreatedFailed"), c)
@@ -42,8 +42,8 @@ func (PermissionAPI) AddPermissions(c *gin.Context) {
// @Accept json
// @Produce json
// @Param permissions body AddPermissionToRoleRequest true "权限列表"
// @Router /api/auth/permission/assign [post]
func (PermissionAPI) AssignPermissionsToRole(c *gin.Context) {
// @Router /controller/auth/permission/assign [post]
func (PermissionController) AssignPermissionsToRole(c *gin.Context) {
permissionToRoleRequest := AddPermissionToRoleRequest{}
err := c.ShouldBind(&permissionToRoleRequest)
@@ -69,7 +69,7 @@ func (PermissionAPI) AssignPermissionsToRole(c *gin.Context) {
}
// GetUserPermissions 获取用户角色权限
func (PermissionAPI) GetUserPermissions(c *gin.Context) {
func (PermissionController) GetUserPermissions(c *gin.Context) {
getPermissionRequest := GetPermissionRequest{}
err := c.ShouldBindJSON(&getPermissionRequest)
if err != nil {

View File

@@ -1,4 +1,4 @@
package permission_api
package permission_controller
import "schisandra-cloud-album/model"

View File

@@ -1,4 +1,4 @@
package role_api
package role_controller
type RoleRequest struct {
RoleName string `json:"role_name" binding:"required"`

View File

@@ -0,0 +1,3 @@
package role_controller
type RoleController struct{}

View File

@@ -1,4 +1,4 @@
package role_api
package role_controller
import (
ginI18n "github.com/gin-contrib/i18n"
@@ -6,10 +6,10 @@ import (
"schisandra-cloud-album/common/result"
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
"schisandra-cloud-album/service"
"schisandra-cloud-album/service/impl"
)
var roleService = service.Service.RoleService
var roleService = impl.RoleServiceImpl{}
// CreateRole 创建角色
// @Summary 创建角色
@@ -18,8 +18,8 @@ var roleService = service.Service.RoleService
// @Accept json
// @Produce json
// @Param roleRequestDto body RoleRequest true "角色信息"
// @Router /api/auth/role/create [post]
func (RoleAPI) CreateRole(c *gin.Context) {
// @Router /controller/auth/role/create [post]
func (RoleController) CreateRole(c *gin.Context) {
roleRequest := RoleRequest{}
err := c.ShouldBindJSON(&roleRequest)
if err != nil {
@@ -30,7 +30,7 @@ func (RoleAPI) CreateRole(c *gin.Context) {
RoleName: roleRequest.RoleName,
RoleKey: roleRequest.RoleKey,
}
err = roleService.AddRole(role)
err = roleService.AddRoleService(role)
if err != nil {
global.LOG.Error(err)
result.FailWithMessage(ginI18n.MustGetMessage(c, "CreatedFailed"), c)
@@ -46,8 +46,8 @@ func (RoleAPI) CreateRole(c *gin.Context) {
// @Accept json
// @Produce json
// @Param addRoleToUserRequestDto body AddRoleToUserRequest true "给指定用户添加角色"
// @Router /api/auth/role/add_role_to_user [post]
func (RoleAPI) AddRoleToUser(c *gin.Context) {
// @Router /controller/auth/role/add_role_to_user [post]
func (RoleController) AddRoleToUser(c *gin.Context) {
addRoleToUserRequest := AddRoleToUserRequest{}
err := c.ShouldBindJSON(&addRoleToUserRequest)
if err != nil {

View File

@@ -1,4 +1,4 @@
package sms_api
package sms_controller
type SmsRequest struct {
Phone string `json:"phone" binding:"required"`

View File

@@ -0,0 +1,3 @@
package sms_controller
type SmsController struct{}

View File

@@ -1,4 +1,4 @@
package sms_api
package sms_controller
import (
ginI18n "github.com/gin-contrib/i18n"
@@ -21,8 +21,8 @@ import (
// @Tags 短信验证码
// @Produce json
// @Param phone query string true "手机号"
// @Router /api/sms/ali/send [get]
func (SmsAPI) SendMessageByAli(c *gin.Context) {
// @Router /controller/sms/ali/send [get]
func (SmsController) SendMessageByAli(c *gin.Context) {
smsRequest := SmsRequest{}
err := c.ShouldBindJSON(&smsRequest)
if err != nil {
@@ -80,8 +80,8 @@ func (SmsAPI) SendMessageByAli(c *gin.Context) {
// @Tags 短信验证码
// @Produce json
// @Param phone query string true "手机号"
// @Router /api/sms/smsbao/send [post]
func (SmsAPI) SendMessageBySmsBao(c *gin.Context) {
// @Router /controller/sms/smsbao/send [post]
func (SmsController) SendMessageBySmsBao(c *gin.Context) {
smsRequest := SmsRequest{}
err := c.ShouldBindJSON(&smsRequest)
if err != nil {
@@ -132,8 +132,8 @@ func (SmsAPI) SendMessageBySmsBao(c *gin.Context) {
// @Tags 短信验证码
// @Produce json
// @Param phone query string true "手机号"
// @Router /api/sms/test/send [post]
func (SmsAPI) SendMessageTest(c *gin.Context) {
// @Router /controller/sms/test/send [post]
func (SmsController) SendMessageTest(c *gin.Context) {
smsRequest := SmsRequest{}
err := c.ShouldBindJSON(&smsRequest)
if err != nil {

View File

@@ -1,4 +1,4 @@
package user_api
package user_controller
import (
"encoding/gob"
@@ -66,9 +66,9 @@ func getUserLoginDevice(user model.ScaAuthUser, c *gin.Context) bool {
mu.Lock()
defer mu.Unlock()
userDevice, err := userDeviceService.GetUserDeviceByUIDIPAgent(*user.UID, ip, userAgent)
userDevice, err := userDeviceService.GetUserDeviceByUIDIPAgentService(*user.UID, ip, userAgent)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
err = userDeviceService.AddUserDevice(&device)
err = userDeviceService.AddUserDeviceService(&device)
if err != nil {
global.LOG.Errorln(err)
return false
@@ -77,7 +77,7 @@ func getUserLoginDevice(user model.ScaAuthUser, c *gin.Context) bool {
global.LOG.Errorln(err)
return false
} else {
err := userDeviceService.UpdateUserDevice(userDevice.ID, &device)
err := userDeviceService.UpdateUserDeviceService(userDevice.ID, &device)
if err != nil {
global.LOG.Errorln(err)
return false

View File

@@ -1,4 +1,4 @@
package user_api
package user_controller
import "encoding/json"

View File

@@ -0,0 +1,12 @@
package user_controller
import (
"schisandra-cloud-album/service/impl"
"sync"
)
type UserController struct{}
var mu sync.Mutex
var userService = impl.UserServiceImpl{}
var userDeviceService = impl.UserDeviceServiceImpl{}

View File

@@ -1,4 +1,4 @@
package user_api
package user_controller
import (
ginI18n "github.com/gin-contrib/i18n"
@@ -13,22 +13,18 @@ import (
"schisandra-cloud-album/common/result"
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
"schisandra-cloud-album/service"
"schisandra-cloud-album/utils"
"strconv"
"time"
)
var userService = service.Service.UserService
var userDeviceService = service.Service.UserDeviceService
// GetUserList
// @Summary 获取所有用户列表
// @Tags 用户模块
// @Success 200 {string} json
// @Router /api/auth/user/List [get]
func (UserAPI) GetUserList(c *gin.Context) {
userList := userService.GetUserList()
// @Router /controller/auth/user/List [get]
func (UserController) GetUserList(c *gin.Context) {
userList := userService.GetUserListService()
result.OkWithData(userList, c)
}
@@ -37,10 +33,10 @@ func (UserAPI) GetUserList(c *gin.Context) {
// @Tags 用户模块
// @Param username query string true "用户名"
// @Success 200 {string} json
// @Router /api/auth/user/query_by_username [get]
func (UserAPI) QueryUserByUsername(c *gin.Context) {
// @Router /controller/auth/user/query_by_username [get]
func (UserController) QueryUserByUsername(c *gin.Context) {
username := c.Query("username")
user := userService.QueryUserByUsername(username)
user := userService.QueryUserByUsernameService(username)
if reflect.DeepEqual(user, model.ScaAuthUser{}) {
result.FailWithMessage(ginI18n.MustGetMessage(c, "NotFoundUser"), c)
return
@@ -51,17 +47,13 @@ func (UserAPI) QueryUserByUsername(c *gin.Context) {
// QueryUserByUuid
// @Summary 根据uuid查询用户
// @Tags 用户模块
// @Param uuid query string true "用户uuid"
// @Param uid query string true "用户uid"
// @Success 200 {string} json
// @Router /api/auth/user/query_by_uuid [get]
func (UserAPI) QueryUserByUuid(c *gin.Context) {
uuid := c.Query("uuid")
user, err := userService.QueryUserByUuid(&uuid)
if err != nil {
result.FailWithMessage(ginI18n.MustGetMessage(c, "NotFoundUser"), c)
return
}
if reflect.DeepEqual(user, model.ScaAuthUser{}) {
// @Router /controller/auth/user/query_by_uid [get]
func (UserController) QueryUserByUuid(c *gin.Context) {
uid := c.Query("uid")
user := userService.QueryUserByUuidService(&uid)
if user.ID == 0 {
result.FailWithMessage(ginI18n.MustGetMessage(c, "NotFoundUser"), c)
return
}
@@ -71,12 +63,12 @@ func (UserAPI) QueryUserByUuid(c *gin.Context) {
// DeleteUser 删除用户
// @Summary 删除用户
// @Tags 用户模块
// @Param uuid query string true "用户uuid"
// @Param uid query string true "用户uid"
// @Success 200 {string} json
// @Router /api/auth/user/delete [delete]
func (UserAPI) DeleteUser(c *gin.Context) {
uuid := c.Query("uuid")
err := userService.DeleteUser(uuid)
// @Router /controller/auth/user/delete [delete]
func (UserController) DeleteUser(c *gin.Context) {
uid := c.Query("uid")
err := userService.DeleteUserService(uid)
if err != nil {
result.FailWithMessage(ginI18n.MustGetMessage(c, "DeletedFailed"), c)
return
@@ -89,11 +81,11 @@ func (UserAPI) DeleteUser(c *gin.Context) {
// @Tags 用户模块
// @Param phone query string true "手机号"
// @Success 200 {string} json
// @Router /api/auth/user/query_by_phone [get]
func (UserAPI) QueryUserByPhone(c *gin.Context) {
// @Router /controller/auth/user/query_by_phone [get]
func (UserController) QueryUserByPhone(c *gin.Context) {
phone := c.Query("phone")
user := userService.QueryUserByPhone(phone)
if reflect.DeepEqual(user, model.ScaAuthUser{}) {
user := userService.QueryUserByPhoneService(phone)
if user.ID == 0 {
result.FailWithMessage(ginI18n.MustGetMessage(c, "NotFoundUser"), c)
return
}
@@ -105,8 +97,8 @@ func (UserAPI) QueryUserByPhone(c *gin.Context) {
// @Tags 用户模块
// @Param user body AccountLoginRequest true "用户信息"
// @Success 200 {string} json
// @Router /api/user/login [post]
func (UserAPI) AccountLogin(c *gin.Context) {
// @Router /controller/user/login [post]
func (UserController) AccountLogin(c *gin.Context) {
accountLoginRequest := AccountLoginRequest{}
err := c.ShouldBindJSON(&accountLoginRequest)
if err != nil {
@@ -123,17 +115,17 @@ func (UserAPI) AccountLogin(c *gin.Context) {
var user model.ScaAuthUser
if utils.IsPhone(account) {
user = userService.QueryUserByPhone(account)
user = userService.QueryUserByPhoneService(account)
} else if utils.IsEmail(account) {
user = userService.QueryUserByEmail(account)
user = userService.QueryUserByEmailService(account)
} else if utils.IsUsername(account) {
user = userService.QueryUserByUsername(account)
user = userService.QueryUserByUsernameService(account)
} else {
result.FailWithMessage(ginI18n.MustGetMessage(c, "AccountErrorFormat"), c)
return
}
if reflect.DeepEqual(user, model.ScaAuthUser{}) {
if user.ID == 0 {
result.FailWithMessage(ginI18n.MustGetMessage(c, "NotFoundUser"), c)
return
}
@@ -150,8 +142,8 @@ func (UserAPI) AccountLogin(c *gin.Context) {
// @Tags 用户模块
// @Param user body PhoneLoginRequest true "用户信息"
// @Success 200 {string} json
// @Router /api/user/phone_login [post]
func (UserAPI) PhoneLogin(c *gin.Context) {
// @Router /controller/user/phone_login [post]
func (UserController) PhoneLogin(c *gin.Context) {
request := PhoneLoginRequest{}
err := c.ShouldBind(&request)
if err != nil {
@@ -168,14 +160,14 @@ func (UserAPI) PhoneLogin(c *gin.Context) {
userChan := make(chan model.ScaAuthUser)
go func() {
user := userService.QueryUserByPhone(phone)
user := userService.QueryUserByPhoneService(phone)
userChan <- user
}()
user := <-userChan
close(userChan)
if reflect.DeepEqual(user, model.ScaAuthUser{}) {
if user.ID == 0 {
// 未注册
codeChan := make(chan *string)
go func() {
@@ -211,7 +203,7 @@ func (UserAPI) PhoneLogin(c *gin.Context) {
errChan := make(chan error)
go func() {
err := global.DB.Transaction(func(tx *gorm.DB) error {
addUser, err := userService.AddUser(createUser)
addUser, err := userService.AddUserService(createUser)
if err != nil {
return err
}
@@ -259,8 +251,8 @@ func (UserAPI) PhoneLogin(c *gin.Context) {
// @Tags 用户模块
// @Param refresh_token query string true "刷新token"
// @Success 200 {string} json
// @Router /api/token/refresh [post]
func (UserAPI) RefreshHandler(c *gin.Context) {
// @Router /controller/token/refresh [post]
func (UserController) RefreshHandler(c *gin.Context) {
request := RefreshTokenRequest{}
if err := c.ShouldBindJSON(&request); err != nil {
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
@@ -302,8 +294,8 @@ func (UserAPI) RefreshHandler(c *gin.Context) {
// @Tags 用户模块
// @Param user body ResetPasswordRequest true "用户信息"
// @Success 200 {string} json
// @Router /api/user/reset_password [post]
func (UserAPI) ResetPassword(c *gin.Context) {
// @Router /controller/user/reset_password [post]
func (UserController) ResetPassword(c *gin.Context) {
var resetPasswordRequest ResetPasswordRequest
if err := c.ShouldBindJSON(&resetPasswordRequest); err != nil {
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
@@ -360,7 +352,7 @@ func (UserAPI) ResetPassword(c *gin.Context) {
return
}
user := userService.QueryUserByPhone(phone)
user := userService.QueryUserByPhoneService(phone)
if reflect.DeepEqual(user, model.ScaAuthUser{}) {
result.FailWithMessage(ginI18n.MustGetMessage(c, "PhoneNotRegister"), c)
return
@@ -372,7 +364,7 @@ func (UserAPI) ResetPassword(c *gin.Context) {
return
}
if err := userService.UpdateUser(phone, encrypt); err != nil {
if err := userService.UpdateUserService(phone, encrypt); err != nil {
tx.Rollback()
result.FailWithMessage(ginI18n.MustGetMessage(c, "ResetPasswordError"), c)
return
@@ -386,8 +378,8 @@ func (UserAPI) ResetPassword(c *gin.Context) {
// @Summary 退出登录
// @Tags 用户模块
// @Success 200 {string} json
// @Router /api/auth/user/logout [post]
func (UserAPI) Logout(c *gin.Context) {
// @Router /controller/auth/user/logout [post]
func (UserController) Logout(c *gin.Context) {
userId := c.Query("user_id")
if userId == "" {
global.LOG.Errorln("userId is empty")

View File

@@ -1,4 +1,4 @@
package websocket_api
package websocket_controller
import (
"context"
@@ -28,8 +28,8 @@ var Handler = NewWebSocket()
// @Summary 创建websocket服务
// @Description 创建websocket服务
// @Tags websocket
// @Router /api/ws/gws [get]
func (WebsocketAPI) NewGWSServer(c *gin.Context) {
// @Router /controller/ws/gws [get]
func (WebsocketController) NewGWSServer(c *gin.Context) {
upgrader := gws.NewUpgrader(Handler, &gws.ServerOption{
HandshakeTimeout: 5 * time.Second, // 握手超时时间

View File

@@ -0,0 +1,4 @@
package websocket_controller
type WebsocketController struct {
}

18
dao/comment_reply_dao.go Normal file
View File

@@ -0,0 +1,18 @@
package dao
import "schisandra-cloud-album/model"
type CommentReplyDao interface {
// CreateCommentReply 创建评论回复
CreateCommentReply(comment *model.ScaCommentReply) error
// GetCommentListOrderByCreatedTimeDesc 获取评论列表 按创建时间排序
GetCommentListOrderByCreatedTimeDesc(topicID uint, page, pageSize int) ([]model.ScaCommentReply, error)
// GetCommentListOrderByLikesDesc 获取评论列表按点赞数排序
GetCommentListOrderByLikesDesc(topicID uint, page, pageSize int) ([]model.ScaCommentReply, error)
// UpdateCommentReplyCount 更新评论回复数
UpdateCommentReplyCount(commentID int64) error
// UpdateCommentLikesCount 更新评论点赞数
UpdateCommentLikesCount(commentID int64, topicID string) error
// DecrementCommentLikesCount 减少评论点赞数
DecrementCommentLikesCount(commentID int64, topicID string) error
}

View File

@@ -1,4 +1,4 @@
package comment_reply_service
package impl
import (
"fmt"
@@ -7,8 +7,10 @@ import (
"schisandra-cloud-album/model"
)
type CommentReplyDaoImpl struct{}
// CreateCommentReply 创建评论
func (CommentReplyService) CreateCommentReply(comment *model.ScaCommentReply) error {
func (CommentReplyDaoImpl) CreateCommentReply(comment *model.ScaCommentReply) error {
if err := global.DB.Create(&comment).Error; err != nil {
return err
}
@@ -16,7 +18,7 @@ func (CommentReplyService) CreateCommentReply(comment *model.ScaCommentReply) er
}
// GetCommentListOrderByCreatedTimeDesc 通过topic_id获取评论列表
func (CommentReplyService) GetCommentListOrderByCreatedTimeDesc(topicID uint, page, pageSize int) ([]model.ScaCommentReply, error) {
func (CommentReplyDaoImpl) GetCommentListOrderByCreatedTimeDesc(topicID uint, page, pageSize int) ([]model.ScaCommentReply, error) {
var comments []model.ScaCommentReply
// 计算偏移量
offset := (page - 1) * pageSize
@@ -29,7 +31,7 @@ func (CommentReplyService) GetCommentListOrderByCreatedTimeDesc(topicID uint, pa
}
// GetCommentListOrderByLikesDesc 通过topic_id获取评论列表
func (CommentReplyService) GetCommentListOrderByLikesDesc(topicID uint, page, pageSize int) ([]model.ScaCommentReply, error) {
func (CommentReplyDaoImpl) GetCommentListOrderByLikesDesc(topicID uint, page, pageSize int) ([]model.ScaCommentReply, error) {
var comments []model.ScaCommentReply
// 计算偏移量
offset := (page - 1) * pageSize
@@ -42,7 +44,7 @@ func (CommentReplyService) GetCommentListOrderByLikesDesc(topicID uint, page, pa
}
// UpdateCommentReplyCount 更新评论
func (CommentReplyService) UpdateCommentReplyCount(commentID int64) error {
func (CommentReplyDaoImpl) UpdateCommentReplyCount(commentID int64) error {
// 使用事务处理错误
err := global.DB.Transaction(func(tx *gorm.DB) error {
result := tx.Model(&model.ScaCommentReply{}).Where("id = ? and deleted = 0", commentID).Update("reply_count", gorm.Expr("reply_count + ?", 1))
@@ -58,7 +60,7 @@ func (CommentReplyService) UpdateCommentReplyCount(commentID int64) error {
}
// UpdateCommentLikesCount 更新评论 likes 数量
func (CommentReplyService) UpdateCommentLikesCount(commentID int64, topicID string) error {
func (CommentReplyDaoImpl) UpdateCommentLikesCount(commentID int64, topicID string) error {
// 使用事务处理错误
err := global.DB.Transaction(func(tx *gorm.DB) error {
result := tx.Model(&model.ScaCommentReply{}).Where("id = ? and topic_id = ? and deleted = 0", commentID, topicID).Update("likes", gorm.Expr("likes + ?", 1))
@@ -74,7 +76,7 @@ func (CommentReplyService) UpdateCommentLikesCount(commentID int64, topicID stri
}
// DecrementCommentLikesCount 减少评论 likes 数量
func (CommentReplyService) DecrementCommentLikesCount(commentID int64, topicID string) error {
func (CommentReplyDaoImpl) DecrementCommentLikesCount(commentID int64, topicID string) error {
// 使用事务处理错误
err := global.DB.Transaction(func(tx *gorm.DB) error {
result := tx.Model(&model.ScaCommentReply{}).Where("id = ? and topic_id = ? and deleted = 0", commentID, topicID).Update("likes", gorm.Expr("likes - ?", 1))

View File

@@ -1,12 +1,14 @@
package permission_service
package impl
import (
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
)
type PermissionDaoImpl struct{}
// GetPermissionsByIds 通过权限ID列表获取权限列表
func (PermissionService) GetPermissionsByIds(ids []int64) ([]model.ScaAuthPermission, error) {
func (PermissionDaoImpl) GetPermissionsByIds(ids []int64) ([]model.ScaAuthPermission, error) {
var permissions []model.ScaAuthPermission
if err := global.DB.Where("id IN ? and deleted = 0", ids).Find(&permissions).Error; err != nil {
return nil, err
@@ -15,7 +17,7 @@ func (PermissionService) GetPermissionsByIds(ids []int64) ([]model.ScaAuthPermis
}
// CreatePermissions 批量创建权限
func (PermissionService) CreatePermissions(permissions []model.ScaAuthPermission) error {
func (PermissionDaoImpl) CreatePermissions(permissions []model.ScaAuthPermission) error {
if err := global.DB.Model(&model.ScaAuthPermission{}).CreateInBatches(&permissions, len(permissions)).Error; err != nil {
return err
}

View File

@@ -1,12 +1,14 @@
package role_service
package impl
import (
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
)
type RoleDaoImpl struct{}
// GetRoleListByIds : 通过Id列表获取角色信息列表
func (RoleService) GetRoleListByIds(id []*int64) ([]model.ScaAuthRole, error) {
func (RoleDaoImpl) GetRoleListByIds(id []*int64) ([]model.ScaAuthRole, error) {
var roles []model.ScaAuthRole
if err := global.DB.Where("id IN ?", id).Find(&roles).Error; err != nil {
return nil, err
@@ -15,7 +17,7 @@ func (RoleService) GetRoleListByIds(id []*int64) ([]model.ScaAuthRole, error) {
}
// AddRole 新增角色
func (RoleService) AddRole(role model.ScaAuthRole) error {
func (RoleDaoImpl) AddRole(role model.ScaAuthRole) error {
if err := global.DB.Create(&role).Error; err != nil {
return err
}

View File

@@ -1,4 +1,4 @@
package user_service
package impl
import (
"schisandra-cloud-album/common/enum"
@@ -6,15 +6,18 @@ import (
"schisandra-cloud-album/model"
)
type UserDaoImpl struct {
}
// GetUserList 获取所有用户列表
func (UserService) GetUserList() []*model.ScaAuthUser {
func (UserDaoImpl) GetUserList() []*model.ScaAuthUser {
data := make([]*model.ScaAuthUser, 0)
global.DB.Where("deleted = 0 ").Find(&data)
return data
}
// QueryUserByUsername 根据用户名查询用户
func (UserService) QueryUserByUsername(username string) model.ScaAuthUser {
func (UserDaoImpl) QueryUserByUsername(username string) model.ScaAuthUser {
authUser := model.ScaAuthUser{}
err := global.DB.Where("username = ? and deleted = 0", username).First(&authUser).Error
if err != nil {
@@ -24,7 +27,7 @@ func (UserService) QueryUserByUsername(username string) model.ScaAuthUser {
}
// QueryUserByUuid 根据用户uuid查询用户
func (UserService) QueryUserByUuid(uuid *string) (model.ScaAuthUser, error) {
func (UserDaoImpl) QueryUserByUuid(uuid *string) (model.ScaAuthUser, error) {
authUser := model.ScaAuthUser{}
if err := global.DB.Where("uid = ? and deleted = 0", uuid).First(&authUser).Error; err != nil {
return model.ScaAuthUser{}, err
@@ -33,7 +36,7 @@ func (UserService) QueryUserByUuid(uuid *string) (model.ScaAuthUser, error) {
}
// QueryUserById 根据用户id查询用户
func (UserService) QueryUserById(id *int64) (model.ScaAuthUser, error) {
func (UserDaoImpl) QueryUserById(id *int64) (model.ScaAuthUser, error) {
authUser := model.ScaAuthUser{}
if err := global.DB.Where("id = ? and deleted = 0", id).First(&authUser).Error; err != nil {
return model.ScaAuthUser{}, err
@@ -42,7 +45,7 @@ func (UserService) QueryUserById(id *int64) (model.ScaAuthUser, error) {
}
// AddUser 添加用户
func (UserService) AddUser(user model.ScaAuthUser) (*model.ScaAuthUser, error) {
func (UserDaoImpl) AddUser(user model.ScaAuthUser) (*model.ScaAuthUser, error) {
if err := global.DB.Create(&user).Error; err != nil {
return &model.ScaAuthUser{}, err
}
@@ -55,25 +58,25 @@ func (UserService) AddUser(user model.ScaAuthUser) (*model.ScaAuthUser, error) {
}
// UpdateUser 更新用户
func (UserService) UpdateUser(phone string, password string) error {
func (UserDaoImpl) UpdateUser(phone string, password string) error {
return global.DB.Model(&model.ScaAuthUser{}).Where("phone = ? and deleted = 0", phone).Updates(&model.ScaAuthUser{Password: &password}).Error
}
// DeleteUser 删除用户
func (UserService) DeleteUser(uuid string) error {
func (UserDaoImpl) DeleteUser(uuid string) error {
authUser := model.ScaAuthUser{}
return global.DB.Model(&authUser).Where("uid = ?", uuid).Updates(&model.ScaAuthUser{Deleted: &enum.DELETED}).Error
}
// QueryUserByPhone 根据手机号查询用户
func (UserService) QueryUserByPhone(phone string) model.ScaAuthUser {
func (UserDaoImpl) QueryUserByPhone(phone string) model.ScaAuthUser {
authUser := model.ScaAuthUser{}
global.DB.Where("phone = ? and deleted = 0", phone).First(&authUser)
return authUser
}
// QueryUserByEmail 根据邮箱查询用户
func (UserService) QueryUserByEmail(email string) model.ScaAuthUser {
func (UserDaoImpl) QueryUserByEmail(email string) model.ScaAuthUser {
authUser := model.ScaAuthUser{}
global.DB.Where("email = ? and deleted = 0", email).First(&authUser)
return authUser

View File

@@ -1,12 +1,14 @@
package user_device_service
package impl
import (
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
)
type UserDeviceImpl struct{}
// AddUserDevice 新增用户设备信息
func (UserDeviceService) AddUserDevice(userDevice *model.ScaAuthUserDevice) error {
func (UserDeviceImpl) AddUserDevice(userDevice *model.ScaAuthUserDevice) error {
if err := global.DB.Create(&userDevice).Error; err != nil {
return err
}
@@ -14,7 +16,7 @@ func (UserDeviceService) AddUserDevice(userDevice *model.ScaAuthUserDevice) erro
}
// GetUserDeviceByUIDIPAgent 根据uid / IP / agent 查询用户设备信息
func (UserDeviceService) GetUserDeviceByUIDIPAgent(uid, ip, agent string) (*model.ScaAuthUserDevice, error) {
func (UserDeviceImpl) GetUserDeviceByUIDIPAgent(uid, ip, agent string) (*model.ScaAuthUserDevice, error) {
var userDevice model.ScaAuthUserDevice
if err := global.DB.Where("user_id =? AND ip =? AND agent =? AND deleted = 0 ", uid, ip, agent).First(&userDevice).Error; err != nil {
return nil, err
@@ -23,7 +25,7 @@ func (UserDeviceService) GetUserDeviceByUIDIPAgent(uid, ip, agent string) (*mode
}
// UpdateUserDevice 更新用户设备信息
func (UserDeviceService) UpdateUserDevice(id int64, userDevice *model.ScaAuthUserDevice) error {
func (UserDeviceImpl) UpdateUserDevice(id int64, userDevice *model.ScaAuthUserDevice) error {
result := global.DB.Model(&userDevice).Where("id =? AND deleted = 0 ", id).Updates(model.ScaAuthUserDevice{
IP: userDevice.IP,
Location: userDevice.Location,

View File

@@ -0,0 +1,32 @@
package impl
import (
"errors"
"gorm.io/gorm"
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
)
type UserSocialImpl struct{}
// AddUserSocial 添加社会化登录用户信息
func (UserSocialImpl) AddUserSocial(user model.ScaAuthUserSocial) error {
result := global.DB.Create(&user)
if result.Error != nil {
return result.Error
}
return nil
}
// QueryUserSocialByOpenID 根据openID和source查询用户信息
func (UserSocialImpl) QueryUserSocialByOpenID(openID string, source string) (model.ScaAuthUserSocial, error) {
var user model.ScaAuthUserSocial
result := global.DB.Where("open_id = ? and source = ? and deleted = 0", openID, source).First(&user)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return model.ScaAuthUserSocial{}, result.Error
}
return model.ScaAuthUserSocial{}, result.Error
}
return user, nil
}

10
dao/permission_dao.go Normal file
View File

@@ -0,0 +1,10 @@
package dao
import "schisandra-cloud-album/model"
type PermissionDao interface {
// GetPermissionsByIds 返回权限列表 根据权限ID列表
GetPermissionsByIds(ids []int64) ([]model.ScaAuthPermission, error)
// CreatePermissions 创建权限
CreatePermissions(permissions []model.ScaAuthPermission) error
}

10
dao/role_dao.go Normal file
View File

@@ -0,0 +1,10 @@
package dao
import "schisandra-cloud-album/model"
type RoleDAO interface {
// GetRoleListByIds 获取角色列表 by id
GetRoleListByIds(id []*int64) ([]model.ScaAuthRole, error)
// AddRole 新增角色
AddRole(role model.ScaAuthRole) error
}

24
dao/user_dao.go Normal file
View File

@@ -0,0 +1,24 @@
package dao
import "schisandra-cloud-album/model"
type UserDao interface {
// GetUserList 获取用户列表
GetUserList() []*model.ScaAuthUser
// QueryUserByUsername 根据用户名查询用户
QueryUserByUsername(username string) model.ScaAuthUser
// QueryUserByUuid 根据uuid查询用户
QueryUserByUuid(uuid *string) (model.ScaAuthUser, error)
// QueryUserById 根据id查询用户
QueryUserById(id *int64) (model.ScaAuthUser, error)
// AddUser 新增用户
AddUser(user model.ScaAuthUser) (*model.ScaAuthUser, error)
// UpdateUser 更新用户
UpdateUser(phone string, password string) error
// DeleteUser 删除用户
DeleteUser(uuid string) error
// QueryUserByPhone 根据手机号查询用户
QueryUserByPhone(phone string) model.ScaAuthUser
// QueryUserByEmail 根据邮箱查询用户
QueryUserByEmail(email string) model.ScaAuthUser
}

12
dao/user_device_dao.go Normal file
View File

@@ -0,0 +1,12 @@
package dao
import "schisandra-cloud-album/model"
type UserDeviceDao interface {
// AddUserDevice 添加用户设备信息
AddUserDevice(userDevice *model.ScaAuthUserDevice) error
// GetUserDeviceByUIDIPAgent 根据用户ID、IP、Agent获取用户设备信息
GetUserDeviceByUIDIPAgent(uid, ip, agent string) (*model.ScaAuthUserDevice, error)
// UpdateUserDevice 更新用户设备信息
UpdateUserDevice(id int64, userDevice *model.ScaAuthUserDevice) error
}

10
dao/user_social_dao.go Normal file
View File

@@ -0,0 +1,10 @@
package dao
import "schisandra-cloud-album/model"
type UserSocialDao interface {
// AddUserSocial 添加用户第三方登录信息
AddUserSocial(user model.ScaAuthUserSocial) error
// QueryUserSocialByOpenID 根据第三方登录的 openID 查询用户信息
QueryUserSocialByOpenID(openID string, source string) (model.ScaAuthUserSocial, error)
}

View File

@@ -15,7 +15,7 @@ const docTemplate = `{
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/api/auth/permission/add": {
"/controller/auth/permission/add": {
"post": {
"description": "批量添加权限",
"consumes": [
@@ -35,14 +35,14 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/permission_api.AddPermissionRequest"
"$ref": "#/definitions/permission_controller.AddPermissionRequest"
}
}
],
"responses": {}
}
},
"/api/auth/permission/assign": {
"/controller/auth/permission/assign": {
"post": {
"description": "给指定角色分配权限",
"consumes": [
@@ -62,14 +62,14 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/permission_api.AddPermissionToRoleRequest"
"$ref": "#/definitions/permission_controller.AddPermissionToRoleRequest"
}
}
],
"responses": {}
}
},
"/api/auth/role/add_role_to_user": {
"/controller/auth/role/add_role_to_user": {
"post": {
"description": "给指定用户添加角色",
"consumes": [
@@ -89,14 +89,14 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/role_api.AddRoleToUserRequest"
"$ref": "#/definitions/role_controller.AddRoleToUserRequest"
}
}
],
"responses": {}
}
},
"/api/auth/role/create": {
"/controller/auth/role/create": {
"post": {
"description": "创建角色",
"consumes": [
@@ -116,14 +116,14 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/role_api.RoleRequest"
"$ref": "#/definitions/role_controller.RoleRequest"
}
}
],
"responses": {}
}
},
"/api/auth/user/List": {
"/controller/auth/user/List": {
"get": {
"tags": [
"用户模块"
@@ -139,7 +139,7 @@ const docTemplate = `{
}
}
},
"/api/auth/user/delete": {
"/controller/auth/user/delete": {
"delete": {
"tags": [
"用户模块"
@@ -164,7 +164,7 @@ const docTemplate = `{
}
}
},
"/api/auth/user/logout": {
"/controller/auth/user/logout": {
"post": {
"tags": [
"用户模块"
@@ -180,7 +180,7 @@ const docTemplate = `{
}
}
},
"/api/auth/user/query_by_phone": {
"/controller/auth/user/query_by_phone": {
"get": {
"tags": [
"用户模块"
@@ -205,7 +205,7 @@ const docTemplate = `{
}
}
},
"/api/auth/user/query_by_username": {
"/controller/auth/user/query_by_username": {
"get": {
"tags": [
"用户模块"
@@ -230,7 +230,7 @@ const docTemplate = `{
}
}
},
"/api/auth/user/query_by_uuid": {
"/controller/auth/user/query_by_uuid": {
"get": {
"tags": [
"用户模块"
@@ -255,7 +255,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/rotate/check": {
"/controller/captcha/rotate/check": {
"post": {
"description": "验证旋转验证码",
"tags": [
@@ -288,7 +288,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/rotate/get": {
"/controller/captcha/rotate/get": {
"get": {
"description": "生成旋转验证码",
"tags": [
@@ -305,7 +305,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/shape/get": {
"/controller/captcha/shape/get": {
"get": {
"description": "生成点击形状验证码",
"tags": [
@@ -322,7 +322,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/shape/slide/check": {
"/controller/captcha/shape/slide/check": {
"get": {
"description": "验证滑动验证码",
"tags": [
@@ -355,7 +355,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/shape/slide/region/get": {
"/controller/captcha/shape/slide/region/get": {
"get": {
"description": "生成滑动区域形状验证码",
"tags": [
@@ -372,7 +372,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/slide/generate": {
"/controller/captcha/slide/generate": {
"get": {
"description": "滑块基础验证码",
"tags": [
@@ -389,7 +389,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/text/check": {
"/controller/captcha/text/check": {
"get": {
"description": "验证基础文字验证码",
"tags": [
@@ -422,7 +422,7 @@ const docTemplate = `{
}
}
},
"/api/captcha/text/get": {
"/controller/captcha/text/get": {
"get": {
"description": "生成基础文字验证码",
"tags": [
@@ -448,7 +448,7 @@ const docTemplate = `{
}
}
},
"/api/oauth/callback_notify": {
"/controller/oauth/callback_notify": {
"post": {
"description": "微信回调",
"produces": [
@@ -461,7 +461,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/oauth/callback_verify": {
"/controller/oauth/callback_verify": {
"get": {
"description": "微信回调验证",
"produces": [
@@ -474,7 +474,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/oauth/generate_client_id": {
"/controller/oauth/generate_client_id": {
"get": {
"description": "生成客户端ID",
"produces": [
@@ -487,7 +487,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/oauth/get_temp_qrcode": {
"/controller/oauth/get_temp_qrcode": {
"get": {
"description": "获取临时二维码",
"produces": [
@@ -509,7 +509,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/oauth/gitee/callback": {
"/controller/oauth/gitee/callback": {
"get": {
"description": "处理Gitee回调",
"produces": [
@@ -522,7 +522,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/oauth/gitee/get_url": {
"/controller/oauth/gitee/get_url": {
"get": {
"description": "获取Gitee登录地址",
"produces": [
@@ -542,7 +542,7 @@ const docTemplate = `{
}
}
},
"/api/oauth/github/callback": {
"/controller/oauth/github/callback": {
"get": {
"description": "登录回调函数",
"produces": [
@@ -571,7 +571,7 @@ const docTemplate = `{
}
}
},
"/api/oauth/github/get_url": {
"/controller/oauth/github/get_url": {
"get": {
"description": "获取github登录url",
"produces": [
@@ -591,7 +591,7 @@ const docTemplate = `{
}
}
},
"/api/oauth/qq/callback": {
"/controller/oauth/qq/callback": {
"get": {
"description": "QQ登录回调",
"produces": [
@@ -604,7 +604,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/oauth/qq/get_url": {
"/controller/oauth/qq/get_url": {
"get": {
"description": "获取QQ登录地址",
"produces": [
@@ -624,7 +624,7 @@ const docTemplate = `{
}
}
},
"/api/sms/ali/send": {
"/controller/sms/ali/send": {
"get": {
"description": "发送短信验证码",
"produces": [
@@ -646,7 +646,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/sms/smsbao/send": {
"/controller/sms/smsbao/send": {
"post": {
"description": "短信宝发送短信验证码",
"produces": [
@@ -668,7 +668,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/sms/test/send": {
"/controller/sms/test/send": {
"post": {
"description": "发送测试短信验证码",
"produces": [
@@ -690,7 +690,7 @@ const docTemplate = `{
"responses": {}
}
},
"/api/token/refresh": {
"/controller/token/refresh": {
"post": {
"tags": [
"用户模块"
@@ -715,7 +715,7 @@ const docTemplate = `{
}
}
},
"/api/user/login": {
"/controller/user/login": {
"post": {
"tags": [
"用户模块"
@@ -728,7 +728,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/user_api.AccountLoginRequest"
"$ref": "#/definitions/user_controller.AccountLoginRequest"
}
}
],
@@ -742,7 +742,7 @@ const docTemplate = `{
}
}
},
"/api/user/phone_login": {
"/controller/user/phone_login": {
"post": {
"tags": [
"用户模块"
@@ -755,7 +755,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/user_api.PhoneLoginRequest"
"$ref": "#/definitions/user_controller.PhoneLoginRequest"
}
}
],
@@ -769,7 +769,7 @@ const docTemplate = `{
}
}
},
"/api/user/reset_password": {
"/controller/user/reset_password": {
"post": {
"tags": [
"用户模块"
@@ -782,7 +782,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/user_api.ResetPasswordRequest"
"$ref": "#/definitions/user_controller.ResetPasswordRequest"
}
}
],
@@ -796,7 +796,7 @@ const docTemplate = `{
}
}
},
"/api/ws/gws": {
"/controller/ws/gws": {
"get": {
"description": "创建websocket服务",
"tags": [
@@ -826,7 +826,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/comment_api.CommentLikeRequest"
"$ref": "#/definitions/comment_controller.CommentLikeRequest"
}
}
],
@@ -853,7 +853,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/comment_api.CommentLikeRequest"
"$ref": "#/definitions/comment_controller.CommentLikeRequest"
}
}
],
@@ -880,7 +880,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/comment_api.CommentListRequest"
"$ref": "#/definitions/comment_controller.CommentListRequest"
}
}
],
@@ -907,7 +907,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/comment_api.CommentRequest"
"$ref": "#/definitions/comment_controller.CommentRequest"
}
}
],
@@ -934,7 +934,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/comment_api.ReplyListRequest"
"$ref": "#/definitions/comment_controller.ReplyListRequest"
}
}
],
@@ -961,7 +961,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/comment_api.ReplyReplyRequest"
"$ref": "#/definitions/comment_controller.ReplyReplyRequest"
}
}
],
@@ -988,7 +988,7 @@ const docTemplate = `{
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/comment_api.ReplyCommentRequest"
"$ref": "#/definitions/comment_controller.ReplyCommentRequest"
}
}
],
@@ -997,7 +997,7 @@ const docTemplate = `{
}
},
"definitions": {
"comment_api.CommentLikeRequest": {
"comment_controller.CommentLikeRequest": {
"type": "object",
"required": [
"comment_id",
@@ -1016,7 +1016,7 @@ const docTemplate = `{
}
}
},
"comment_api.CommentListRequest": {
"comment_controller.CommentListRequest": {
"type": "object",
"required": [
"topic_id",
@@ -1043,7 +1043,7 @@ const docTemplate = `{
}
}
},
"comment_api.CommentRequest": {
"comment_controller.CommentRequest": {
"type": "object",
"required": [
"author",
@@ -1083,7 +1083,7 @@ const docTemplate = `{
}
}
},
"comment_api.ReplyCommentRequest": {
"comment_controller.ReplyCommentRequest": {
"type": "object",
"required": [
"author",
@@ -1131,7 +1131,7 @@ const docTemplate = `{
}
}
},
"comment_api.ReplyListRequest": {
"comment_controller.ReplyListRequest": {
"type": "object",
"required": [
"comment_id",
@@ -1158,7 +1158,7 @@ const docTemplate = `{
}
}
},
"comment_api.ReplyReplyRequest": {
"comment_controller.ReplyReplyRequest": {
"type": "object",
"required": [
"author",
@@ -1278,7 +1278,7 @@ const docTemplate = `{
}
}
},
"permission_api.AddPermissionRequest": {
"permission_controller.AddPermissionRequest": {
"type": "object",
"properties": {
"permissions": {
@@ -1289,7 +1289,7 @@ const docTemplate = `{
}
}
},
"permission_api.AddPermissionToRoleRequest": {
"permission_controller.AddPermissionToRoleRequest": {
"type": "object",
"properties": {
"method": {
@@ -1303,7 +1303,7 @@ const docTemplate = `{
}
}
},
"role_api.AddRoleToUserRequest": {
"role_controller.AddRoleToUserRequest": {
"type": "object",
"required": [
"role_key",
@@ -1318,7 +1318,7 @@ const docTemplate = `{
}
}
},
"role_api.RoleRequest": {
"role_controller.RoleRequest": {
"type": "object",
"required": [
"role_key",
@@ -1333,7 +1333,7 @@ const docTemplate = `{
}
}
},
"user_api.AccountLoginRequest": {
"user_controller.AccountLoginRequest": {
"type": "object",
"required": [
"account",
@@ -1360,7 +1360,7 @@ const docTemplate = `{
}
}
},
"user_api.PhoneLoginRequest": {
"user_controller.PhoneLoginRequest": {
"type": "object",
"required": [
"auto_login",
@@ -1379,7 +1379,7 @@ const docTemplate = `{
}
}
},
"user_api.ResetPasswordRequest": {
"user_controller.ResetPasswordRequest": {
"type": "object",
"required": [
"captcha",

View File

@@ -37,7 +37,7 @@ func CommentLikeProducer(messageBody []byte) {
func CommentLikeConsumer() {
consumer := core.InitConsumer(CommentLikeTopic)
consumer.AddHandler(&MessageHandler{})
err := consumer.ConnectToNSQLookupd(global.CONFIG.NSQ.LookupdAddr())
err := consumer.ConnectToNSQD(global.CONFIG.NSQ.NsqAddr())
if err != nil {
log.Fatal(err)
}

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var captchaApi = api.Api.CaptchaApi
var captchaApi = controller.Controller.CaptchaController
func CaptchaRouter(router *gin.RouterGroup) {
group := router.Group("/captcha")

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var clientApi = api.Api.ClientApi
var clientApi = controller.Controller.ClientController
func ClientRouter(router *gin.RouterGroup) {
router.GET("/client/generate_client_id", clientApi.GenerateClientId)

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var commonApi = api.Api.CommonApi
var commonApi = controller.Controller.CommonController
func CommentRouter(router *gin.RouterGroup) {
router.POST("/auth/comment/submit", commonApi.CommentSubmit)

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var oauth = api.Api.OAuthApi
var oauth = controller.Controller.OAuthController
func OauthRouter(router *gin.RouterGroup) {
group := router.Group("/oauth")

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var permissionApi = api.Api.PermissionApi
var permissionApi = controller.Controller.PermissionController
func PermissionRouter(router *gin.RouterGroup) {
group := router.Group("/auth/permission")

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var roleApi = api.Api.RoleApi
var roleApi = controller.Controller.RoleController
func RoleRouter(router *gin.RouterGroup) {
group := router.Group("/auth")

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var smsApi = api.Api.SmsApi
var smsApi = controller.Controller.SmsController
func SmsRouter(router *gin.RouterGroup) {
group := router.Group("/sms")

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var userApi = api.Api.UserApi
var userApi = controller.Controller.UserController
// UserRouter 用户相关路由 有auth接口组需要token验证,没有auth接口组不需要token验证
func UserRouter(router *gin.RouterGroup) {

View File

@@ -2,10 +2,10 @@ package modules
import (
"github.com/gin-gonic/gin"
"schisandra-cloud-album/api"
"schisandra-cloud-album/controller"
)
var websocketAPI = api.Api.WebsocketApi
var websocketAPI = controller.Controller.WebsocketController
func WebsocketRouter(router *gin.RouterGroup) {
group := router.Group("/ws")

View File

@@ -1,3 +0,0 @@
package comment_likes_service
type CommentLikes struct{}

View File

@@ -1 +0,0 @@
package comment_likes_service

View File

@@ -0,0 +1,10 @@
package service
import "schisandra-cloud-album/model"
type CommentReplyService interface {
CreateCommentReplyService(comment *model.ScaCommentReply) error
UpdateCommentReplyCountService(replyId int64) error
UpdateCommentLikesCountService(commentId int64, topicId string) error
DecrementCommentLikesCountService(commentId int64, topicId string) error
}

View File

@@ -1,3 +0,0 @@
package comment_reply_service
type CommentReplyService struct{}

View File

@@ -0,0 +1,32 @@
package impl
import (
"schisandra-cloud-album/dao/impl"
"schisandra-cloud-album/model"
)
var commentReplyDao = impl.CommentReplyDaoImpl{}
type CommentReplyServiceImpl struct{}
// CreateCommentReplyService 创建评论回复
func (CommentReplyServiceImpl) CreateCommentReplyService(comment *model.ScaCommentReply) error {
return commentReplyDao.CreateCommentReply(comment)
}
// UpdateCommentReplyCountService 更新评论回复数
func (CommentReplyServiceImpl) UpdateCommentReplyCountService(replyId int64) error {
return commentReplyDao.UpdateCommentReplyCount(replyId)
}
// UpdateCommentLikesCountService 更新评论点赞数
func (CommentReplyServiceImpl) UpdateCommentLikesCountService(commentId int64, topicId string) error {
return commentReplyDao.UpdateCommentLikesCount(commentId, topicId)
}
// DecrementCommentLikesCountService 减少评论点赞数
func (CommentReplyServiceImpl) DecrementCommentLikesCountService(commentId int64, topicId string) error {
return commentReplyDao.DecrementCommentLikesCount(commentId, topicId)
}

View File

@@ -0,0 +1,15 @@
package impl
import (
"schisandra-cloud-album/dao/impl"
"schisandra-cloud-album/model"
)
var permissionDao = impl.PermissionDaoImpl{}
type PermissionServiceImpl struct{}
// CreatePermissionsService 创建权限
func (PermissionServiceImpl) CreatePermissionsService(permissions []model.ScaAuthPermission) error {
return permissionDao.CreatePermissions(permissions)
}

View File

@@ -0,0 +1,16 @@
package impl
import (
"schisandra-cloud-album/dao/impl"
"schisandra-cloud-album/model"
)
var roleDao = impl.RoleDaoImpl{}
type RoleServiceImpl struct{}
// AddRoleService 添加角色
func (RoleServiceImpl) AddRoleService(role model.ScaAuthRole) error {
return roleDao.AddRole(role)
}

View File

@@ -0,0 +1,25 @@
package impl
import (
"schisandra-cloud-album/dao/impl"
"schisandra-cloud-album/model"
)
var userDeviceDao = impl.UserDeviceImpl{}
type UserDeviceServiceImpl struct{}
// GetUserDeviceByUIDIPAgentService 获取用户设备信息 根据用户ID、IP、User-Agent
func (UserDeviceServiceImpl) GetUserDeviceByUIDIPAgentService(userId, ip, userAgent string) (*model.ScaAuthUserDevice, error) {
return userDeviceDao.GetUserDeviceByUIDIPAgent(userId, ip, userAgent)
}
// AddUserDeviceService 新增用户设备信息
func (UserDeviceServiceImpl) AddUserDeviceService(userDevice *model.ScaAuthUserDevice) error {
return userDeviceDao.AddUserDevice(userDevice)
}
// UpdateUserDeviceService 更新用户设备信息
func (UserDeviceServiceImpl) UpdateUserDeviceService(userId int64, userDevice *model.ScaAuthUserDevice) error {
return userDeviceDao.UpdateUserDevice(userId, userDevice)
}

View File

@@ -0,0 +1,54 @@
package impl
import (
"schisandra-cloud-album/dao/impl"
"schisandra-cloud-album/model"
)
var userDao = impl.UserDaoImpl{}
type UserServiceImpl struct{}
// GetUserListService 返回用户列表
func (UserServiceImpl) GetUserListService() []*model.ScaAuthUser {
return userDao.GetUserList()
}
// QueryUserByUsernameService 根据用户名查询用户
func (UserServiceImpl) QueryUserByUsernameService(username string) model.ScaAuthUser {
return userDao.QueryUserByUsername(username)
}
// QueryUserByUuidService 根据uid查询用户
func (UserServiceImpl) QueryUserByUuidService(uid *string) model.ScaAuthUser {
user, err := userDao.QueryUserByUuid(uid)
if err != nil {
return model.ScaAuthUser{}
}
return user
}
// DeleteUserService 根据uid删除用户
func (UserServiceImpl) DeleteUserService(uid string) error {
return userDao.DeleteUser(uid)
}
// QueryUserByPhoneService 根据手机号查询用户
func (UserServiceImpl) QueryUserByPhoneService(phone string) model.ScaAuthUser {
return userDao.QueryUserByPhone(phone)
}
// QueryUserByEmailService 根据邮箱查询用户
func (UserServiceImpl) QueryUserByEmailService(email string) model.ScaAuthUser {
return userDao.QueryUserByEmail(email)
}
// AddUserService 新增用户
func (UserServiceImpl) AddUserService(user model.ScaAuthUser) (*model.ScaAuthUser, error) {
return userDao.AddUser(user)
}
// UpdateUserService 更新用户信息
func (UserServiceImpl) UpdateUserService(phone, encrypt string) error {
return userDao.UpdateUser(phone, encrypt)
}

View File

@@ -0,0 +1,20 @@
package impl
import (
"schisandra-cloud-album/dao/impl"
"schisandra-cloud-album/model"
)
var userSocialDao = impl.UserSocialImpl{}
type UserSocialServiceImpl struct{}
// QueryUserSocialByOpenIDService 查询用户第三方账号信息
func (UserSocialServiceImpl) QueryUserSocialByOpenIDService(openID string, source string) (model.ScaAuthUserSocial, error) {
return userSocialDao.QueryUserSocialByOpenID(openID, source)
}
// AddUserSocialService 新增用户第三方账号信息
func (UserSocialServiceImpl) AddUserSocialService(userSocial model.ScaAuthUserSocial) error {
return userSocialDao.AddUserSocial(userSocial)
}

View File

@@ -0,0 +1,8 @@
package service
import "schisandra-cloud-album/model"
type PermissionService interface {
// CreatePermissionsService 创建权限
CreatePermissionsService(permissions []model.ScaAuthPermission) error
}

View File

@@ -1,3 +0,0 @@
package permission_service
type PermissionService struct{}

8
service/role_service.go Normal file
View File

@@ -0,0 +1,8 @@
package service
import "schisandra-cloud-album/model"
type RoleService interface {
// AddRoleService 添加角色
AddRoleService(role model.ScaAuthRole) error
}

View File

@@ -1,3 +0,0 @@
package role_service
type RoleService struct{}

View File

@@ -1,23 +0,0 @@
package service
import (
"schisandra-cloud-album/service/comment_reply_service"
"schisandra-cloud-album/service/permission_service"
"schisandra-cloud-album/service/role_service"
"schisandra-cloud-album/service/user_device_service"
"schisandra-cloud-album/service/user_service"
"schisandra-cloud-album/service/user_social_service"
)
// Services 统一导出的service
type Services struct {
UserService user_service.UserService
RoleService role_service.RoleService
PermissionService permission_service.PermissionService
UserSocialService user_social_service.UserSocialService
UserDeviceService user_device_service.UserDeviceService
CommentReplyService comment_reply_service.CommentReplyService
}
// Service new函数实例化实例化完成后会返回结构体地指针类型
var Service = new(Services)

View File

@@ -0,0 +1,9 @@
package service
import "schisandra-cloud-album/model"
type UserDeviceService interface {
GetUserDeviceByUIDIPAgentService(userId, ip, userAgent string) (*model.ScaAuthUserDevice, error)
AddUserDeviceService(userDevice *model.ScaAuthUserDevice) error
UpdateUserDeviceService(userId int64, userDevice *model.ScaAuthUserDevice) error
}

View File

@@ -1,3 +0,0 @@
package user_device_service
type UserDeviceService struct{}

22
service/user_service.go Normal file
View File

@@ -0,0 +1,22 @@
package service
import "schisandra-cloud-album/model"
type UserService interface {
// GetUserListService 返回用户列表
GetUserListService() []*model.ScaAuthUser
// QueryUserByUsernameService 根据用户名查询用户
QueryUserByUsernameService(username string) model.ScaAuthUser
// QueryUserByUuidService 根据用户ID查询用户
QueryUserByUuidService(uid *string) model.ScaAuthUser
// DeleteUserService 根据用户ID删除用户
DeleteUserService(uid string) error
// QueryUserByPhoneService 根据手机号查询用户
QueryUserByPhoneService(phone string) model.ScaAuthUser
// QueryUserByEmailService 根据邮箱查询用户
QueryUserByEmailService(email string) model.ScaAuthUser
// AddUserService 新增用户
AddUserService(user model.ScaAuthUser) (*model.ScaAuthUser, error)
// UpdateUserService 更新用户信息
UpdateUserService(phone, encrypt string) error
}

View File

@@ -1,3 +0,0 @@
package user_service
type UserService struct{}

View File

@@ -0,0 +1,8 @@
package service
import "schisandra-cloud-album/model"
type UserSocialService interface {
QueryUserSocialByOpenIDService(openID string, source string) (model.ScaAuthUserSocial, error)
AddUserSocialService(userSocial model.ScaAuthUserSocial) error
}

View File

@@ -1,3 +0,0 @@
package user_social_service
type UserSocialService struct{}

View File

@@ -1,44 +0,0 @@
package user_social_service
import (
"errors"
"gorm.io/gorm"
"schisandra-cloud-album/global"
"schisandra-cloud-album/model"
)
// AddUserSocial 添加社会化登录用户信息
func (UserSocialService) AddUserSocial(user model.ScaAuthUserSocial) error {
result := global.DB.Create(&user)
if result.Error != nil {
return result.Error
}
return nil
}
// QueryUserSocialByOpenID 根据openID和source查询用户信息
func (UserSocialService) QueryUserSocialByOpenID(openID string, source string) (model.ScaAuthUserSocial, error) {
var user model.ScaAuthUserSocial
result := global.DB.Where("open_id = ? and source = ? and deleted = 0", openID, source).First(&user)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return model.ScaAuthUserSocial{}, result.Error
}
return model.ScaAuthUserSocial{}, result.Error
}
return user, nil
}
// QueryUserSocialByUUID 根据uuid和source查询用户信息
func (UserSocialService) QueryUserSocialByUUID(openID string, source string) (model.ScaAuthUserSocial, error) {
var user model.ScaAuthUserSocial
result := global.DB.Where("uuid = ? and source = ? and deleted = 0", openID, source).First(&user)
if result.Error != nil {
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return model.ScaAuthUserSocial{}, result.Error
}
return model.ScaAuthUserSocial{}, result.Error
}
return user, nil
}