Add admin panel: visit counter, product editor, screenshots upload
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user