feat: new proto

This commit is contained in:
王性驊 2025-03-06 19:16:09 +08:00
parent efff638ab5
commit 35b850d53d
5 changed files with 18 additions and 7 deletions

View File

@ -14,6 +14,7 @@ type Comments struct {
ParentCommentID string `bson:"parent_comment_id"` // 父留言 id沒有就空白 ParentCommentID string `bson:"parent_comment_id"` // 父留言 id沒有就空白
Message string `bson:"message"` // 留言內容 Message string `bson:"message"` // 留言內容
Level comment.Level `bson:"level"` // 等級,數字較小的為上層 Level comment.Level `bson:"level"` // 等級,數字較小的為上層
IsVisitable bool `bson:"is_visitable"` // 是否隱藏
UpdatedAt int64 `bson:"updated_at"` // 更新時間 UpdatedAt int64 `bson:"updated_at"` // 更新時間
CreatedAt int64 `bson:"created_at"` // 建立時間 CreatedAt int64 `bson:"created_at"` // 建立時間
} }

View File

@ -10,7 +10,7 @@ import (
type CommentRepository interface { type CommentRepository interface {
CreateComment(ctx context.Context, comment *entity.Comments) error // 新增留言 // 根據 ID 獲取單條留言 CreateComment(ctx context.Context, comment *entity.Comments) error // 新增留言 // 根據 ID 獲取單條留言
DeleteCommentByID(ctx context.Context, id string) error // 根據 ID 刪除留言 // 刪除某留言的所有子留言 DeleteCommentByID(ctx context.Context, id string) error // 根據 ID 刪除留言 // 刪除某留言的所有子留言
UpdateCommentMessage(ctx context.Context, id string, message string) error // 更新留言內容 UpdateCommentMessage(ctx context.Context, id string, message string, isVisitable bool) error // 更新留言內容
ListComments(ctx context.Context, req ListCommentRequest) ([]*entity.Comments, int64, error) // 分頁列出留言 ListComments(ctx context.Context, req ListCommentRequest) ([]*entity.Comments, int64, error) // 分頁列出留言
} }
@ -20,4 +20,5 @@ type ListCommentRequest struct {
ReferenceID *string ReferenceID *string
ParentID *string ParentID *string
Level comment.Level Level comment.Level
IsVisitable *bool
} }

View File

@ -14,7 +14,7 @@ type CommentUseCase interface {
// RemoveCommentItem 移除 CommentItem 列表 // RemoveCommentItem 移除 CommentItem 列表
RemoveCommentItem(ctx context.Context, id string) error RemoveCommentItem(ctx context.Context, id string) error
// UpdateCommentMessage 更新 // UpdateCommentMessage 更新
UpdateCommentMessage(ctx context.Context, id string, message string) error UpdateCommentMessage(ctx context.Context, id string, message string, isVisitable bool) error
} }
type CreateCommentDocs struct { type CreateCommentDocs struct {
@ -22,6 +22,7 @@ type CreateCommentDocs struct {
ReferenceID string `bson:"reference_id"` // 參考的 id ex product_id or product_item_id 之類的 ReferenceID string `bson:"reference_id"` // 參考的 id ex product_id or product_item_id 之類的
ParentCommentID string `bson:"parent_comment_id"` // 父留言 id 沒有就空白 ParentCommentID string `bson:"parent_comment_id"` // 父留言 id 沒有就空白
Message string `bson:"message"` // 留言內容 Message string `bson:"message"` // 留言內容
IsVisitable bool `bson:"is_visitable"` // 是否可見
} }
type CommentDocs struct { type CommentDocs struct {
@ -41,4 +42,5 @@ type ListCommentRequest struct {
ReferenceID *string ReferenceID *string
ParentID *string ParentID *string
IsSub bool IsSub bool
IsVisitable *bool
} }

View File

@ -72,7 +72,7 @@ func (repo *CommentRepository) DeleteCommentByID(ctx context.Context, id string)
return err return err
} }
func (repo *CommentRepository) UpdateCommentMessage(ctx context.Context, id string, message string) error { func (repo *CommentRepository) UpdateCommentMessage(ctx context.Context, id string, message string, isVisitable bool) error {
// 驗證 ObjectID 是否有效 // 驗證 ObjectID 是否有效
oid, err := primitive.ObjectIDFromHex(id) oid, err := primitive.ObjectIDFromHex(id)
if err != nil { if err != nil {
@ -81,8 +81,9 @@ func (repo *CommentRepository) UpdateCommentMessage(ctx context.Context, id stri
// 初始化更新字段 // 初始化更新字段
updates := bson.M{ updates := bson.M{
"message": message, // 更新留言內容 "message": message, // 更新留言內容
"updated_at": time.Now().UTC().UnixNano(), // 更新時間 "is_visitable": isVisitable,
"updated_at": time.Now().UTC().UnixNano(), // 更新時間
} }
// 查詢條件:根據 _id 查詢 // 查詢條件:根據 _id 查詢
@ -120,6 +121,10 @@ func (repo *CommentRepository) ListComments(ctx context.Context, req repository.
filter["reference_id"] = req.ReferenceID filter["reference_id"] = req.ReferenceID
} }
if req.IsVisitable != nil {
filter["is_visitable"] = req.IsVisitable
}
// 設置排序選項 // 設置排序選項
opts := options.Find().SetSkip((req.PageIndex - 1) * req.PageSize).SetLimit(req.PageSize) opts := options.Find().SetSkip((req.PageIndex - 1) * req.PageSize).SetLimit(req.PageSize)
opts.SetSort(bson.D{{Key: "created_at", Value: -1}}) opts.SetSort(bson.D{{Key: "created_at", Value: -1}})

View File

@ -37,6 +37,7 @@ func (use *CommentUseCase) CreateCommentItem(ctx context.Context, info usecase.C
UID: info.UID, UID: info.UID,
ReferenceID: info.ReferenceID, ReferenceID: info.ReferenceID,
Level: comment.TopLevelComment, Level: comment.TopLevelComment,
IsVisitable: true,
} }
snappyContent := snappy.Encode(nil, []byte(info.Message)) snappyContent := snappy.Encode(nil, []byte(info.Message))
insert.Message = base64.StdEncoding.EncodeToString(snappyContent) insert.Message = base64.StdEncoding.EncodeToString(snappyContent)
@ -97,8 +98,8 @@ func (use *CommentUseCase) GetCommentItem(ctx context.Context, id string) (*usec
}, nil }, nil
} }
func (use *CommentUseCase) UpdateCommentMessage(ctx context.Context, id string, message string) error { func (use *CommentUseCase) UpdateCommentMessage(ctx context.Context, id string, message string, isVisitable bool) error {
err := use.Comment.UpdateCommentMessage(ctx, id, message) err := use.Comment.UpdateCommentMessage(ctx, id, message, isVisitable)
if err != nil { if err != nil {
return errs.DatabaseErrorWithScopeL( return errs.DatabaseErrorWithScopeL(
code.CloudEPComment, code.CloudEPComment,
@ -141,6 +142,7 @@ func (use *CommentUseCase) ListComment(ctx context.Context, req usecase.ListComm
PageSize: req.PageSize, PageSize: req.PageSize,
PageIndex: req.PageIndex, PageIndex: req.PageIndex,
ReferenceID: req.ReferenceID, ReferenceID: req.ReferenceID,
IsVisitable: req.IsVisitable,
}) })
if err != nil { if err != nil {
return nil, 0, errs.DatabaseErrorWithScopeL( return nil, 0, errs.DatabaseErrorWithScopeL(