package repository import ( "context" "errors" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" "shop/internal/models" ) type StatsRepository struct { pool *pgxpool.Pool } func NewStatsRepository(pool *pgxpool.Pool) *StatsRepository { return &StatsRepository{pool: pool} } func (r *StatsRepository) IncrementHomeVisit(ctx context.Context) error { _, err := r.pool.Exec(ctx, ` INSERT INTO site_stats (id, total_visits, today_visits, visit_date) VALUES (1, 1, 1, CURRENT_DATE) ON CONFLICT (id) DO UPDATE SET total_visits = site_stats.total_visits + 1, today_visits = CASE WHEN site_stats.visit_date = CURRENT_DATE THEN site_stats.today_visits + 1 ELSE 1 END, visit_date = CURRENT_DATE `) return err } func (r *StatsRepository) Get(ctx context.Context) (models.SiteStats, error) { var s models.SiteStats err := r.pool.QueryRow(ctx, ` SELECT total_visits, CASE WHEN visit_date = CURRENT_DATE THEN today_visits ELSE 0 END FROM site_stats WHERE id = 1 `).Scan(&s.TotalVisits, &s.TodayVisits) if errors.Is(err, pgx.ErrNoRows) { return models.SiteStats{}, nil } if err != nil { return models.SiteStats{}, err } return s, nil }