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 }