feat: Enhance Swagger documentation with new admin and user endpoints
Some checks failed
build quyun / Build (push) Failing after 2m1s
Some checks failed
build quyun / Build (push) Failing after 2m1s
- Added definitions for admin authentication, media, posts, orders, and user management. - Implemented new API paths for admin functionalities including authentication, media management, order processing, and user statistics. - Updated existing endpoints to improve clarity and structure in the Swagger documentation. - Introduced new response schemas for various operations to standardize API responses.
This commit is contained in:
@@ -22,6 +22,12 @@ type TokenResponse struct {
|
|||||||
|
|
||||||
// Login
|
// Login
|
||||||
//
|
//
|
||||||
|
// @Summary 管理员登录
|
||||||
|
// @Tags Admin Auth
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param body body AuthBody true "请求体"
|
||||||
|
// @Success 200 {object} TokenResponse "成功"
|
||||||
// @Router /admin/auth [post]
|
// @Router /admin/auth [post]
|
||||||
// @Bind body body
|
// @Bind body body
|
||||||
func (ctl *auth) Login(ctx fiber.Ctx, body *AuthBody) (*TokenResponse, error) {
|
func (ctl *auth) Login(ctx fiber.Ctx, body *AuthBody) (*TokenResponse, error) {
|
||||||
|
|||||||
@@ -17,6 +17,12 @@ type medias struct {
|
|||||||
|
|
||||||
// List medias
|
// List medias
|
||||||
//
|
//
|
||||||
|
// @Summary 媒体列表
|
||||||
|
// @Tags Admin Medias
|
||||||
|
// @Produce json
|
||||||
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
|
// @Param query query ListQuery false "筛选条件"
|
||||||
|
// @Success 200 {object} requests.Pager{items=models.Media} "成功"
|
||||||
// @Router /admin/medias [get]
|
// @Router /admin/medias [get]
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
@@ -26,6 +32,10 @@ func (ctl *medias) List(ctx fiber.Ctx, pagination *requests.Pagination, query *L
|
|||||||
|
|
||||||
// Show media
|
// Show media
|
||||||
//
|
//
|
||||||
|
// @Summary 媒体预览(跳转到签名 URL)
|
||||||
|
// @Tags Admin Medias
|
||||||
|
// @Param id path int64 true "媒体 ID"
|
||||||
|
// @Success 302 {string} string "跳转"
|
||||||
// @Router /admin/medias/:id [get]
|
// @Router /admin/medias/:id [get]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
func (ctl *medias) Show(ctx fiber.Ctx, id int64) error {
|
func (ctl *medias) Show(ctx fiber.Ctx, id int64) error {
|
||||||
@@ -44,6 +54,11 @@ func (ctl *medias) Show(ctx fiber.Ctx, id int64) error {
|
|||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
//
|
//
|
||||||
|
// @Summary 删除媒体
|
||||||
|
// @Tags Admin Medias
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "媒体 ID"
|
||||||
|
// @Success 204 {object} any "成功"
|
||||||
// @Router /admin/medias/:id [delete]
|
// @Router /admin/medias/:id [delete]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
func (ctl *medias) Delete(ctx fiber.Ctx, id int64) error {
|
func (ctl *medias) Delete(ctx fiber.Ctx, id int64) error {
|
||||||
|
|||||||
@@ -26,6 +26,12 @@ type orders struct {
|
|||||||
|
|
||||||
// List users
|
// List users
|
||||||
//
|
//
|
||||||
|
// @Summary 订单列表
|
||||||
|
// @Tags Admin Orders
|
||||||
|
// @Produce json
|
||||||
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
|
// @Param query query OrderListQuery false "筛选条件"
|
||||||
|
// @Success 200 {object} requests.Pager{items=services.OrderListItem} "成功"
|
||||||
// @Router /admin/orders [get]
|
// @Router /admin/orders [get]
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
@@ -47,6 +53,12 @@ func (ctl *orders) List(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Refund
|
// Refund
|
||||||
|
//
|
||||||
|
// @Summary 订单退款
|
||||||
|
// @Tags Admin Orders
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "订单 ID"
|
||||||
|
// @Success 200 {object} any "成功"
|
||||||
// @Router /admin/orders/:id/refund [post]
|
// @Router /admin/orders/:id/refund [post]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
func (ctl *orders) Refund(ctx fiber.Ctx, id int64) error {
|
func (ctl *orders) Refund(ctx fiber.Ctx, id int64) error {
|
||||||
|
|||||||
@@ -21,6 +21,12 @@ type posts struct{}
|
|||||||
|
|
||||||
// List posts
|
// List posts
|
||||||
//
|
//
|
||||||
|
// @Summary 作品列表
|
||||||
|
// @Tags Admin Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
|
// @Param query query ListQuery false "筛选条件"
|
||||||
|
// @Success 200 {object} requests.Pager{items=PostItem} "成功"
|
||||||
// @Router /admin/posts [get]
|
// @Router /admin/posts [get]
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
@@ -69,6 +75,12 @@ type PostForm struct {
|
|||||||
|
|
||||||
// Create
|
// Create
|
||||||
//
|
//
|
||||||
|
// @Summary 创建作品
|
||||||
|
// @Tags Admin Posts
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param form body PostForm true "请求体"
|
||||||
|
// @Success 200 {object} any "成功"
|
||||||
// @Router /admin/posts [post]
|
// @Router /admin/posts [post]
|
||||||
// @Bind form body
|
// @Bind form body
|
||||||
func (ctl *posts) Create(ctx fiber.Ctx, form *PostForm) error {
|
func (ctl *posts) Create(ctx fiber.Ctx, form *PostForm) error {
|
||||||
@@ -107,6 +119,13 @@ func (ctl *posts) Create(ctx fiber.Ctx, form *PostForm) error {
|
|||||||
|
|
||||||
// Update posts
|
// Update posts
|
||||||
//
|
//
|
||||||
|
// @Summary 更新作品
|
||||||
|
// @Tags Admin Posts
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "作品 ID"
|
||||||
|
// @Param form body PostForm true "请求体"
|
||||||
|
// @Success 200 {object} any "成功"
|
||||||
// @Router /admin/posts/:id [put]
|
// @Router /admin/posts/:id [put]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
// @Bind form body
|
// @Bind form body
|
||||||
@@ -147,6 +166,11 @@ func (ctl *posts) Update(ctx fiber.Ctx, id int64, form *PostForm) error {
|
|||||||
|
|
||||||
// Delete posts
|
// Delete posts
|
||||||
//
|
//
|
||||||
|
// @Summary 删除作品
|
||||||
|
// @Tags Admin Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "作品 ID"
|
||||||
|
// @Success 204 {object} any "成功"
|
||||||
// @Router /admin/posts/:id [delete]
|
// @Router /admin/posts/:id [delete]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
func (ctl *posts) Delete(ctx fiber.Ctx, id int64) error {
|
func (ctl *posts) Delete(ctx fiber.Ctx, id int64) error {
|
||||||
@@ -172,6 +196,11 @@ type PostItem struct {
|
|||||||
|
|
||||||
// Show posts by id
|
// Show posts by id
|
||||||
//
|
//
|
||||||
|
// @Summary 作品详情
|
||||||
|
// @Tags Admin Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "作品 ID"
|
||||||
|
// @Success 200 {object} PostItem "成功"
|
||||||
// @Router /admin/posts/:id [get]
|
// @Router /admin/posts/:id [get]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
func (ctl *posts) Show(ctx fiber.Ctx, id int64) (*PostItem, error) {
|
func (ctl *posts) Show(ctx fiber.Ctx, id int64) (*PostItem, error) {
|
||||||
@@ -194,6 +223,12 @@ func (ctl *posts) Show(ctx fiber.Ctx, id int64) (*PostItem, error) {
|
|||||||
|
|
||||||
// SendTo
|
// SendTo
|
||||||
//
|
//
|
||||||
|
// @Summary 赠送作品给用户
|
||||||
|
// @Tags Admin Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "作品 ID"
|
||||||
|
// @Param userId path int64 true "用户 ID"
|
||||||
|
// @Success 200 {object} any "成功"
|
||||||
// @Router /admin/posts/:id/send-to/:userId [post]
|
// @Router /admin/posts/:id/send-to/:userId [post]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
// @Bind userId path
|
// @Bind userId path
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ type StatisticsResponse struct {
|
|||||||
|
|
||||||
// dashboard statistics
|
// dashboard statistics
|
||||||
//
|
//
|
||||||
|
// @Summary 仪表盘统计
|
||||||
|
// @Tags Admin Statistics
|
||||||
|
// @Produce json
|
||||||
|
// @Success 200 {object} StatisticsResponse "成功"
|
||||||
// @Router /admin/statistics [get]
|
// @Router /admin/statistics [get]
|
||||||
func (s *statistics) statistics(ctx fiber.Ctx) (*StatisticsResponse, error) {
|
func (s *statistics) statistics(ctx fiber.Ctx) (*StatisticsResponse, error) {
|
||||||
statistics := &StatisticsResponse{}
|
statistics := &StatisticsResponse{}
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ type PreCheckResp struct {
|
|||||||
|
|
||||||
// PreUploadCheck
|
// PreUploadCheck
|
||||||
//
|
//
|
||||||
|
// @Summary 预上传检查
|
||||||
|
// @Tags Admin Uploads
|
||||||
|
// @Produce json
|
||||||
|
// @Param md5 path string true "文件 MD5"
|
||||||
|
// @Param ext path string true "文件扩展名(不含点)"
|
||||||
|
// @Param mime query string true "文件 MIME 类型"
|
||||||
|
// @Success 200 {object} PreCheckResp "成功"
|
||||||
// @Router /admin/uploads/pre-uploaded-check/:md5.:ext [get]
|
// @Router /admin/uploads/pre-uploaded-check/:md5.:ext [get]
|
||||||
// @Bind md5 path
|
// @Bind md5 path
|
||||||
// @Bind ext path
|
// @Bind ext path
|
||||||
@@ -61,6 +68,12 @@ type PostUploadedForm struct {
|
|||||||
|
|
||||||
// PostUploadedAction
|
// PostUploadedAction
|
||||||
//
|
//
|
||||||
|
// @Summary 上传完成回调处理
|
||||||
|
// @Tags Admin Uploads
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param body body PostUploadedForm true "请求体"
|
||||||
|
// @Success 200 {object} any "成功"
|
||||||
// @Router /admin/uploads/post-uploaded-action [post]
|
// @Router /admin/uploads/post-uploaded-action [post]
|
||||||
// @Bind body body
|
// @Bind body body
|
||||||
func (up *uploads) PostUploadedAction(ctx fiber.Ctx, body *PostUploadedForm) error {
|
func (up *uploads) PostUploadedAction(ctx fiber.Ctx, body *PostUploadedForm) error {
|
||||||
|
|||||||
@@ -19,6 +19,12 @@ type users struct{}
|
|||||||
|
|
||||||
// List users
|
// List users
|
||||||
//
|
//
|
||||||
|
// @Summary 用户列表
|
||||||
|
// @Tags Admin Users
|
||||||
|
// @Produce json
|
||||||
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
|
// @Param query query UserListQuery false "筛选条件"
|
||||||
|
// @Success 200 {object} requests.Pager{items=models.User} "成功"
|
||||||
// @Router /admin/users [get]
|
// @Router /admin/users [get]
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
@@ -31,6 +37,11 @@ func (ctl *users) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Us
|
|||||||
|
|
||||||
// Show user
|
// Show user
|
||||||
//
|
//
|
||||||
|
// @Summary 用户详情
|
||||||
|
// @Tags Admin Users
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "用户 ID"
|
||||||
|
// @Success 200 {object} models.User "成功"
|
||||||
// @Router /admin/users/:id [get]
|
// @Router /admin/users/:id [get]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
func (ctl *users) Show(ctx fiber.Ctx, id int64) (*models.User, error) {
|
func (ctl *users) Show(ctx fiber.Ctx, id int64) (*models.User, error) {
|
||||||
@@ -39,6 +50,12 @@ func (ctl *users) Show(ctx fiber.Ctx, id int64) (*models.User, error) {
|
|||||||
|
|
||||||
// Articles show user bought articles
|
// Articles show user bought articles
|
||||||
//
|
//
|
||||||
|
// @Summary 用户已购作品
|
||||||
|
// @Tags Admin Users
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "用户 ID"
|
||||||
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
|
// @Success 200 {object} requests.Pager{items=models.Post} "成功"
|
||||||
// @Router /admin/users/:id/articles [get]
|
// @Router /admin/users/:id/articles [get]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
@@ -52,6 +69,13 @@ type UserBalance struct {
|
|||||||
|
|
||||||
// Balance
|
// Balance
|
||||||
//
|
//
|
||||||
|
// @Summary 调整用户余额
|
||||||
|
// @Tags Admin Users
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "用户 ID"
|
||||||
|
// @Param balance body UserBalance true "请求体"
|
||||||
|
// @Success 200 {object} any "成功"
|
||||||
// @Router /admin/users/:id/balance [post]
|
// @Router /admin/users/:id/balance [post]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
// @Bind balance body
|
// @Bind balance body
|
||||||
|
|||||||
@@ -38,6 +38,12 @@ type posts struct {
|
|||||||
|
|
||||||
// List posts
|
// List posts
|
||||||
//
|
//
|
||||||
|
// @Summary 作品列表
|
||||||
|
// @Tags Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
|
// @Param query query ListQuery false "筛选条件"
|
||||||
|
// @Success 200 {object} requests.Pager{items=PostItem} "成功"
|
||||||
// @Router /posts [get]
|
// @Router /posts [get]
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
@@ -123,6 +129,11 @@ type PostItem struct {
|
|||||||
|
|
||||||
// Show
|
// Show
|
||||||
//
|
//
|
||||||
|
// @Summary 作品详情
|
||||||
|
// @Tags Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "作品 ID"
|
||||||
|
// @Success 200 {object} PostItem "成功"
|
||||||
// @Router /posts/:id/show [get]
|
// @Router /posts/:id/show [get]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
// @Bind user local
|
// @Bind user local
|
||||||
@@ -179,6 +190,11 @@ type PlayUrl struct {
|
|||||||
|
|
||||||
// Play
|
// Play
|
||||||
//
|
//
|
||||||
|
// @Summary 获取播放地址
|
||||||
|
// @Tags Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "作品 ID"
|
||||||
|
// @Success 200 {object} PlayUrl "成功"
|
||||||
// @Router /posts/:id/play [get]
|
// @Router /posts/:id/play [get]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
// @Bind user local
|
// @Bind user local
|
||||||
@@ -230,6 +246,12 @@ func (ctl *posts) Play(ctx fiber.Ctx, id int64, user *models.User) (*PlayUrl, er
|
|||||||
|
|
||||||
// Mine posts
|
// Mine posts
|
||||||
//
|
//
|
||||||
|
// @Summary 我的已购作品
|
||||||
|
// @Tags Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param pagination query requests.Pagination false "分页参数"
|
||||||
|
// @Param query query ListQuery false "筛选条件"
|
||||||
|
// @Success 200 {object} requests.Pager{items=PostItem} "成功"
|
||||||
// @Router /posts/mine [get]
|
// @Router /posts/mine [get]
|
||||||
// @Bind pagination query
|
// @Bind pagination query
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
@@ -292,6 +314,11 @@ func (ctl *posts) Mine(
|
|||||||
|
|
||||||
// Buy
|
// Buy
|
||||||
//
|
//
|
||||||
|
// @Summary 购买作品
|
||||||
|
// @Tags Posts
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int64 true "作品 ID"
|
||||||
|
// @Success 200 {object} wechat.JSAPIPayParams "成功(余额支付返回 AppId=balance)"
|
||||||
// @Router /posts/:id/buy [post]
|
// @Router /posts/:id/buy [post]
|
||||||
// @Bind id path
|
// @Bind id path
|
||||||
// @Bind user local
|
// @Bind user local
|
||||||
|
|||||||
@@ -21,6 +21,12 @@ type UserInfo struct {
|
|||||||
Balance int64 `json:"balance"`
|
Balance int64 `json:"balance"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Profile 获取当前登录用户的基础信息。
|
||||||
|
//
|
||||||
|
// @Summary 获取个人信息
|
||||||
|
// @Tags Users
|
||||||
|
// @Produce json
|
||||||
|
// @Success 200 {object} UserInfo "成功"
|
||||||
// @Router /users/profile [get]
|
// @Router /users/profile [get]
|
||||||
// @Bind user local
|
// @Bind user local
|
||||||
func (ctl *users) Profile(ctx fiber.Ctx, user *models.User) (*UserInfo, error) {
|
func (ctl *users) Profile(ctx fiber.Ctx, user *models.User) (*UserInfo, error) {
|
||||||
@@ -37,8 +43,14 @@ type ProfileForm struct {
|
|||||||
Username string `json:"username" validate:"required"`
|
Username string `json:"username" validate:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update
|
// Update 修改当前登录用户的用户名。
|
||||||
//
|
//
|
||||||
|
// @Summary 修改用户名
|
||||||
|
// @Tags Users
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param form body ProfileForm true "请求体"
|
||||||
|
// @Success 200 {object} any "成功"
|
||||||
// @Router /users/username [put]
|
// @Router /users/username [put]
|
||||||
// @Bind user local
|
// @Bind user local
|
||||||
// @Bind form body
|
// @Bind form body
|
||||||
|
|||||||
@@ -30,18 +30,20 @@ type Filter struct {
|
|||||||
|
|
||||||
type ResponseItem struct{}
|
type ResponseItem struct{}
|
||||||
|
|
||||||
// Foo
|
// Foo 演示端点:展示 Fiber 参数绑定与 Swagger 注释写法。
|
||||||
//
|
//
|
||||||
// @Summary Test
|
// @Summary 演示接口
|
||||||
// @Description Test
|
// @Tags Demo
|
||||||
// @Tags Test
|
// @Accept multipart/form-data
|
||||||
// @Accept json
|
|
||||||
// @Produce json
|
// @Produce json
|
||||||
//
|
//
|
||||||
// @Param id path int true "ID"
|
// @Param id path int true "ID"
|
||||||
// @Param query query Filter true "Filter"
|
// @Param pager query requests.Pagination false "分页参数"
|
||||||
// @Param pager query requests.Pagination true "Pager"
|
// @Param query query FooQuery false "查询参数"
|
||||||
// @Success 200 {object} requests.Pager{list=ResponseItem} "成功"
|
// @Param Content-Type header string false "内容类型"
|
||||||
|
// @Param folder formData string false "上传到指定文件夹"
|
||||||
|
// @Param file formData file true "上传文件"
|
||||||
|
// @Success 200 {object} requests.Pager{items=ResponseItem} "成功"
|
||||||
//
|
//
|
||||||
// @Router /v1/medias/:id [post]
|
// @Router /v1/medias/:id [post]
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
|
|||||||
@@ -14,6 +14,13 @@ import (
|
|||||||
"go.ipao.vip/gen/types"
|
"go.ipao.vip/gen/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// OrderListItem 用于订单列表展示,补充作品标题与用户名等冗余信息,避免前端二次查询。
|
||||||
|
type OrderListItem struct {
|
||||||
|
*models.Order
|
||||||
|
PostTitle string `json:"post_title"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
}
|
||||||
|
|
||||||
// @provider
|
// @provider
|
||||||
type orders struct{}
|
type orders struct{}
|
||||||
|
|
||||||
@@ -51,15 +58,8 @@ func (m *orders) List(
|
|||||||
postMap := lo.SliceToMap(posts, func(p *models.Post) (int64, *models.Post) { return p.ID, p })
|
postMap := lo.SliceToMap(posts, func(p *models.Post) (int64, *models.Post) { return p.ID, p })
|
||||||
userMap := lo.SliceToMap(users, func(u *models.User) (int64, *models.User) { return u.ID, u })
|
userMap := lo.SliceToMap(users, func(u *models.User) (int64, *models.User) { return u.ID, u })
|
||||||
|
|
||||||
// OrderListItem 用于订单列表展示,补充作品标题与用户名等冗余信息,避免前端二次查询。
|
items := lo.Map(orders, func(o *models.Order, _ int) *OrderListItem {
|
||||||
type orderListItem struct {
|
item := &OrderListItem{Order: o}
|
||||||
*models.Order
|
|
||||||
PostTitle string `json:"post_title"`
|
|
||||||
Username string `json:"username"`
|
|
||||||
}
|
|
||||||
|
|
||||||
items := lo.Map(orders, func(o *models.Order, _ int) *orderListItem {
|
|
||||||
item := &orderListItem{Order: o}
|
|
||||||
if post, ok := postMap[o.PostID]; ok {
|
if post, ok := postMap[o.PostID]; ok {
|
||||||
item.PostTitle = post.Title
|
item.PostTitle = post.Title
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user