package db import ( "context" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" "github.com/jacek/pamietnik/backend/internal/domain" ) type SuggestionStore struct { pool *pgxpool.Pool } func NewSuggestionStore(pool *pgxpool.Pool) *SuggestionStore { return &SuggestionStore{pool: pool} } func (s *SuggestionStore) ListByDate(ctx context.Context, userID, date string) ([]domain.Suggestion, error) { rows, err := s.pool.Query(ctx, ` SELECT sg.suggestion_id, sg.stop_id, sg.type, sg.title, sg.text, sg.created_at, sg.dismissed_at FROM suggestions sg JOIN stops st ON st.stop_id = sg.stop_id JOIN devices d ON d.device_id = st.device_id WHERE d.user_id = $1 AND DATE(st.start_ts AT TIME ZONE 'UTC') = $2::date ORDER BY sg.created_at`, userID, date, ) if err != nil { return nil, err } defer rows.Close() return pgx.CollectRows(rows, func(row pgx.CollectableRow) (domain.Suggestion, error) { var sg domain.Suggestion err := row.Scan( &sg.SuggestionID, &sg.StopID, &sg.Type, &sg.Title, &sg.Text, &sg.CreatedAt, &sg.DismissedAt, ) return sg, err }) } func (s *SuggestionStore) Insert(ctx context.Context, sg domain.Suggestion) error { _, err := s.pool.Exec(ctx, ` INSERT INTO suggestions (suggestion_id, stop_id, type, title, text, created_at) VALUES ($1,$2,$3,$4,$5,$6) ON CONFLICT (suggestion_id) DO NOTHING`, sg.SuggestionID, sg.StopID, sg.Type, sg.Title, sg.Text, sg.CreatedAt, ) return err }