正在显示
6 个修改的文件
包含
134 行增加
和
32 行删除
| @@ -22,6 +22,7 @@ type Author { | @@ -22,6 +22,7 @@ type Author { | ||
| 22 | Avatar string `json:"avatar"` // 人员头像URL | 22 | Avatar string `json:"avatar"` // 人员头像URL |
| 23 | Group string `json:"group"` // 人员的分组 | 23 | Group string `json:"group"` // 人员的分组 |
| 24 | Position string `json:"position"` // 职位 | 24 | Position string `json:"position"` // 职位 |
| 25 | + Company string `json:"company"` // 公司 | ||
| 25 | } | 26 | } |
| 26 | 27 | ||
| 27 | //小程序端创建发布文章 | 28 | //小程序端创建发布文章 |
| @@ -43,21 +44,30 @@ type ( | @@ -43,21 +44,30 @@ type ( | ||
| 43 | //小程序端查看文章的详情 | 44 | //小程序端查看文章的详情 |
| 44 | type ( | 45 | type ( |
| 45 | MiniArticleGetRequest { | 46 | MiniArticleGetRequest { |
| 46 | - Id int64 `path:"id"` //id | 47 | + Id int64 `path:"id"` //id |
| 48 | + CompanyId int64 `path:"-"` | ||
| 47 | } | 49 | } |
| 48 | MiniArticleGetResponse { | 50 | MiniArticleGetResponse { |
| 49 | - Title string `json:"title"` //标题 | ||
| 50 | - AuthorId int `json:"authorId"` //发布人id | ||
| 51 | - Author Author `json:"author"` //发布人 | ||
| 52 | - CreatedAt int64 `json:"createdAt"` //文章的发布时间 | ||
| 53 | - Section []string `json:"section"` //文章的文本内容 | ||
| 54 | - Images []string `json:"images"` //图片 | ||
| 55 | - WhoRead []int64 `json:"whoRead"` //谁可查看 | ||
| 56 | - WhoReview []int64 `json:"whoReview"` //谁可评论 | ||
| 57 | - Location Location `json:"location"` //定位坐标 | ||
| 58 | - CountLove int `json:"countLove"` // 点赞数量 | ||
| 59 | - CountComment int `json:"countComment"` // 评论数量 | ||
| 60 | - Show int `json:"showState"` // 评论的展示状态(0显示、1不显示) | 51 | + Id int64 `json:"id"` //id |
| 52 | + Title string `json:"title"` //标题 | ||
| 53 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 54 | + Author Author `json:"author"` //发布人 | ||
| 55 | + CreatedAt int64 `json:"createdAt"` //文章的发布时间 | ||
| 56 | + Section []ArticleSection `json:"section"` //文章的文本内容 | ||
| 57 | + Images []string `json:"images"` //图片 | ||
| 58 | + WhoRead []int64 `json:"whoRead"` //谁可查看 | ||
| 59 | + WhoReview []int64 `json:"whoReview"` //谁可评论 | ||
| 60 | + Location Location `json:"location"` //定位坐标 | ||
| 61 | + CountLove int `json:"countLove"` // 点赞数量 | ||
| 62 | + CountComment int `json:"countComment"` // 评论数量 | ||
| 63 | + CountRead int `json:"countRead"` // 浏览数量 | ||
| 64 | + Show int `json:"show"` // 评论的展示状态(0显示、1不显示) | ||
| 65 | + } | ||
| 66 | + ArticleSection { | ||
| 67 | + Id int64 `json:"id"` //段落id | ||
| 68 | + Content string `json:"content"` // 文本内容 | ||
| 69 | + SortBy int `json:"sortBy"` // 排序 | ||
| 70 | + TotalComment int `json:"totalComment"` // 评论的数量 | ||
| 61 | } | 71 | } |
| 62 | ) | 72 | ) |
| 63 | 73 |
| @@ -7,6 +7,7 @@ import ( | @@ -7,6 +7,7 @@ import ( | ||
| 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" |
| 8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | 8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" |
| 9 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | 9 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" |
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 10 | ) | 11 | ) |
| 11 | 12 | ||
| 12 | func MiniGetArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | 13 | func MiniGetArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { |
| @@ -18,7 +19,8 @@ func MiniGetArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | @@ -18,7 +19,8 @@ func MiniGetArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 18 | } | 19 | } |
| 19 | 20 | ||
| 20 | l := article.NewMiniGetArticleLogic(r.Context(), svcCtx) | 21 | l := article.NewMiniGetArticleLogic(r.Context(), svcCtx) |
| 21 | - | 22 | + token := contextdata.GetUserTokenFromCtx(r.Context()) |
| 23 | + req.CompanyId = token.CompanyId | ||
| 22 | resp, err := l.MiniGetArticle(&req) | 24 | resp, err := l.MiniGetArticle(&req) |
| 23 | if err != nil { | 25 | if err != nil { |
| 24 | httpx.ErrorCtx(r.Context(), w, err) | 26 | httpx.ErrorCtx(r.Context(), w, err) |
| @@ -46,7 +46,9 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | @@ -46,7 +46,9 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | ||
| 46 | Company: "", | 46 | Company: "", |
| 47 | CompanyId: author.CompanyId, | 47 | CompanyId: author.CompanyId, |
| 48 | } | 48 | } |
| 49 | - | 49 | + if len(req.Images) > 9 { |
| 50 | + return nil, xerr.NewErrMsg("图片数量最多9张") | ||
| 51 | + } | ||
| 50 | //TODO 获取图片的尺寸大小 | 52 | //TODO 获取图片的尺寸大小 |
| 51 | images := []domain.Image{} | 53 | images := []domain.Image{} |
| 52 | for _, val := range req.Images { | 54 | for _, val := range req.Images { |
| @@ -56,6 +58,7 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | @@ -56,6 +58,7 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | ||
| 56 | Height: 0, | 58 | Height: 0, |
| 57 | }) | 59 | }) |
| 58 | } | 60 | } |
| 61 | + | ||
| 59 | //检查文章可被哪些人查看 | 62 | //检查文章可被哪些人查看 |
| 60 | whoRead := []int64{} | 63 | whoRead := []int64{} |
| 61 | if len(req.WhoRead) > 0 { | 64 | if len(req.WhoRead) > 0 { |
| @@ -2,9 +2,12 @@ package article | @@ -2,9 +2,12 @@ package article | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "context" | 4 | "context" |
| 5 | + "sort" | ||
| 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 | ) |
| @@ -24,7 +27,76 @@ func NewMiniGetArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Mi | @@ -24,7 +27,76 @@ func NewMiniGetArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Mi | ||
| 24 | } | 27 | } |
| 25 | 28 | ||
| 26 | func (l *MiniGetArticleLogic) MiniGetArticle(req *types.MiniArticleGetRequest) (resp *types.MiniArticleGetResponse, err error) { | 29 | func (l *MiniGetArticleLogic) MiniGetArticle(req *types.MiniArticleGetRequest) (resp *types.MiniArticleGetResponse, err error) { |
| 27 | - // todo: add your logic here and delete this line | 30 | + // 获取文章内容 |
| 31 | + var conn = l.svcCtx.DefaultDBConn() | ||
| 32 | + | ||
| 33 | + articleInfo, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.Id) | ||
| 34 | + if err != nil { | ||
| 35 | + return nil, xerr.NewErrMsgErr("读取文章内容失败", err) | ||
| 36 | + } | ||
| 37 | + if articleInfo.CompanyId != req.CompanyId { | ||
| 38 | + return nil, xerr.NewErrMsg("没有查看权限") | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + if articleInfo.Show == domain.ArticleShowDisable { | ||
| 42 | + resp = &types.MiniArticleGetResponse{ | ||
| 43 | + Id: articleInfo.Id, | ||
| 44 | + Title: articleInfo.Title, | ||
| 45 | + Show: int(domain.ArticleShowDisable), | ||
| 46 | + } | ||
| 47 | + return resp, nil | ||
| 48 | + } | ||
| 49 | + queryOption := domain.NewQueryOptions(). | ||
| 50 | + WithFindOnly(). | ||
| 51 | + MustWithKV("articleId", articleInfo.Id) | ||
| 52 | + | ||
| 53 | + _, sectionList, err := l.svcCtx.ArticleSectionRepository.Find(l.ctx, conn, queryOption) | ||
| 54 | + if err != nil { | ||
| 55 | + return nil, xerr.NewErrMsgErr("读取文章内容失败", err) | ||
| 56 | + } | ||
| 57 | + sortBy := domain.SortArticleSection(sectionList) | ||
| 58 | + sort.Sort(sortBy) | ||
| 59 | + articleSection := []types.ArticleSection{} | ||
| 60 | + | ||
| 61 | + for _, val := range sortBy { | ||
| 62 | + articleSection = append(articleSection, types.ArticleSection{ | ||
| 63 | + Id: val.Id, | ||
| 64 | + Content: val.Content, | ||
| 65 | + SortBy: val.SortBy, | ||
| 66 | + TotalComment: val.TotalComment, | ||
| 67 | + }) | ||
| 68 | + } | ||
| 69 | + resp = &types.MiniArticleGetResponse{ | ||
| 70 | + Id: articleInfo.Id, | ||
| 71 | + Title: articleInfo.Title, | ||
| 72 | + AuthorId: articleInfo.AuthorId, | ||
| 73 | + Author: types.Author{ | ||
| 74 | + Id: articleInfo.Author.Id, | ||
| 75 | + Name: articleInfo.Author.Name, | ||
| 76 | + Avatar: articleInfo.Author.Avatar, | ||
| 77 | + Group: articleInfo.Author.Group, | ||
| 78 | + Position: articleInfo.Author.Position, | ||
| 79 | + Company: articleInfo.Author.Company, | ||
| 80 | + }, | ||
| 81 | + CreatedAt: articleInfo.CreatedAt, | ||
| 82 | + Section: articleSection, | ||
| 83 | + Images: []string{}, | ||
| 84 | + WhoRead: articleInfo.WhoRead, | ||
| 85 | + WhoReview: articleInfo.WhoReview, | ||
| 86 | + Location: types.Location{ | ||
| 87 | + Longitude: articleInfo.Location.Longitude, | ||
| 88 | + Latitude: articleInfo.Location.Latitude, | ||
| 89 | + Descript: articleInfo.Location.Descript, | ||
| 90 | + }, | ||
| 91 | + CountLove: articleInfo.CountLove, | ||
| 92 | + CountComment: articleInfo.CountComment, | ||
| 93 | + CountRead: articleInfo.CountRead, | ||
| 94 | + Show: int(articleInfo.Show), | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + for _, val := range articleInfo.Images { | ||
| 98 | + resp.Images = append(resp.Images, val.Url) | ||
| 99 | + } | ||
| 28 | 100 | ||
| 29 | return | 101 | return |
| 30 | } | 102 | } |
| @@ -262,6 +262,7 @@ type Author struct { | @@ -262,6 +262,7 @@ type Author struct { | ||
| 262 | Avatar string `json:"avatar"` // 人员头像URL | 262 | Avatar string `json:"avatar"` // 人员头像URL |
| 263 | Group string `json:"group"` // 人员的分组 | 263 | Group string `json:"group"` // 人员的分组 |
| 264 | Position string `json:"position"` // 职位 | 264 | Position string `json:"position"` // 职位 |
| 265 | + Company string `json:"company"` // 公司 | ||
| 265 | } | 266 | } |
| 266 | 267 | ||
| 267 | type MiniArticleCreateRequest struct { | 268 | type MiniArticleCreateRequest struct { |
| @@ -279,29 +280,39 @@ type MiniArticleCreateResponse struct { | @@ -279,29 +280,39 @@ type MiniArticleCreateResponse struct { | ||
| 279 | } | 280 | } |
| 280 | 281 | ||
| 281 | type MiniArticleGetRequest struct { | 282 | type MiniArticleGetRequest struct { |
| 282 | - Id int64 `path:"id"` //id | 283 | + Id int64 `path:"id"` //id |
| 284 | + CompanyId int64 `path:"-"` | ||
| 283 | } | 285 | } |
| 284 | 286 | ||
| 285 | type MiniArticleGetResponse struct { | 287 | type MiniArticleGetResponse struct { |
| 286 | - Title string `json:"title"` //标题 | ||
| 287 | - AuthorId int `json:"authorId"` //发布人id | ||
| 288 | - Author Author `json:"author"` //发布人 | ||
| 289 | - CreatedAt int64 `json:"createdAt"` //文章的发布时间 | ||
| 290 | - Section []string `json:"section"` //文章的文本内容 | ||
| 291 | - Images []string `json:"images"` //图片 | ||
| 292 | - WhoRead []int64 `json:"whoRead"` //谁可查看 | ||
| 293 | - WhoReview []int64 `json:"whoReview"` //谁可评论 | ||
| 294 | - Location Location `json:"location"` //定位坐标 | ||
| 295 | - CountLove int `json:"countLove"` // 点赞数量 | ||
| 296 | - CountComment int `json:"countComment"` // 评论数量 | ||
| 297 | - Show int `json:"showState"` // 评论的展示状态(0显示、1不显示) | 288 | + Id int64 `json:"id"` //id |
| 289 | + Title string `json:"title"` //标题 | ||
| 290 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 291 | + Author Author `json:"author"` //发布人 | ||
| 292 | + CreatedAt int64 `json:"createdAt"` //文章的发布时间 | ||
| 293 | + Section []ArticleSection `json:"section"` //文章的文本内容 | ||
| 294 | + Images []string `json:"images"` //图片 | ||
| 295 | + WhoRead []int64 `json:"whoRead"` //谁可查看 | ||
| 296 | + WhoReview []int64 `json:"whoReview"` //谁可评论 | ||
| 297 | + Location Location `json:"location"` //定位坐标 | ||
| 298 | + CountLove int `json:"countLove"` // 点赞数量 | ||
| 299 | + CountComment int `json:"countComment"` // 评论数量 | ||
| 300 | + CountRead int `json:"countRead"` // 浏览数量 | ||
| 301 | + Show int `json:"show"` // 评论的展示状态(0显示、1不显示) | ||
| 302 | +} | ||
| 303 | + | ||
| 304 | +type ArticleSection struct { | ||
| 305 | + Id int64 `json:"id"` //段落id | ||
| 306 | + Content string `json:"content"` // 文本内容 | ||
| 307 | + SortBy int `json:"sortBy"` // 排序 | ||
| 308 | + TotalComment int `json:"totalComment"` // 评论的数量 | ||
| 298 | } | 309 | } |
| 299 | 310 | ||
| 300 | type MiniArticleSearchMeRequest struct { | 311 | type MiniArticleSearchMeRequest struct { |
| 301 | - AuthorId int64 `json:"-"` | 312 | + AuthorId int64 `json:"-"` |
| 302 | CompanyId int64 `json:"-"` | 313 | CompanyId int64 `json:"-"` |
| 303 | - Page int `json:"page"` | ||
| 304 | - Size int `json:"size"` | 314 | + Page int `json:"page"` |
| 315 | + Size int `json:"size"` | ||
| 305 | } | 316 | } |
| 306 | 317 | ||
| 307 | type MiniArticleSearchMeResponse struct { | 318 | type MiniArticleSearchMeResponse struct { |
| @@ -120,6 +120,10 @@ func (repository *ArticleSectionRepository) Find(ctx context.Context, conn trans | @@ -120,6 +120,10 @@ func (repository *ArticleSectionRepository) Find(ctx context.Context, conn trans | ||
| 120 | ) | 120 | ) |
| 121 | queryFunc := func() (interface{}, error) { | 121 | queryFunc := func() (interface{}, error) { |
| 122 | tx = tx.Model(&ms).Order("id desc") | 122 | tx = tx.Model(&ms).Order("id desc") |
| 123 | + | ||
| 124 | + if v, ok := queryOptions["articleId"]; ok { | ||
| 125 | + tx = tx.Where("article_id = ?", v) | ||
| 126 | + } | ||
| 123 | if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | 127 | if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { |
| 124 | return dms, tx.Error | 128 | return dms, tx.Error |
| 125 | } | 129 | } |
-
请 注册 或 登录 后发表评论