30 lines
866 B
Go
30 lines
866 B
Go
package agent
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
rvboxv1 "github.com/rvbox/rvbox/gen/go/rvbox/v1"
|
|
"github.com/rvbox/rvbox/internal/domain"
|
|
)
|
|
|
|
var ErrInvalidEventAck = errors.New("invalid event acknowledgement")
|
|
|
|
type EventAckStore interface {
|
|
Ack(context.Context, domain.UUID, uint64) error
|
|
}
|
|
|
|
// ApplyEventAck releases only the cumulative, server-confirmed event prefix.
|
|
// The spool remains the source of truth if the process stops before this call
|
|
// returns; a repeated acknowledgement is intentionally harmless.
|
|
func ApplyEventAck(ctx context.Context, store EventAckStore, ack *rvboxv1.EventAck) error {
|
|
if store == nil || ack == nil || ack.GetThroughEventSeq() == 0 {
|
|
return ErrInvalidEventAck
|
|
}
|
|
issue, err := domain.ParseUUIDv7(ack.GetIssueUuid())
|
|
if err != nil {
|
|
return ErrInvalidEventAck
|
|
}
|
|
return store.Ack(ctx, issue, ack.GetThroughEventSeq())
|
|
}
|