package database import ( "context" "fmt" "github.com/google/uuid" "github.com/jackc/pgx/v5/pgtype" "github.com/TelegramExchange/tgex-parser/internal/domain" "github.com/TelegramExchange/tgex-parser/pkg/transaction" ) func (d *Database) CreateViewsSnapshot(ctx context.Context, snapshot domain.ViewsSnapshot) error { query := `INSERT INTO post_views_history (id, views_count, fetched_at, post_id) VALUES ($1, $2, $3, $4);` txOrPool := transaction.TryExtractTX(ctx) dto := createViewsSnapshotDTO{ ID: pgtype.UUID{Bytes: uuid.New(), Valid: true}, ViewsCount: pgtype.Int4{Int32: int32(snapshot.ViewsCount), Valid: true}, FetchedAt: pgtype.Timestamptz{Time: snapshot.FetchedAt, Valid: true}, PostID: pgtype.UUID{Bytes: snapshot.PostID, Valid: true}, } _, err := txOrPool.Exec(ctx, query, dto.ID, dto.ViewsCount, dto.FetchedAt, dto.PostID) if err != nil { return fmt.Errorf("txOrPool.Exec: %w", err) } return nil } type createViewsSnapshotDTO struct { ID pgtype.UUID ViewsCount pgtype.Int4 FetchedAt pgtype.Timestamptz PostID pgtype.UUID }