邹方成 1a285f4e23 feat(消息状态): 添加消息已读状态功能
- 新增消息已读状态表结构及模型
- 实现用户端标记消息为已读接口
- 添加管理端获取最新消息记录接口
- 实现微信小程序登录功能
- 更新相关API文档和路由配置
2025-10-18 18:24:42 +08:00

109 lines
4.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package router
import (
"mini-chat/internal/alert"
"mini-chat/internal/api/admin"
"mini-chat/internal/api/app"
"mini-chat/internal/api/keyword"
"mini-chat/internal/api/message"
"mini-chat/internal/api/upload"
"mini-chat/internal/api/wechat"
"mini-chat/internal/cron"
"mini-chat/internal/dblogger"
"mini-chat/internal/pkg/core"
"mini-chat/internal/pkg/logger"
"mini-chat/internal/pkg/startup"
"mini-chat/internal/repository/mysql"
"mini-chat/internal/router/interceptor"
"github.com/pkg/errors"
)
func NewHTTPMux(logger logger.CustomLogger, db mysql.Repo, cron cron.Server) (core.Mux, error) {
if logger == nil {
return nil, errors.New("logger required")
}
if db == nil {
return nil, errors.New("db required")
}
mux, err := core.New(logger,
core.WithEnableCors(),
core.WithEnableSwagger(),
core.WithEnablePProf(),
core.WithAlertNotify(alert.NotifyHandler()),
core.WithRequestLogger(dblogger.LoggerHandler(db)),
)
if err != nil {
panic(err)
}
// 实例化拦截器
interceptorHandler := interceptor.New(logger, db)
adminHandler := admin.New(logger, db)
appHandler := app.New(logger, db)
uploadHandler := upload.New(logger, db)
keywordHandler := keyword.New(logger, db)
messageHandler := message.New(logger, db)
wechatHandler := wechat.New(logger, db)
// 管理端非认证接口路由组
adminNonAuthApiRouter := mux.Group("/admin")
{
adminNonAuthApiRouter.GET("/license/status", func(ctx core.Context) {
ctx.Payload(startup.Info())
})
adminNonAuthApiRouter.POST("/login", adminHandler.Login()) // 登录
adminNonAuthApiRouter.POST("/upload/image", uploadHandler.UploadImage()) // 上传图片
}
appNonAuthApiRouter := mux.Group("/app")
{
appNonAuthApiRouter.POST("/user/create", appHandler.CreateAppUser()) // 新增小程序用户
appNonAuthApiRouter.GET("/messages", messageHandler.AppMessagePageList()) // 消息列表
appNonAuthApiRouter.POST("/messages/read", messageHandler.MarkMessageRead()) // 标记消息为已读
appNonAuthApiRouter.POST("/send_message", messageHandler.UserSendMessage()) // 发送消息
}
// 微信 API 路由组
wechatApiRouter := mux.Group("/api/wechat")
{
wechatApiRouter.POST("/qrcode", wechatHandler.GenerateQRCode()) // 生成微信小程序二维码(返回 Base64
wechatApiRouter.POST("/miniprogram/login", wechatHandler.MiniprogramLogin()) // 小程序登录
}
// 管理端认证接口路由组
adminAuthApiRouter := mux.Group("/admin", core.WrapAuthHandler(interceptorHandler.AdminTokenAuthVerify))
{
adminAuthApiRouter.POST("/app/create", appHandler.CreateApp()) // 关联小程序
adminAuthApiRouter.POST("/app/delete", appHandler.DeleteApp()) // 删除小程序
adminAuthApiRouter.PUT("/app/:id", appHandler.ModifyApp()) // 修改小程序
adminAuthApiRouter.GET("/apps", appHandler.PageList()) // 小程序列表
adminAuthApiRouter.POST("/create", adminHandler.CreateAdmin()) // 新增客服
adminAuthApiRouter.POST("/delete", adminHandler.DeleteAdmin()) // 删除客服
adminAuthApiRouter.PUT("/:id", adminHandler.ModifyAdmin()) // 编辑客服
adminAuthApiRouter.GET("/list", adminHandler.PageList()) // 客服列表
adminAuthApiRouter.PUT("/rel_app/:id", adminHandler.RelApp()) // 关联小程序
adminAuthApiRouter.POST("/app/keyword", keywordHandler.CreateKeyword()) // 添加意图关键字
adminAuthApiRouter.PUT("/app/keyword/:id", keywordHandler.ModifyKeyword()) // 修改意图关键字
adminAuthApiRouter.DELETE("/app/keyword/:id", keywordHandler.DeleteKeyword()) // 删除意图关键字
adminAuthApiRouter.GET("/app/keywords", keywordHandler.KeywordPageList()) // 获取意图关键字列表
adminAuthApiRouter.POST("/app/keyword/material/:id", keywordHandler.CreateKeywordMaterial()) // 配置意图关键字素材
adminAuthApiRouter.PUT("/app/keyword/material/:id", keywordHandler.ModifyKeywordMaterial()) // 修改意图关键字素材
adminAuthApiRouter.GET("/app/keyword/materials", keywordHandler.KeywordMaterialPageList()) // 获取意图关键字素材列表
adminAuthApiRouter.GET("/app/users", appHandler.UserPageList()) // 获取小程序用户列表
adminAuthApiRouter.POST("/send_message", appHandler.AdminSendMessage()) // 发送消息
adminAuthApiRouter.GET("/messages", appHandler.AppMessagePageList()) // 获取小程序用户消息列表
adminAuthApiRouter.GET("/messages/latest", appHandler.LatestMessageByAppId()) // 根据appid获取最新消息记录
}
return mux, nil
}