feat: company names in screener + universe enrichment
- migration 0010: universe.company_name column - SaveUniverse persists company names; new CompanyNames() store lookup - scheduler universe sweep + universe-sweep cmd fetch names via one Screen() call (best effort) - /api/screen now returns real company names (live when keyed, stored as fallback) - Screener card shows 'PT Bank ...' name under the ticker symbol for search results
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
package scheduler
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
@@ -283,10 +284,21 @@ func (s *Scheduler) universe(ctx context.Context) error {
|
||||
raw, _ := json.Marshal(all)
|
||||
_ = s.DB.SaveSnapshot("IDX", date, "close", string(raw))
|
||||
// Persist the universe ticker list so AllTickers() can return the full
|
||||
// IDX set instead of only tickers that have depth data yet.
|
||||
// IDX set instead of only tickers that have depth data yet. Company names
|
||||
// ride along (one extra screener call — best effort, skipped on failure)
|
||||
// so the screener search can show "PT Bank Central Asia Tbk" not "BBCA".
|
||||
names := map[string]string{}
|
||||
if rows, err := s.Sectors.Screen(ctx, "", "", 1000, 0); err == nil {
|
||||
for _, row := range rows {
|
||||
if row.CompanyName != "" {
|
||||
names[strings.ToUpper(strings.TrimSuffix(row.Symbol, ".JK"))] = row.CompanyName
|
||||
}
|
||||
}
|
||||
}
|
||||
uni := make([]store.UniverseRow, 0, len(all))
|
||||
for _, r := range all {
|
||||
uni = append(uni, store.UniverseRow{Symbol: r.Symbol, Close: r.Close, Date: r.Date})
|
||||
tk := strings.ToUpper(strings.TrimSuffix(r.Symbol, ".JK"))
|
||||
uni = append(uni, store.UniverseRow{Symbol: tk, Close: r.Close, Date: r.Date, CompanyName: names[tk]})
|
||||
}
|
||||
if err := s.DB.SaveUniverse(uni); err != nil {
|
||||
log.Printf("scheduler: universe save: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user