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) // 文件下载 /////////// 注:为了保证图片通过标签下载(未设置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) // 获取角色详情。 小程序未使用此接口。 } }