This commit is contained in:
2026-04-20 21:29:22 +02:00
parent 53dd49612d
commit 89fc0119f3
25 changed files with 3744 additions and 134 deletions
+62 -6
View File
@@ -6,15 +6,24 @@ import (
"net/http"
"git.rouggy.com/rouggy/stockradar/internal/db"
"git.rouggy.com/rouggy/stockradar/internal/edgar"
"git.rouggy.com/rouggy/stockradar/internal/etoro"
"git.rouggy.com/rouggy/stockradar/internal/finnhub"
"git.rouggy.com/rouggy/stockradar/internal/scanner"
"git.rouggy.com/rouggy/stockradar/internal/settings"
"github.com/gorilla/mux"
)
type Server struct {
db *db.DB
port string
router *mux.Router
settings *settings.Settings
db *db.DB
port string
router *mux.Router
settings *settings.Settings
poller *finnhub.Poller
scanner *scanner.Scanner
discovery *scanner.DiscoveryScanner
edgarPoller *edgar.Poller
etoroPoller *etoro.Poller
}
func New(database *db.DB, port string) (*Server, error) {
@@ -29,6 +38,23 @@ func New(database *db.DB, port string) (*Server, error) {
router: mux.NewRouter(),
settings: svc,
}
s.poller = finnhub.NewPoller(database, func() (string, error) {
return svc.Get("finnhub_api_key")
})
s.poller.Start()
s.scanner = scanner.New(database)
s.scanner.Start()
s.discovery = scanner.NewDiscovery(database)
s.edgarPoller = edgar.NewPoller(database)
s.edgarPoller.Start()
s.etoroPoller = etoro.NewPoller(database)
s.etoroPoller.Start()
s.setupRoutes()
return s, nil
}
@@ -51,6 +77,25 @@ func (s *Server) setupRoutes() {
// News
api.HandleFunc("/news", s.handleGetNews).Methods("GET", "OPTIONS")
api.HandleFunc("/news/sync", s.handleNewsSync).Methods("POST", "OPTIONS")
// Scanner / Signals
api.HandleFunc("/signals", s.handleGetSignals).Methods("GET", "OPTIONS")
api.HandleFunc("/signals/scan", s.handleTriggerScan).Methods("POST", "OPTIONS")
api.HandleFunc("/prices", s.handleGetPrices).Methods("GET", "OPTIONS")
// Insider trades (SEC EDGAR)
api.HandleFunc("/insider-trades", s.handleGetInsiderTrades).Methods("GET", "OPTIONS")
api.HandleFunc("/insider-trades/sync", s.handleSyncInsider).Methods("POST", "OPTIONS")
// eToro universe
api.HandleFunc("/etoro/sync", s.handleSyncEtoro).Methods("POST", "OPTIONS")
api.HandleFunc("/etoro/status", s.handleEtoroStatus).Methods("GET", "OPTIONS")
// Discovery
api.HandleFunc("/discover", s.handleGetDiscovery).Methods("GET", "OPTIONS")
api.HandleFunc("/discover/run", s.handleRunDiscovery).Methods("POST", "OPTIONS")
api.HandleFunc("/discover/status", s.handleDiscoveryStatus).Methods("GET", "OPTIONS")
s.router.PathPrefix("/").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "StockRadar API running")
@@ -137,8 +182,19 @@ func (s *Server) handleTestKey(w http.ResponseWriter, r *http.Request) {
return
}
// Pour l'instant on vérifie juste que la clé existe
// On branchera le vrai ping API plus tard
if provider == "finnhub" {
apiKey, err := s.settings.Get(keyName)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if err := finnhub.New(apiKey).Ping(); err != nil {
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"status":"error","message":%q}`, err.Error())
return
}
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"status":"ok","provider":"%s"}`, provider)
}