Files
MrAlders0n 5804524f0e feat(db): add batched presence touch queries
single-statement flush targets for coalesced last_seen/last_heard_at bumps
2026-07-20 08:55:18 -07:00

45 lines
1.1 KiB
Go

// Copyright 2026 Beacon Contributors
// SPDX-License-Identifier: AGPL-3.0-or-later
package db
import (
"context"
"time"
sqlc "github.com/MeshCore-Beacon/beacon-server/db/sqlc"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
)
func (s *Store) TouchObservers(ctx context.Context, ids []uuid.UUID, seen []time.Time, counts []int32) error {
return s.q.TouchObservers(ctx, sqlc.TouchObserversParams{
Column1: ids,
Column2: toTimestamptzs(seen),
Column3: counts,
})
}
func (s *Store) TouchObserverBrokers(ctx context.Context, ids []uuid.UUID, brokers []string, seen []time.Time) error {
return s.q.TouchObserverBrokers(ctx, sqlc.TouchObserverBrokersParams{
Column1: ids,
Column2: brokers,
Column3: toTimestamptzs(seen),
})
}
func (s *Store) TouchPackets(ctx context.Context, hashes [][]byte, heard []time.Time) error {
return s.q.TouchPackets(ctx, sqlc.TouchPacketsParams{
Column1: hashes,
Column2: toTimestamptzs(heard),
})
}
func toTimestamptzs(ts []time.Time) []pgtype.Timestamptz {
out := make([]pgtype.Timestamptz, len(ts))
for i, t := range ts {
out[i] = pgtype.Timestamptz{Time: t, Valid: true}
}
return out
}