Files
hldrCenter/server/internal/meeting/internal/logic/meeting/createmeetinglogic.go
2025-10-28 15:57:36 +08:00

88 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package meeting
import (
"context"
"database/sql"
"errors"
"time"
"github.com/JACKYMYPERSON/hldrCenter/config"
"github.com/JACKYMYPERSON/hldrCenter/internal/meeting/internal/model"
"github.com/JACKYMYPERSON/hldrCenter/internal/meeting/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateMeetingLogic struct {
logx.Logger
ctx context.Context
cfg *config.Config
model model.MeetingModel
}
func NewCreateMeetingLogic(ctx context.Context, cfg *config.Config, model model.MeetingModel) *CreateMeetingLogic {
return &CreateMeetingLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
cfg: cfg,
model: model,
}
}
func (l *CreateMeetingLogic) CreateMeeting(req *types.CreateMeetingReq) (resp *types.CreateMeetingResp, err error) {
// 1. 业务校验:验证时间格式及合理性
// 1.1 解析开始时间(前端传入格式应为 "2006-01-02 15:04:05"
startTime, err := time.Parse("2006-01-02 15:04:05", req.StartTime)
if err != nil {
return nil, errors.New("开始时间格式错误请使用YYYY-MM-DD HH:MM:SS")
}
// 1.2 解析结束时间
endTime, err := time.Parse("2006-01-02 15:04:05", req.EndTime)
if err != nil {
return nil, errors.New("结束时间格式错误请使用YYYY-MM-DD HH:MM:SS")
}
// 1.3 校验结束时间不能早于开始时间
if endTime.Before(startTime) {
return nil, errors.New("结束时间不能早于开始时间")
}
meeting := &model.Meeting{
Theme: req.Theme, // 非空字段,直接赋值
Subtitle: req.Subtitle, // 可空字段,空字符串会被数据库处理为 NULL如果表允许
Intro: sql.NullString{
String: req.Intro, // 赋值实际字符串
Valid: req.Intro != "", // 若不为空字符串,则设为有效(存实际值);若为空,则设为无效(存 NULL
},
CoverUrl: req.CoverUrl,
ScheduleImageUrl: req.ScheduleImageUrl,
StartTime: startTime,
EndTime: endTime,
IsDelete: 0, // 软删除默认未删除
}
// 3. 调用model插入数据库
result, err := l.model.Insert(l.ctx, meeting)
if err != nil {
l.Logger.Errorf("创建会议失败:%v", err)
return nil, errors.New("创建会议失败,请重试")
}
// 4. 获取新增会议的ID通过LastInsertId()
meetingId, err := result.LastInsertId()
if err != nil {
l.Logger.Errorf("获取会议ID失败%v", err)
return nil, errors.New("创建会议成功但获取ID失败")
}
// 5. 构造响应
return &types.CreateMeetingResp{
Msg: "会议创建成功",
MeetingId: meetingId, // 返回新增会议的主键ID
}, nil
}