Files
zmkgC/api/app/visual_remark/service.go
2025-07-07 20:11:59 +08:00

116 lines
4.0 KiB
Go

package visual_remark
import (
"context"
"errors"
"github.com/gogf/gf/v2/frame/g"
"github.com/tiger1103/gfast/v3/api/v1/system"
ct "github.com/tiger1103/gfast/v3/internal/app/system/logic/context"
"github.com/tiger1103/gfast/v3/internal/app/system/service"
)
// 列表请求
func (v VisualRemark) ListRemarks(ctx context.Context, req *ListRemarksReq) (res *ListRemarksRes, err error) {
res = &ListRemarksRes{}
err = g.Model("visual_progress_remark AS remark").Ctx(ctx).
Fields("remark.*,visual.title AS visualProgressTitle, user.user_nickname AS Username, cuser.head_icon AS Avatar").
// 连表查询形象进度表得到形象进度标题
LeftJoin("visual_progress AS visual", "visual.id = remark.visual_progress_id").
// 连表查询评论人的名字(暂未确定是哪张用户表,需要联查)
LeftJoin("sys_user AS user on user.id = remark.user_id").
// 头像需要从另外一张表查询出来
LeftJoin("bus_construction_user AS cuser on cuser.phone = user.mobile").
Where("visual.id = ? AND cuser.deleted_at is null", req.VisualID).
Scan(&res.VisualProgressRemarks)
g.Dump(res.VisualProgressRemarks)
if err != nil {
return nil, err
}
return res, nil
}
// 获取详情
func (v VisualRemark) GetRemarkDetail(ctx context.Context, req *GetRemarkDetailReq) (res *GetRemarkDetailRes, err error) {
res = &GetRemarkDetailRes{}
err = g.Model("visual_progress_remark AS remark").Ctx(ctx).
Fields("remark.*,visual.title AS visualProgressTitle, user.user_nickname AS Username, user.avatar AS Avatar").
// 连表查询形象进度表得到形象进度标题
LeftJoin("visual_progress AS visual on visual.id = remark.visual_progress_id").
// 连表查询评论人的名字
LeftJoin("sys_user AS user on user.id = remark.user_id").
Where("remark.id = ? AND cuser.deleted_at is null", req.ID).
Scan(&res.VisualProgressRemark)
if err != nil {
return nil, err
}
return res, nil
}
// 新增形象进度
func (v VisualRemark) CreateRemark(ctx context.Context, req *CreateRemarkReq) (res *CreateRemarkRes, err error) {
res = &CreateRemarkRes{}
_, err = g.Model("visual_progress_remark").Ctx(ctx).Data(g.Map{
"visual_progress_id": req.VisualProgressID,
"comment": req.Comment,
"user_id": req.UserID,
}).Insert()
if err != nil {
return nil, err
}
var VisualProgressVo struct {
ProjectId int `json:"projectId"`
ReporterId int `json:"reporterId"`
}
// 根据形象进度ID查询项目ID、发布者ID
g.Model("visual_progress").Fields("project_id AS ProjectId", "reporter_id AS ReporterId").
Where("id", req.VisualProgressID).Scan(&VisualProgressVo)
// 新增之后通知对应的发起人
param := &system.CommentListAddReq{
ProjectId: VisualProgressVo.ProjectId,
Receiver: VisualProgressVo.ReporterId,
Content: req.Comment,
Sender: req.UserID,
}
service.CommentList().Add(ctx, param)
return res, nil
}
// 更新形象备注
func (v VisualRemark) UpdateRemark(ctx context.Context, req *UpdateRemarkReq) (res *UpdateRemarkRes, err error) {
res = &UpdateRemarkRes{}
_, err = g.Model("visual_progress_remark").Ctx(ctx).Data(g.Map{
"visual_progress_id": req.VisualProgressID,
"comment": req.Comment,
"user_id": req.UserID,
}).Where("id", req.ID).Update()
if err != nil {
return nil, err
}
return res, nil
}
// 删除形象备注
func (v VisualRemark) DeleteRemark(ctx context.Context, req *DeleteRemarkReq) (res *DeleteRemarkRes, err error) {
userID := ct.New().GetUserId(ctx)
var VisualProgressRemarkVo struct {
ID int `json:"id"`
UserID uint64 `json:"userId"`
}
g.Model("visual_progress_remark").Ctx(ctx).Where("id", req.ID).Scan(&VisualProgressRemarkVo)
// 当前用户等于评论的发起人才可以删除自己的评论
if userID == VisualProgressRemarkVo.UserID {
res = &DeleteRemarkRes{}
_, err = g.Model("visual_progress_remark").Ctx(ctx).Where("id", req.ID).Delete()
if err != nil {
return nil, err
}
} else {
return nil, errors.New("只能删除自己的评论信息")
}
return
}