88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
// 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
|
||
}
|