spark-server/internal/module/message/logic/send_persist.go
2026-09-18 14:50:41 +08:00

46 lines
1016 B
Go

package logic
import (
"context"
"errors"
"time"
"spark-server/internal/infrastructure/id"
"spark-server/internal/module/message/entity"
"spark-server/internal/pkg/errs"
)
func (s *Service) assignID(requested int64, now time.Time, msg *entity.Message) error {
if requested > 0 {
if !id.WithinSkew(requested, now, msgIDSkew) {
return errs.ErrInvalidArgument
}
msg.ID = requested
return nil
}
nid, err := s.ids.NextID()
if err != nil {
return err
}
msg.ID = nid
return nil
}
func (s *Service) persistSend(ctx context.Context, msg *entity.Message) (*entity.Message, bool, error) {
err := s.repo.CreateAndBump(ctx, msg)
if err == nil {
return msg, false, nil
}
if !errors.Is(err, errs.ErrDuplicate) {
return nil, false, err
}
existing, lookErr := s.repo.GetByClientMsgID(ctx, msg.SenderID, msg.ConversationID, msg.ClientMsgID)
if lookErr != nil {
existing, lookErr = s.repo.GetByID(ctx, msg.ID)
}
if lookErr != nil {
return nil, false, err
}
return existing, true, nil
}