26 lines
1.1 KiB
Go
26 lines
1.1 KiB
Go
package store
|
||
|
||
import (
|
||
"context"
|
||
|
||
"telesrv/internal/domain"
|
||
)
|
||
|
||
// UpdateEventStore 持久化 user 维度的增量事件。
|
||
type UpdateEventStore interface {
|
||
Append(ctx context.Context, userID int64, event domain.UpdateEvent) error
|
||
ListAfter(ctx context.Context, userID int64, pts, limit int) ([]domain.UpdateEvent, error)
|
||
Current(ctx context.Context, userID int64) (int, error)
|
||
// MaxContiguousPts 返回从 1 起无空洞的最大已提交 pts。
|
||
// 并发发送在途时(pts 已分配未提交)会暂时小于 Current(最大已提交),空洞提交/补洞后回升。
|
||
// getState/getDifference 据此只暴露连续 pts,避免客户端跳过在途空洞而丢消息。
|
||
MaxContiguousPts(ctx context.Context, userID int64) (int, error)
|
||
// AdvanceContiguousPts 推进并返回账号级连续 pts 水位。实现应在写事件的同一事务内调用。
|
||
AdvanceContiguousPts(ctx context.Context, userID int64) (int, error)
|
||
}
|
||
|
||
// EventCursor 精确定位单条账号事件,用于 outbox worker 批量加载已 claim 事件。
|
||
type EventCursor struct {
|
||
UserID int64
|
||
Pts int
|
||
}
|