feat: state is now scoped by both user id and chat id

This commit is contained in:
abelith committed 2026-10-07 15:01:18 +03:00
1 parent 4b94fcb920
commit ec12f29fdb
3 files changed
+31 -23

No files matched your search

+19 -5
View File
@@ -19,6 +19,11 @@ type EventIsolation struct {
ttl time.Duration
}
type fsmKey struct {
userID int64
chatID int64
}
type eventIsolationKey struct {
userID int
chatID int
@@ -34,8 +39,11 @@ func NewFSMStorage() *FSMStorage {
return &FSMStorage{}
}
func (f *FSMStorage) Get(_ context.Context, userID int) (state.Snapshot, error) {
st, ok := f.m.Load(userID)
func (f *FSMStorage) Get(_ context.Context, scope isolation.Scope) (state.Snapshot, error) {
st, ok := f.m.Load(fsmKey{
userID: scope.UserID,
chatID: scope.ChatID,
})
if !ok {
return state.Snapshot{}, state.ErrStateNotFound
}
@@ -44,12 +52,18 @@ func (f *FSMStorage) Get(_ context.Context, userID int) (state.Snapshot, error)
}
func (f *FSMStorage) Put(_ context.Context, snapshot state.Snapshot) error {
f.m.Store(snapshot.ID, snapshot)
f.m.Store(fsmKey{
userID: snapshot.Scope.UserID,
chatID: snapshot.Scope.ChatID,
}, snapshot)
return nil
}
func (f *FSMStorage) Delete(_ context.Context, userID int) error {
f.m.Delete(userID)
func (f *FSMStorage) Delete(_ context.Context, scope isolation.Scope) error {
f.m.Delete(fsmKey{
userID: scope.UserID,
chatID: scope.ChatID,
})
return nil
}