package oracle import ( "sync" ) // Store mantém os últimos dados válidos dos oráculos e um pequeno histórico type Store struct { mu sync.RWMutex latest map[string]*OracleData history map[string][]*OracleData maxHist int } // NewStore cria uma nova instância de armazenamento de oráculos func NewStore(maxHistory int) *Store { return &Store{ latest: make(map[string]*OracleData), history: make(map[string][]*OracleData), maxHist: maxHistory, } } // Save registra um novo dado e atualiza o histórico func (s *Store) Save(data *OracleData) { s.mu.Lock() defer s.mu.Unlock() s.latest[data.Key] = data s.history[data.Key] = append(s.history[data.Key], data) if len(s.history[data.Key]) > s.maxHist { s.history[data.Key] = s.history[data.Key][len(s.history[data.Key])-s.maxHist:] } } // Get retorna o último dado registrado func (s *Store) Get(key string) *OracleData { s.mu.RLock() defer s.mu.RUnlock() return s.latest[key] } // History retorna o histórico completo de um dado func (s *Store) History(key string) []*OracleData { s.mu.RLock() defer s.mu.RUnlock() return s.history[key] }