wx-server/internal/server/server.go

130 lines
4.4 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 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) // 获取角色详情。 小程序未使用此接口。
}
}