74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
package bot
|
|
|
|
import (
|
|
"strings"
|
|
"sync"
|
|
|
|
storagemodel "github.com/tech/sendico/gateway/tgsettle/storage/model"
|
|
)
|
|
|
|
type DialogState string
|
|
|
|
const (
|
|
DialogStateWaitingAmount DialogState = "waiting_amount"
|
|
DialogStateWaitingConfirmation DialogState = "waiting_confirmation"
|
|
)
|
|
|
|
type DialogSession struct {
|
|
State DialogState
|
|
OperationType storagemodel.TreasuryOperationType
|
|
LedgerAccountID string
|
|
RequestID string
|
|
}
|
|
|
|
type Dialogs struct {
|
|
mu sync.Mutex
|
|
sessions map[string]DialogSession
|
|
}
|
|
|
|
func NewDialogs() *Dialogs {
|
|
return &Dialogs{
|
|
sessions: map[string]DialogSession{},
|
|
}
|
|
}
|
|
|
|
func (d *Dialogs) Get(telegramUserID string) (DialogSession, bool) {
|
|
if d == nil {
|
|
return DialogSession{}, false
|
|
}
|
|
telegramUserID = strings.TrimSpace(telegramUserID)
|
|
if telegramUserID == "" {
|
|
return DialogSession{}, false
|
|
}
|
|
d.mu.Lock()
|
|
defer d.mu.Unlock()
|
|
session, ok := d.sessions[telegramUserID]
|
|
return session, ok
|
|
}
|
|
|
|
func (d *Dialogs) Set(telegramUserID string, session DialogSession) {
|
|
if d == nil {
|
|
return
|
|
}
|
|
telegramUserID = strings.TrimSpace(telegramUserID)
|
|
if telegramUserID == "" {
|
|
return
|
|
}
|
|
d.mu.Lock()
|
|
defer d.mu.Unlock()
|
|
d.sessions[telegramUserID] = session
|
|
}
|
|
|
|
func (d *Dialogs) Clear(telegramUserID string) {
|
|
if d == nil {
|
|
return
|
|
}
|
|
telegramUserID = strings.TrimSpace(telegramUserID)
|
|
if telegramUserID == "" {
|
|
return
|
|
}
|
|
d.mu.Lock()
|
|
defer d.mu.Unlock()
|
|
delete(d.sessions, telegramUserID)
|
|
}
|