diff --git a/internal/service/post.go b/internal/service/post.go index b65ff0d9..daa858bb 100644 --- a/internal/service/post.go +++ b/internal/service/post.go @@ -84,8 +84,13 @@ func (p *PostContentItem) Check() error { return nil } +// CreatePost 创建文章 +// TODO: maybe have bug need optimize for use transaction to create post func CreatePost(c *gin.Context, userID int64, param PostCreationReq) (*model.Post, error) { ip := c.ClientIP() + if len(ip) == 0 { + ip = "未知" + } post := &model.Post{ UserID: userID, @@ -100,15 +105,6 @@ func CreatePost(c *gin.Context, userID int64, param PostCreationReq) (*model.Pos return nil, err } - // 创建标签 - for _, t := range param.Tags { - tag := &model.Tag{ - UserID: userID, - Tag: t, - } - ds.CreateTag(tag) - } - for _, item := range param.Contents { if err = item.Check(); err != nil { // 属性非法 @@ -127,27 +123,43 @@ func CreatePost(c *gin.Context, userID int64, param PostCreationReq) (*model.Pos Type: item.Type, Sort: item.Sort, } - ds.CreatePostContent(postContent) + if _, err := ds.CreatePostContent(postContent); err != nil { + return nil, err + } } - // 推送Search - go PushPostToSearch(post) - - // 创建用户消息提醒 - for _, u := range param.Users { - user, err := ds.GetUserByUsername(u) - if err != nil || user.ID == userID { - continue + // TODO: 目前非私密文章才能有如下操作,后续再优化 + if post.Visibility != model.PostVisitPrivate { + // 创建标签 + for _, t := range param.Tags { + tag := &model.Tag{ + UserID: userID, + Tag: t, + } + if _, err := ds.CreateTag(tag); err != nil { + return nil, err + } } + // 创建用户消息提醒 + for _, u := range param.Users { + user, err := ds.GetUserByUsername(u) + if err != nil || user.ID == userID { + continue + } - // 创建消息提醒 - go ds.CreateMessage(&model.Message{ - SenderUserID: userID, - ReceiverUserID: user.ID, - Type: model.MESSAGE_POST, - Brief: "在新发布的泡泡动态中@了你", - PostID: post.ID, - }) + // 创建消息提醒 + // TODO: 优化消息提醒处理机制 + go ds.CreateMessage(&model.Message{ + SenderUserID: userID, + ReceiverUserID: user.ID, + Type: model.MESSAGE_POST, + Brief: "在新发布的泡泡动态中@了你", + PostID: post.ID, + }) + } + // 推送Search + // TODO: 优化推送文章到搜索的处理机制,最好使用通道channel传递文章,可以省goroutine + go PushPostToSearch(post) } return post, nil