65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"juwan-backend/app/chat/rpc/internal/svc"
|
|
"juwan-backend/app/chat/rpc/pb"
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type AddChatSessionsLogic struct {
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
logx.Logger
|
|
}
|
|
|
|
func NewAddChatSessionsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddChatSessionsLogic {
|
|
return &AddChatSessionsLogic{
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
Logger: logx.WithContext(ctx),
|
|
}
|
|
}
|
|
|
|
func (l *AddChatSessionsLogic) AddChatSessions(in *pb.AddChatSessionsReq) (*pb.AddChatSessionsResp, error) {
|
|
if in.GetType() == "" {
|
|
return nil, errors.New("type is required")
|
|
}
|
|
if in.GetCreatorId() <= 0 {
|
|
return nil, errors.New("creatorId is required")
|
|
}
|
|
|
|
store := l.svcCtx.Store
|
|
store.Mu.Lock()
|
|
defer store.Mu.Unlock()
|
|
|
|
now := nowUnix(0)
|
|
participants := append([]int64(nil), in.GetParticipants()...)
|
|
hasCreator := false
|
|
for _, p := range participants {
|
|
if p == in.GetCreatorId() {
|
|
hasCreator = true
|
|
break
|
|
}
|
|
}
|
|
if !hasCreator {
|
|
participants = append(participants, in.GetCreatorId())
|
|
}
|
|
|
|
session := &pb.ChatSessions{
|
|
Id: store.NextSession(),
|
|
Type: in.GetType(),
|
|
Name: in.GetName(),
|
|
CreatorId: in.GetCreatorId(),
|
|
Participants: participants,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
}
|
|
store.Sessions[session.Id] = session
|
|
|
|
return &pb.AddChatSessionsResp{Id: session.Id}, nil
|
|
}
|