Some checks failed
Deploy to NAS / deploy (push) Failing after 14s
- Introduce store interfaces (TrackpointStorer, StopStorer, SuggestionStorer) in internal/db/interfaces.go so handlers can be tested without a real DB. - Refactor HandleSingleTrackpoint, HandleBatchTrackpoints, HandleListDays, HandleListTrackpoints, HandleListStops, HandleListSuggestions to accept the new interfaces instead of concrete *db.*Store pointers (no behaviour change; concrete types satisfy the interfaces implicitly). - internal/api/ingest_test.go: 13 handler tests covering happy path, invalid JSON, invalid timestamp, missing event_id/device_id, out-of-range lat/lon, empty/oversized batch, store errors, and idempotency (single + batch). - internal/api/query_test.go: 14 handler tests covering missing query params (400) and empty-result-is-array guarantees for all four query endpoints. - internal/auth/auth_test.go: 5 unit tests for HashPassword / VerifyPassword (correct password, wrong password, empty password, malformed hash, salt uniqueness). - internal/db/trackpoints_test.go: 6 unit tests for the validateTrackpoint helper (happy path, missing fields, coordinate bounds, invalid source). - .gitea/workflows/deploy.yml: add "Test" step (go test ./...) before "Build & Deploy" so a failing test aborts the deployment. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
26 lines
887 B
Go
26 lines
887 B
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jacek/pamietnik/backend/internal/domain"
|
|
)
|
|
|
|
// TrackpointStorer is the interface consumed by HTTP handlers.
|
|
// The concrete TrackpointStore satisfies it.
|
|
type TrackpointStorer interface {
|
|
UpsertBatch(ctx context.Context, userID string, points []domain.Trackpoint) (accepted []string, rejected []RejectedItem, err error)
|
|
ListByDate(ctx context.Context, userID, date string) ([]domain.Trackpoint, error)
|
|
ListDays(ctx context.Context, userID, from, to string) ([]domain.DaySummary, error)
|
|
}
|
|
|
|
// StopStorer is the interface consumed by HTTP handlers.
|
|
type StopStorer interface {
|
|
ListByDate(ctx context.Context, userID, date string) ([]domain.Stop, error)
|
|
}
|
|
|
|
// SuggestionStorer is the interface consumed by HTTP handlers.
|
|
type SuggestionStorer interface {
|
|
ListByDate(ctx context.Context, userID, date string) ([]domain.Suggestion, error)
|
|
}
|