wx-server/internal/server/server.go

130 lines
4.4 KiB
Go
Raw Normal View History

2024-06-04 21:22:50 +08:00
package server
import (
"mini_server/internal/config"
"mini_server/internal/dao"
"mini_server/internal/logger"
"mini_server/internal/middleware/cors"
"mini_server/internal/middleware/jwt"
"mini_server/internal/middleware/tls"
"mini_server/internal/server/bluetooth"
chatrecord "mini_server/internal/server/chat_record"
"mini_server/internal/server/file"
"mini_server/internal/server/post"
"mini_server/internal/server/role"
"mini_server/internal/server/user"
"mini_server/internal/server/wx"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
)
type Server struct {
e *gin.Engine
address string
}
func NewServer(address, dsn string) (*Server, error) {
err := dao.InitDefaultService(dsn)
if err != nil {
return nil, err
}
gin.DefaultWriter = logger.GinLogger
e := gin.Default()
srv := &Server{e: e, address: address}
srv.init_v1_handler()
return srv, nil
}
func (s *Server) GetGinEngine() *gin.Engine { return s.e }
func (s *Server) Run() error {
if config.TlsEnable { // 启用tls
return s.e.RunTLS(s.address, config.TlsFilePem, config.TlsFileKey)
}
return s.e.Run(s.address)
}
func (s *Server) init_v1_handler() {
if config.TlsEnable { // 是否开启https
logrus.Info("use TLS")
s.e.Use(tls.TlsHandler())
}
api := s.e.Group("api")
if config.JwtEnable { // 是否开启jwt校验
logrus.Info("use JWT")
api.Use(jwt.AuthMiddleware())
}
if config.CorsEnable { // 是否开启跨域处理
logrus.Info("use CORS")
api.Use(cors.CorsMiddleware())
}
users := api.Group("users")
{
// users.GET("/:user_id", user.Query) // 获取用户信息。小程序未使用。
users.PUT("/username", user.ChangeUsername) // 更新用户名称
users.PUT("/avatar_id", user.ChangeAvatarId) // 更新用户头像
users.POST("/wx/login", wx.WxLogin) // 微信登录
}
// 聊天相关功能
chats := api.Group("chat_records")
{
chats.GET("/", chatrecord.History) // 获取单个角色历史聊天记录
chats.GET("/all", chatrecord.HistoryAll) // 获取所有角色历史聊天记录
chats.POST("/", chatrecord.Upload) // 发送聊天消息,进行存储
chats.GET("/exists", chatrecord.Exists) // 判断用户与角色是否有聊天记录
}
// 帖子相关接口
posts := api.Group("post")
{
posts.GET("/", post.List) // 获取社区帖子列表,支持按照时间查询,支持根据角色筛选
posts.GET("/:post_id", post.Query) // 获取帖子详情
posts.POST("/", post.Upload) // 发布帖子
posts.POST("/:post_id/like", post.Like) // 帖子点赞
posts.DELETE("/:post_id/like", post.UnLike) // 帖子取消点赞
posts.GET("/:post_id/comments/", post.QueryComment) // 获取帖子的全部评论
posts.POST("/:post_id/comments/", post.UploadComment) // 添加一条评论
posts.DELETE("/:post_id/comments/:comment_id", post.DeleteComment) // 删除评论
}
// 草稿相关接口
drafts := api.Group("drafts")
{
drafts.GET("/", post.QueryDraft) // 获取草稿。目前草稿的处理逻辑是,一个用户只保存一张草稿。
drafts.POST("/", post.SaveDraft) // 保存草稿
drafts.DELETE("/", post.DeleteDraft) // 删除草稿
}
// 图片和音频等文件相关功能。
files := api.Group("files")
{
files.POST("/", file.Upload) // 文件上传
files.DELETE("/:file_id", file.Delete) // 文件删除
}
s.e.GET("/api/files/:file_id", file.Download) // 文件下载 /////////// 注:为了保证图片通过<image>标签下载未设置header。文件相关接口不受jwt限制。
// 蓝牙接口
bluetooths := api.Group("bluetooths")
{
bluetooths.GET("/", bluetooth.QueryAll) // 查询蓝牙接口列表
bluetooths.POST("/", bluetooth.Create) // 增加某个蓝牙的具体信息
bluetooths.DELETE("/", bluetooth.Delete) // 删除某个蓝牙的具体信息
}
// 角色接口
roles := api.Group("roles")
{
roles.GET("/all", role.QueryAllRole) // 获取所有角色
roles.POST("/", role.Create) // 添加角色
roles.GET("/", role.QueryList) // 获取用户绑定的角色列表
// roles.DELETE("/:role_id", role.Delete) // 删除角色。 小程序未使用此接口。
// roles.GET("/:role_id", role.Query) // 获取角色详情。 小程序未使用此接口。
}
}