Files
sentinela-go/internal/db/search.go
Rainbow f7c8b446bf feat: Sentinela v0.2.0 — Brazilian Financial Data API in Go
- 20 Go source files, single 16MB binary
- SQLite + FTS5 full-text search (pure Go, no CGO)
- BCB integration: Selic, CDI, IPCA, USD/BRL, EUR/BRL
- CVM integration: 2,524 companies from registry
- Fiber v2 REST API with 42 handlers
- Auto-seeds on first run (~5s for BCB + CVM)
- Token bucket rate limiter, optional API key auth
- Periodic sync scheduler (configurable)
- Graceful shutdown, structured logging (slog)
- All endpoints tested with real data
2026-02-10 11:15:54 -03:00

41 lines
1.5 KiB
Go

package db
func (d *DB) SearchCompanies(query string, limit int) ([]Company, error) {
rows, err := d.Conn.Query(`
SELECT c.id, COALESCE(c.ticker,''), c.name, c.cnpj, COALESCE(c.cvm_code,''), COALESCE(c.sector,''), c.status, c.created_at, c.updated_at
FROM companies_fts f JOIN companies c ON f.rowid = c.id
WHERE companies_fts MATCH ? LIMIT ?`, query, limit)
if err != nil {
return nil, err
}
defer rows.Close()
var out []Company
for rows.Next() {
var c Company
rows.Scan(&c.ID, &c.Ticker, &c.Name, &c.CNPJ, &c.CVMCode, &c.Sector, &c.Status, &c.CreatedAt, &c.UpdatedAt)
out = append(out, c)
}
return out, nil
}
func (d *DB) SearchFilings(query string, limit int) ([]Filing, error) {
rows, err := d.Conn.Query(`
SELECT fi.id, fi.external_id, fi.company_id, fi.cnpj, fi.category, COALESCE(fi.type,''), COALESCE(fi.species,''),
COALESCE(fi.subject,''), COALESCE(fi.reference_date,''), fi.delivery_date, COALESCE(fi.protocol,''),
COALESCE(fi.version,''), COALESCE(fi.download_url,''), fi.importance, fi.created_at
FROM filings_fts f JOIN filings fi ON f.rowid = fi.id
WHERE filings_fts MATCH ? LIMIT ?`, query, limit)
if err != nil {
return nil, err
}
defer rows.Close()
var out []Filing
for rows.Next() {
var f Filing
rows.Scan(&f.ID, &f.ExternalID, &f.CompanyID, &f.CNPJ, &f.Category, &f.Type, &f.Species,
&f.Subject, &f.ReferenceDate, &f.DeliveryDate, &f.Protocol, &f.Version, &f.DownloadURL, &f.Importance, &f.CreatedAt)
out = append(out, f)
}
return out, nil
}