Some checks failed
Deploy to NAS / deploy (push) Failing after 4s
Remove submodule tracking; backend is now a plain directory in the repo. Also update deploy workflow: remove --recurse-submodules. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
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
|
|
}
|