mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
2701-есть флоу для оператора и красивый список накладных
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
package telegram
|
||||
|
||||
import "sync"
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// Состояния пользователя
|
||||
type State int
|
||||
@@ -13,16 +17,32 @@ const (
|
||||
StateAddServerConfirmName
|
||||
StateAddServerInputName
|
||||
StateBillingGiftURL
|
||||
|
||||
// Состояния редактора черновиков (начиная с 100)
|
||||
StateDraftEditItemName State = 100 // Ожидание ввода нового названия позиции
|
||||
StateDraftEditItemQty State = 101 // Ожидание ввода количества
|
||||
StateDraftEditItemPrice State = 102 // Ожидание ввода цены
|
||||
)
|
||||
|
||||
// UserContext хранит временные данные в процессе диалога
|
||||
type UserContext struct {
|
||||
State State
|
||||
TempURL string
|
||||
TempLogin string
|
||||
TempPassword string
|
||||
TempServerName string
|
||||
State State
|
||||
|
||||
// Поля для добавления сервера
|
||||
TempURL string
|
||||
TempLogin string
|
||||
TempPassword string
|
||||
TempServerName string
|
||||
|
||||
// Поля для биллинга
|
||||
BillingTargetURL string
|
||||
|
||||
// Поля редактора черновиков
|
||||
EditingDraftID uuid.UUID // ID редактируемого черновика
|
||||
EditingItemID uuid.UUID // ID редактируемой позиции (DraftInvoiceItem)
|
||||
EditingItemIndex int // Порядковый номер позиции (1-based, для отображения пользователю)
|
||||
DraftMenuMsgID int // ID сообщения со списком позиций (для обновления через EditMessage)
|
||||
DraftCurrentPage int // Текущая страница пагинации (0-based)
|
||||
}
|
||||
|
||||
// StateManager управляет состояниями
|
||||
@@ -80,3 +100,36 @@ func (sm *StateManager) Reset(userID int64) {
|
||||
defer sm.mu.Unlock()
|
||||
delete(sm.states, userID)
|
||||
}
|
||||
|
||||
// ResetDraftEditor сбрасывает только поля редактора черновика
|
||||
func (sm *StateManager) ResetDraftEditor(userID int64) {
|
||||
sm.mu.Lock()
|
||||
defer sm.mu.Unlock()
|
||||
|
||||
if ctx, ok := sm.states[userID]; ok {
|
||||
ctx.State = StateNone
|
||||
ctx.EditingDraftID = uuid.Nil
|
||||
ctx.EditingItemID = uuid.Nil
|
||||
ctx.EditingItemIndex = 0
|
||||
ctx.DraftMenuMsgID = 0
|
||||
ctx.DraftCurrentPage = 0
|
||||
}
|
||||
}
|
||||
|
||||
// InitDraftEditor инициализирует FSM для редактора черновика
|
||||
func (sm *StateManager) InitDraftEditor(userID int64, draftID uuid.UUID) {
|
||||
sm.mu.Lock()
|
||||
defer sm.mu.Unlock()
|
||||
|
||||
if _, ok := sm.states[userID]; !ok {
|
||||
sm.states[userID] = &UserContext{}
|
||||
}
|
||||
|
||||
ctx := sm.states[userID]
|
||||
ctx.State = StateNone
|
||||
ctx.EditingDraftID = draftID
|
||||
ctx.EditingItemID = uuid.Nil
|
||||
ctx.EditingItemIndex = 0
|
||||
ctx.DraftMenuMsgID = 0
|
||||
ctx.DraftCurrentPage = 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user