正在显示
13 个修改的文件
包含
92 行增加
和
24 行删除
| @@ -30,13 +30,13 @@ service Core { | @@ -30,13 +30,13 @@ service Core { | ||
| 30 | @handler MiniSetUserLike | 30 | @handler MiniSetUserLike |
| 31 | post /article/user_like/set (MiniSetUserLikeRequset) returns (MiniSetUserLikeResponse) | 31 | post /article/user_like/set (MiniSetUserLikeRequset) returns (MiniSetUserLikeResponse) |
| 32 | 32 | ||
| 33 | - @doc "小程序获取文章的编辑记录" | ||
| 34 | - @handler MiniArticleBackupSearch | ||
| 35 | - post /article_backup/search (MiniArticleSearchMeRequest) returns (MiniArticleSearchMeResponse) | ||
| 36 | - | ||
| 37 | @doc "小程序获取我发布的文章" | 33 | @doc "小程序获取我发布的文章" |
| 38 | @handler MiniArticleSearchMe | 34 | @handler MiniArticleSearchMe |
| 39 | - post /article/search/me (MiniArticleBackupSearchRequest) returns (MiniArticleBackupSearchResponse) | 35 | + post /article/search/me (MiniArticleSearchMeRequest) returns (MiniArticleSearchMeResponse) |
| 36 | + | ||
| 37 | + @doc "小程序获取文章的编辑记录" | ||
| 38 | + @handler MiniArticleBackupSearch | ||
| 39 | + post /article_backup/search (MiniArticleBackupSearchRequest) returns (MiniArticleBackupSearchResponse) | ||
| 40 | 40 | ||
| 41 | } | 41 | } |
| 42 | 42 |
| @@ -135,14 +135,15 @@ type ( | @@ -135,14 +135,15 @@ type ( | ||
| 135 | CompanyId int64 `json:",optional"` // 服务端自动获取 | 135 | CompanyId int64 `json:",optional"` // 服务端自动获取 |
| 136 | } | 136 | } |
| 137 | MiniArticleBackupSearchResponse { | 137 | MiniArticleBackupSearchResponse { |
| 138 | - Total int `json:"total"` | 138 | + Total int64 `json:"total"` |
| 139 | List []MiniArticleBackupItem `json:"list"` | 139 | List []MiniArticleBackupItem `json:"list"` |
| 140 | } | 140 | } |
| 141 | MiniArticleBackupItem { | 141 | MiniArticleBackupItem { |
| 142 | - Id int `json:"id"` | 142 | + Id int64 `json:"id"` |
| 143 | + Title string `json:"title"` | ||
| 143 | Content string `json:"content"` | 144 | Content string `json:"content"` |
| 144 | Images []string `json:"images"` | 145 | Images []string `json:"images"` |
| 145 | - CreatedAt int `json:"createdAt"` | 146 | + CreatedAt int64 `json:"createdAt"` |
| 146 | Location Location `json:"location"` | 147 | Location Location `json:"location"` |
| 147 | } | 148 | } |
| 148 | ) | 149 | ) |
| @@ -13,15 +13,14 @@ import ( | @@ -13,15 +13,14 @@ import ( | ||
| 13 | 13 | ||
| 14 | func MiniArticleBackupSearchHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | 14 | func MiniArticleBackupSearchHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { |
| 15 | return func(w http.ResponseWriter, r *http.Request) { | 15 | return func(w http.ResponseWriter, r *http.Request) { |
| 16 | - var req types.MiniArticleSearchMeRequest | 16 | + var req types.MiniArticleBackupSearchRequest |
| 17 | if err := httpx.Parse(r, &req); err != nil { | 17 | if err := httpx.Parse(r, &req); err != nil { |
| 18 | httpx.ErrorCtx(r.Context(), w, err) | 18 | httpx.ErrorCtx(r.Context(), w, err) |
| 19 | return | 19 | return |
| 20 | } | 20 | } |
| 21 | - | ||
| 22 | - l := article.NewMiniArticleBackupSearchLogic(r.Context(), svcCtx) | ||
| 23 | token := contextdata.GetUserTokenFromCtx(r.Context()) | 21 | token := contextdata.GetUserTokenFromCtx(r.Context()) |
| 24 | req.CompanyId = token.CompanyId | 22 | req.CompanyId = token.CompanyId |
| 23 | + l := article.NewMiniArticleBackupSearchLogic(r.Context(), svcCtx) | ||
| 25 | resp, err := l.MiniArticleBackupSearch(&req) | 24 | resp, err := l.MiniArticleBackupSearch(&req) |
| 26 | result.HttpResult(r, w, resp, err) | 25 | result.HttpResult(r, w, resp, err) |
| 27 | } | 26 | } |
| @@ -199,13 +199,13 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | @@ -199,13 +199,13 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | ||
| 199 | }, | 199 | }, |
| 200 | { | 200 | { |
| 201 | Method: http.MethodPost, | 201 | Method: http.MethodPost, |
| 202 | - Path: "/article_backup/search", | ||
| 203 | - Handler: article.MiniArticleBackupSearchHandler(serverCtx), | 202 | + Path: "/article/search/me", |
| 203 | + Handler: article.MiniArticleSearchMeHandler(serverCtx), | ||
| 204 | }, | 204 | }, |
| 205 | { | 205 | { |
| 206 | Method: http.MethodPost, | 206 | Method: http.MethodPost, |
| 207 | - Path: "/article/search/me", | ||
| 208 | - Handler: article.MiniArticleSearchMeHandler(serverCtx), | 207 | + Path: "/article_backup/search", |
| 208 | + Handler: article.MiniArticleBackupSearchHandler(serverCtx), | ||
| 209 | }, | 209 | }, |
| 210 | }, | 210 | }, |
| 211 | rest.WithJwt(serverCtx.Config.MiniAuth.AccessSecret), | 211 | rest.WithJwt(serverCtx.Config.MiniAuth.AccessSecret), |
| @@ -2,9 +2,12 @@ package article | @@ -2,9 +2,12 @@ package article | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "context" | 4 | "context" |
| 5 | + "strings" | ||
| 5 | 6 | ||
| 6 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" |
| 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | 8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" |
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 8 | 11 | ||
| 9 | "github.com/zeromicro/go-zero/core/logx" | 12 | "github.com/zeromicro/go-zero/core/logx" |
| 10 | ) | 13 | ) |
| @@ -23,8 +26,44 @@ func NewMiniArticleBackupSearchLogic(ctx context.Context, svcCtx *svc.ServiceCon | @@ -23,8 +26,44 @@ func NewMiniArticleBackupSearchLogic(ctx context.Context, svcCtx *svc.ServiceCon | ||
| 23 | } | 26 | } |
| 24 | } | 27 | } |
| 25 | 28 | ||
| 26 | -func (l *MiniArticleBackupSearchLogic) MiniArticleBackupSearch(req *types.MiniArticleSearchMeRequest) (resp *types.MiniArticleSearchMeResponse, err error) { | ||
| 27 | - // todo: add your logic here and delete this line | 29 | +func (l *MiniArticleBackupSearchLogic) MiniArticleBackupSearch(req *types.MiniArticleBackupSearchRequest) (resp *types.MiniArticleBackupSearchResponse, err error) { |
| 30 | + var conn = l.svcCtx.DefaultDBConn() | ||
| 28 | 31 | ||
| 29 | - return | 32 | + queryOption := domain.NewQueryOptions(). |
| 33 | + WithOffsetLimit(req.Page, req.Size). | ||
| 34 | + MustWithKV("article_id", req.ArticleId). | ||
| 35 | + MustWithKV("company_id", req.CompanyId) | ||
| 36 | + | ||
| 37 | + cnt, backupList, err := l.svcCtx.ArticleBackupRepository.Find(l.ctx, conn, queryOption) | ||
| 38 | + if err != nil { | ||
| 39 | + return &types.MiniArticleBackupSearchResponse{}, xerr.NewErrMsgErr("获取编辑记录列表失败", err) | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + resp = &types.MiniArticleBackupSearchResponse{ | ||
| 43 | + Total: cnt, | ||
| 44 | + List: make([]types.MiniArticleBackupItem, len(backupList)), | ||
| 45 | + } | ||
| 46 | + for i := range backupList { | ||
| 47 | + content := strings.Builder{} | ||
| 48 | + for _, val2 := range backupList[i].Section { | ||
| 49 | + content.WriteString(val2.Content) | ||
| 50 | + } | ||
| 51 | + images := []string{} | ||
| 52 | + for _, val2 := range backupList[i].Images { | ||
| 53 | + images = append(images, val2.Url) | ||
| 54 | + } | ||
| 55 | + resp.List[i] = types.MiniArticleBackupItem{ | ||
| 56 | + Id: backupList[i].Id, | ||
| 57 | + Title: backupList[i].Title, | ||
| 58 | + Content: content.String(), | ||
| 59 | + Images: images, | ||
| 60 | + CreatedAt: backupList[i].CreatedAt, | ||
| 61 | + Location: types.Location{ | ||
| 62 | + Longitude: backupList[i].Location.Longitude, | ||
| 63 | + Latitude: backupList[i].Location.Latitude, | ||
| 64 | + Descript: backupList[i].Location.Descript, | ||
| 65 | + }, | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + return resp, nil | ||
| 30 | } | 69 | } |
| @@ -168,6 +168,20 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | @@ -168,6 +168,20 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | ||
| 168 | if len(whoRead) > 0 { | 168 | if len(whoRead) > 0 { |
| 169 | newArticle.TargetUser = domain.ArticleTargetLimit | 169 | newArticle.TargetUser = domain.ArticleTargetLimit |
| 170 | } | 170 | } |
| 171 | + //设置内容概要 | ||
| 172 | + if len(sectionList) > 0 { | ||
| 173 | + // 截取内容 30个字 | ||
| 174 | + runeNumber := 0 //字数 | ||
| 175 | + stringIndex := 0 //字符串长度 | ||
| 176 | + for i := range sectionList[0].Content { | ||
| 177 | + if runeNumber > 30 { | ||
| 178 | + break | ||
| 179 | + } | ||
| 180 | + runeNumber += 1 | ||
| 181 | + stringIndex = i | ||
| 182 | + } | ||
| 183 | + newArticle.Summary = sectionList[0].Content[0:stringIndex] | ||
| 184 | + } | ||
| 171 | 185 | ||
| 172 | err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error { | 186 | err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error { |
| 173 | newArticle, err = l.svcCtx.ArticleRepository.Insert(ctx, c, newArticle) | 187 | newArticle, err = l.svcCtx.ArticleRepository.Insert(ctx, c, newArticle) |
| @@ -392,15 +392,16 @@ type MiniArticleBackupSearchRequest struct { | @@ -392,15 +392,16 @@ type MiniArticleBackupSearchRequest struct { | ||
| 392 | } | 392 | } |
| 393 | 393 | ||
| 394 | type MiniArticleBackupSearchResponse struct { | 394 | type MiniArticleBackupSearchResponse struct { |
| 395 | - Total int `json:"total"` | 395 | + Total int64 `json:"total"` |
| 396 | List []MiniArticleBackupItem `json:"list"` | 396 | List []MiniArticleBackupItem `json:"list"` |
| 397 | } | 397 | } |
| 398 | 398 | ||
| 399 | type MiniArticleBackupItem struct { | 399 | type MiniArticleBackupItem struct { |
| 400 | - Id int `json:"id"` | 400 | + Id int64 `json:"id"` |
| 401 | + Title string `json:"title"` | ||
| 401 | Content string `json:"content"` | 402 | Content string `json:"content"` |
| 402 | Images []string `json:"images"` | 403 | Images []string `json:"images"` |
| 403 | - CreatedAt int `json:"createdAt"` | 404 | + CreatedAt int64 `json:"createdAt"` |
| 404 | Location Location `json:"location"` | 405 | Location Location `json:"location"` |
| 405 | } | 406 | } |
| 406 | 407 |
| @@ -30,6 +30,7 @@ type Article struct { | @@ -30,6 +30,7 @@ type Article struct { | ||
| 30 | CountComment int // 评论数量 | 30 | CountComment int // 评论数量 |
| 31 | Tags []int64 `gorm:"type:jsonb;serializer:json"` //定性标签 | 31 | Tags []int64 `gorm:"type:jsonb;serializer:json"` //定性标签 |
| 32 | Show int // 评论的展示状态(0显示、1不显示) | 32 | Show int // 评论的展示状态(0显示、1不显示) |
| 33 | + Summary string // 内容概要 | ||
| 33 | } | 34 | } |
| 34 | 35 | ||
| 35 | func (m *Article) TableName() string { | 36 | func (m *Article) TableName() string { |
| @@ -17,7 +17,8 @@ type ArticleBackup struct { | @@ -17,7 +17,8 @@ type ArticleBackup struct { | ||
| 17 | DeletedAt int64 | 17 | DeletedAt int64 |
| 18 | IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` | 18 | IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` |
| 19 | Version int | 19 | Version int |
| 20 | - Operator domain.UserSimple `gorm:"type:jsonb;serializer:json"` // 操作人 | 20 | + Operator domain.UserSimple `gorm:"type:jsonb;serializer:json"` // 操作人 |
| 21 | + ArticleId int64 | ||
| 21 | Title string // 标题 | 22 | Title string // 标题 |
| 22 | Section []domain.ArticleSection `gorm:"type:jsonb;serializer:json"` // 分段内容 | 23 | Section []domain.ArticleSection `gorm:"type:jsonb;serializer:json"` // 分段内容 |
| 23 | Images []domain.Image `gorm:"type:jsonb;serializer:json"` // 图片 | 24 | Images []domain.Image `gorm:"type:jsonb;serializer:json"` // 图片 |
| @@ -25,6 +26,7 @@ type ArticleBackup struct { | @@ -25,6 +26,7 @@ type ArticleBackup struct { | ||
| 25 | WhoRead []int64 `gorm:"type:jsonb;serializer:json"` // 谁可以看 | 26 | WhoRead []int64 `gorm:"type:jsonb;serializer:json"` // 谁可以看 |
| 26 | WhoReview []int64 `gorm:"type:jsonb;serializer:json"` // 评论人 | 27 | WhoReview []int64 `gorm:"type:jsonb;serializer:json"` // 评论人 |
| 27 | Tags []int64 `gorm:"type:jsonb;serializer:json"` // 标签 | 28 | Tags []int64 `gorm:"type:jsonb;serializer:json"` // 标签 |
| 29 | + Location domain.Location `gorm:"type:jsonb;serializer:json"` // 坐标 | ||
| 28 | TargetUser int // 分发方式 0 分发给所有人 1 分发给指定的人 | 30 | TargetUser int // 分发方式 0 分发给所有人 1 分发给指定的人 |
| 29 | } | 31 | } |
| 30 | 32 |
| @@ -149,14 +149,16 @@ func (repository *ArticleBackupRepository) ModelToDomainModel(from *models.Artic | @@ -149,14 +149,16 @@ func (repository *ArticleBackupRepository) ModelToDomainModel(from *models.Artic | ||
| 149 | DeletedAt: from.DeletedAt, | 149 | DeletedAt: from.DeletedAt, |
| 150 | Version: from.Version, | 150 | Version: from.Version, |
| 151 | Operator: from.Operator, | 151 | Operator: from.Operator, |
| 152 | + ArticleId: from.ArticleId, | ||
| 152 | Title: from.Title, | 153 | Title: from.Title, |
| 153 | Section: from.Section, | 154 | Section: from.Section, |
| 154 | Images: from.Images, | 155 | Images: from.Images, |
| 155 | Action: from.Action, | 156 | Action: from.Action, |
| 157 | + TargetUser: domain.ArticleTarget(from.TargetUser), | ||
| 158 | + Location: from.Location, | ||
| 156 | WhoRead: from.WhoRead, | 159 | WhoRead: from.WhoRead, |
| 157 | WhoReview: from.WhoReview, | 160 | WhoReview: from.WhoReview, |
| 158 | Tags: from.Tags, | 161 | Tags: from.Tags, |
| 159 | - TargetUser: domain.ArticleTarget(from.TargetUser), | ||
| 160 | } | 162 | } |
| 161 | // err := copier.Copy(to, from) | 163 | // err := copier.Copy(to, from) |
| 162 | return to, nil | 164 | return to, nil |
| @@ -169,14 +171,17 @@ func (repository *ArticleBackupRepository) DomainModelToModel(from *domain.Artic | @@ -169,14 +171,17 @@ func (repository *ArticleBackupRepository) DomainModelToModel(from *domain.Artic | ||
| 169 | CreatedAt: from.CreatedAt, | 171 | CreatedAt: from.CreatedAt, |
| 170 | UpdatedAt: from.CreatedAt, | 172 | UpdatedAt: from.CreatedAt, |
| 171 | DeletedAt: from.DeletedAt, | 173 | DeletedAt: from.DeletedAt, |
| 174 | + IsDel: 0, | ||
| 172 | Version: from.Version, | 175 | Version: from.Version, |
| 173 | Operator: from.Operator, | 176 | Operator: from.Operator, |
| 177 | + ArticleId: from.ArticleId, | ||
| 174 | Title: from.Title, | 178 | Title: from.Title, |
| 175 | Section: from.Section, | 179 | Section: from.Section, |
| 176 | Images: from.Images, | 180 | Images: from.Images, |
| 177 | Action: from.Action, | 181 | Action: from.Action, |
| 178 | WhoRead: from.WhoRead, | 182 | WhoRead: from.WhoRead, |
| 179 | WhoReview: from.WhoReview, | 183 | WhoReview: from.WhoReview, |
| 184 | + Location: from.Location, | ||
| 180 | Tags: from.Tags, | 185 | Tags: from.Tags, |
| 181 | TargetUser: int(from.TargetUser), | 186 | TargetUser: int(from.TargetUser), |
| 182 | } | 187 | } |
| @@ -169,6 +169,7 @@ func (repository *ArticleRepository) ModelToDomainModel(from *models.Article) (* | @@ -169,6 +169,7 @@ func (repository *ArticleRepository) ModelToDomainModel(from *models.Article) (* | ||
| 169 | CountRead: from.CountRead, | 169 | CountRead: from.CountRead, |
| 170 | Show: domain.ArticleShow(from.Show), | 170 | Show: domain.ArticleShow(from.Show), |
| 171 | Tags: from.Tags, | 171 | Tags: from.Tags, |
| 172 | + Summary: from.Summary, | ||
| 172 | } | 173 | } |
| 173 | return to, nil | 174 | return to, nil |
| 174 | } | 175 | } |
| @@ -195,6 +196,7 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (* | @@ -195,6 +196,7 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (* | ||
| 195 | CountComment: from.CountComment, | 196 | CountComment: from.CountComment, |
| 196 | Show: int(from.Show), | 197 | Show: int(from.Show), |
| 197 | Tags: from.Tags, | 198 | Tags: from.Tags, |
| 199 | + Summary: from.Summary, | ||
| 198 | } | 200 | } |
| 199 | // err := copier.Copy(to, from) | 201 | // err := copier.Copy(to, from) |
| 200 | return to, nil | 202 | return to, nil |
| @@ -27,6 +27,7 @@ type Article struct { | @@ -27,6 +27,7 @@ type Article struct { | ||
| 27 | CountRead int `json:"countRead"` // 浏览数量 | 27 | CountRead int `json:"countRead"` // 浏览数量 |
| 28 | Show ArticleShow `json:"show"` // 评论的展示状态(0显示、1不显示) | 28 | Show ArticleShow `json:"show"` // 评论的展示状态(0显示、1不显示) |
| 29 | Tags []int64 `json:"tags"` // 定性标签 | 29 | Tags []int64 `json:"tags"` // 定性标签 |
| 30 | + Summary string `json:"summary"` // 内容概要 | ||
| 30 | // ...more | 31 | // ...more |
| 31 | } | 32 | } |
| 32 | 33 | ||
| @@ -87,6 +88,7 @@ func (m *Article) MakeBackup(operator UserSimple, section []ArticleSection) *Art | @@ -87,6 +88,7 @@ func (m *Article) MakeBackup(operator UserSimple, section []ArticleSection) *Art | ||
| 87 | DeletedAt: 0, | 88 | DeletedAt: 0, |
| 88 | Version: 0, | 89 | Version: 0, |
| 89 | Operator: operator, | 90 | Operator: operator, |
| 91 | + ArticleId: m.Id, | ||
| 90 | Title: m.Title, | 92 | Title: m.Title, |
| 91 | Section: section, | 93 | Section: section, |
| 92 | Images: m.Images, | 94 | Images: m.Images, |
| @@ -14,12 +14,14 @@ type ArticleBackup struct { | @@ -14,12 +14,14 @@ type ArticleBackup struct { | ||
| 14 | UpdatedAt int64 `json:"updatedAt,omitempty"` | 14 | UpdatedAt int64 `json:"updatedAt,omitempty"` |
| 15 | DeletedAt int64 `json:"deletedAt,omitempty"` | 15 | DeletedAt int64 `json:"deletedAt,omitempty"` |
| 16 | Version int `json:"version,omitempty"` | 16 | Version int `json:"version,omitempty"` |
| 17 | - Operator UserSimple `json:"operator"` // 操作人 | 17 | + Operator UserSimple `json:"operator"` // 操作人 |
| 18 | + ArticleId int64 `json:"articleId"` | ||
| 18 | Title string `json:"title"` // 标题 | 19 | Title string `json:"title"` // 标题 |
| 19 | Section []ArticleSection `json:"section"` // 分段内容 | 20 | Section []ArticleSection `json:"section"` // 分段内容 |
| 20 | Images []Image `json:"images"` // 图片 | 21 | Images []Image `json:"images"` // 图片 |
| 21 | Action string `json:"action"` // 操作 | 22 | Action string `json:"action"` // 操作 |
| 22 | TargetUser ArticleTarget `json:"targetUser"` // 分发方式 0 分发给所有人 1 分发给指定的人 | 23 | TargetUser ArticleTarget `json:"targetUser"` // 分发方式 0 分发给所有人 1 分发给指定的人 |
| 24 | + Location Location `json:"location"` // 定位坐标 | ||
| 23 | WhoRead []int64 `json:"whoRead"` // 谁可以看 | 25 | WhoRead []int64 `json:"whoRead"` // 谁可以看 |
| 24 | WhoReview []int64 `json:"whoReview"` // 评论人 | 26 | WhoReview []int64 `json:"whoReview"` // 评论人 |
| 25 | Tags []int64 `json:"tags"` // 标签 | 27 | Tags []int64 `json:"tags"` // 标签 |
-
请 注册 或 登录 后发表评论