板块创建成功

This commit is contained in:
2026-02-05 22:03:29 +08:00
parent c8315469b2
commit 8fc1f675ff
10 changed files with 240 additions and 58 deletions

View File

@@ -2,7 +2,15 @@ package Forum
import (
v1 "TrangleAgent/api/forum/v1"
"TrangleAgent/internal/dao"
"TrangleAgent/internal/model"
"TrangleAgent/internal/model/entity"
"TrangleAgent/internal/model/response"
"TrangleAgent/internal/service"
"context"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/os/gtime"
)
type sForumBoards struct{}
@@ -11,21 +19,146 @@ func NewForumBoards() *sForumBoards {
return &sForumBoards{}
}
func init() {
service.RegisterForumBoards(NewForumBoards())
}
func (s *sForumBoards) Create(ctx context.Context, req *v1.ForumBoardsCreateReq) (res *v1.ForumBoardsCreateRes, err error) {
return nil, nil
// 校验参数
if req.Name == "" {
return nil, gerror.New("版块名称不能为空")
}
// 创建版块
insert := entity.ForumBoards{
SectionId: req.SectionId,
Name: req.Name,
Description: req.Description,
CoverImage: req.CoverImage,
Status: req.Status,
DisplayOrder: req.DisplayOrder,
CreatedAt: gtime.Now(),
UpdatedAt: gtime.Now(),
}
// 如果 Status 为空,默认为 normal
if insert.Status == "" {
insert.Status = "normal"
}
result, err := dao.ForumBoards.Ctx(ctx).Data(insert).Insert()
if err != nil {
return nil, gerror.Wrap(err, "创建版块失败")
}
id, err := result.LastInsertId()
if err != nil {
return nil, gerror.Wrap(err, "获取版块ID失败")
}
return &v1.ForumBoardsCreateRes{Id: uint64(id)}, nil
}
func (s *sForumBoards) Update(ctx context.Context, req *v1.ForumBoardsUpdateReq) (res *v1.ForumBoardsUpdateRes, err error) {
return nil, nil
if req.Id == 0 {
return nil, gerror.New("版块ID不能为空")
}
// 只能修改部分字段
data := entity.ForumBoards{
Id: req.Id,
SectionId: req.SectionId,
Name: req.Name,
Description: req.Description,
CoverImage: req.CoverImage,
Status: req.Status,
DisplayOrder: req.DisplayOrder,
UpdatedAt: gtime.Now(),
}
_, err = dao.ForumBoards.Ctx(ctx).Data(data).OmitEmpty().Where(dao.ForumBoards.Columns().Id, req.Id).Update()
if err != nil {
return nil, gerror.Wrap(err, "更新版块失败")
}
return &v1.ForumBoardsUpdateRes{Id: req.Id}, nil
}
func (s *sForumBoards) Delete(ctx context.Context, req *v1.ForumBoardsDeleteReq) (res *v1.ForumBoardsDeleteRes, err error) {
return nil, nil
if req.Id == 0 {
return nil, gerror.New("版块ID不能为空")
}
// 物理删除
_, err = dao.ForumBoards.Ctx(ctx).Where(dao.ForumBoards.Columns().Id, req.Id).Delete()
if err != nil {
return nil, gerror.Wrap(err, "删除版块失败")
}
return &v1.ForumBoardsDeleteRes{}, nil
}
func (s *sForumBoards) View(ctx context.Context, req *v1.ForumBoardsViewReq) (res *v1.ForumBoardsViewRes, err error) {
return nil, nil
if req.Id == 0 {
return nil, gerror.New("版块ID不能为空")
}
var board model.ForumBoardViewParams
err = dao.ForumBoards.Ctx(ctx).Where(dao.ForumBoards.Columns().Id, req.Id).Scan(&board)
if err != nil {
return nil, gerror.Wrap(err, "查询版块失败")
}
return &v1.ForumBoardsViewRes{
ForumBoardViewParams: board,
}, nil
}
func (s *sForumBoards) List(ctx context.Context, req *v1.ForumBoardsListReq) (res *v1.ForumBoardsListRes, err error) {
return nil, nil
m := dao.ForumBoards.Ctx(ctx)
if req.SectionId != 0 {
m = m.Where(dao.ForumBoards.Columns().SectionId, req.SectionId)
}
if req.Name != "" {
m = m.WhereLike(dao.ForumBoards.Columns().Name, "%"+req.Name+"%")
}
if req.Status != "" {
m = m.Where(dao.ForumBoards.Columns().Status, req.Status)
}
// 默认按 DisplayOrder 降序Id 升序
m = m.OrderDesc(dao.ForumBoards.Columns().DisplayOrder).OrderAsc(dao.ForumBoards.Columns().Id)
// 分页
total, err := m.Count()
if err != nil {
return nil, gerror.Wrap(err, "获取版块总数失败")
}
var list []*model.ForumBoardViewParams
page := req.Page
if page <= 0 {
page = 1
}
size := req.PageSize
if size <= 0 {
size = 10
}
err = m.Page(page, size).Scan(&list)
if err != nil {
return nil, gerror.Wrap(err, "查询版块列表失败")
}
return &v1.ForumBoardsListRes{
PageResult: response.PageResult{
Total: total,
Page: page,
PageSize: size,
},
List: list,
}, nil
}

View File

@@ -4,6 +4,8 @@ import (
v1 "TrangleAgent/api/forum/v1"
"TrangleAgent/internal/dao"
"TrangleAgent/internal/model"
"TrangleAgent/internal/model/entity"
"TrangleAgent/internal/model/response"
"TrangleAgent/internal/service"
"context"
@@ -36,7 +38,7 @@ func (s *sForumPosts) Create(ctx context.Context, req *v1.ForumPostsCreateReq) (
}
//创建帖子
insert := model.ForumPost{
insert := entity.ForumPosts{
BoardId: req.BoardId,
UserId: req.UserId,
Title: req.Title,
@@ -46,6 +48,11 @@ func (s *sForumPosts) Create(ctx context.Context, req *v1.ForumPostsCreateReq) (
CreatedAt: gtime.Now(),
UpdatedAt: gtime.Now(),
}
if insert.Status == "" {
insert.Status = "normal"
}
result, err := dao.ForumPosts.Ctx(ctx).Data(insert).Insert()
if err != nil {
return nil, gerror.Wrap(err, "创建帖子失败")
@@ -69,14 +76,14 @@ func (s *sForumPosts) Update(ctx context.Context, req *v1.ForumPostsUpdateReq) (
return nil, gerror.New("内容长度要在5-10000之间")
}
//只能修改 帖子标题 帖子正文 帖子封面图URL
fields := []string{"title", "content", "cover_image"}
//更新帖子
_, err = dao.ForumPosts.Ctx(ctx).Data(model.ForumPost{
_, err = dao.ForumPosts.Ctx(ctx).Data(entity.ForumPosts{
Id: req.Id,
Title: req.Title,
Content: req.Content,
CoverImage: req.CoverImage,
}).Fields(fields).OmitEmpty().Update()
UpdatedAt: gtime.Now(),
}).Fields("title", "content", "cover_image", "updated_at").OmitEmpty().Update()
if err != nil {
return nil, gerror.Wrap(err, "更新帖子失败")
}
@@ -116,12 +123,48 @@ func (s *sForumPosts) List(ctx context.Context, req *v1.ForumPostsListReq) (res
if req.BoardId != 0 {
mod = mod.Where(dao.ForumPosts.Columns().BoardId, req.BoardId)
}
if req.UserId != 0 {
mod = mod.Where(dao.ForumPosts.Columns().UserId, req.UserId)
}
if req.Status != "" {
mod = mod.Where(dao.ForumPosts.Columns().Status, req.Status)
}
if req.IsPinned != 0 {
mod = mod.Where(dao.ForumPosts.Columns().IsPinned, req.IsPinned)
}
if req.IsEssence != 0 {
mod = mod.Where(dao.ForumPosts.Columns().IsEssence, req.IsEssence)
}
// 排序:优先置顶,然后按创建时间倒序
mod = mod.OrderDesc(dao.ForumPosts.Columns().IsPinned).OrderDesc(dao.ForumPosts.Columns().CreatedAt)
// 分页
page := req.Page
if page <= 0 {
page = 1
}
size := req.PageSize
if size <= 0 {
size = 10
}
total, err := mod.Count()
if err != nil {
return nil, gerror.Wrap(err, "获取帖子总数失败")
}
var list []*model.ForumPostViewParams
err = mod.Scan(&list)
err = mod.Page(page, size).Scan(&list)
if err != nil {
return nil, gerror.Wrap(err, "查询帖子列表失败")
}
return &v1.ForumPostsListRes{
PageResult: response.PageResult{
Total: total,
Page: page,
PageSize: size,
},
List: list,
}, nil
}