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