feat(decodes): NEW STATE — badge and filter
The WAS gap made visible: a worked-states set joins the cluster status cache (distinct states over the three US entities), the status entries carry a NewState flag wherever the state resolves (log county first, ULS licence second), and the decode panel gains the badge in its status column plus the filter chip alongside NEW/BAND/MODE/GRID. Colour from the shared marker palette, so the cluster can adopt it later without a second hue.
This commit is contained in:
@@ -2752,6 +2752,29 @@ func (r *Repo) WorkedCountyKeys(ctx context.Context, keyFn func(state, cnty stri
|
||||
return out, rows.Err()
|
||||
}
|
||||
|
||||
// WorkedStateKeys returns the set of US states already worked, uppercased —
|
||||
// the WAS ledger the cluster and decode panels judge NEW STATE against.
|
||||
func (r *Repo) WorkedStateKeys(ctx context.Context) (map[string]struct{}, error) {
|
||||
rows, err := r.db.QueryContext(ctx,
|
||||
`SELECT DISTINCT UPPER(COALESCE(state,'')) FROM qso
|
||||
WHERE dxcc IN (291,110,6) AND state IS NOT NULL AND state != ''`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
out := make(map[string]struct{}, 64)
|
||||
for rows.Next() {
|
||||
var st string
|
||||
if err := rows.Scan(&st); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if st != "" {
|
||||
out[st] = struct{}{}
|
||||
}
|
||||
}
|
||||
return out, rows.Err()
|
||||
}
|
||||
|
||||
// CountQSLViaRouting counts the QSOs whose qsl_via holds a routing method
|
||||
// instead of a manager, per isRouting.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user