Files
smart-search-back/internal/repository/token_usage.go
vallyenfail d959dcca96 add service
2026-01-17 17:39:33 +03:00

44 lines
1.2 KiB
Go

package repository
import (
"context"
"smart-search-back/internal/model"
errs "smart-search-back/pkg/errors"
sq "github.com/Masterminds/squirrel"
"github.com/jackc/pgx/v5/pgxpool"
)
type tokenUsageRepository struct {
pool *pgxpool.Pool
qb sq.StatementBuilderType
}
func NewTokenUsageRepository(pool *pgxpool.Pool) TokenUsageRepository {
return &tokenUsageRepository{
pool: pool,
qb: sq.StatementBuilder.PlaceholderFormat(sq.Dollar),
}
}
func (r *tokenUsageRepository) Create(ctx context.Context, usage *model.TokenUsage) error {
query := r.qb.Insert("request_token_usage").Columns(
"request_id", "request_token_count", "response_token_count", "token_cost", "type",
).Values(
usage.RequestID, usage.RequestTokenCount, usage.ResponseTokenCount, usage.TokenCost, usage.Type,
).Suffix("RETURNING id, created_at")
sqlQuery, args, err := query.ToSql()
if err != nil {
return errs.NewInternalError(errs.DatabaseError, "failed to build query", err)
}
err = r.pool.QueryRow(ctx, sqlQuery, args...).Scan(&usage.ID, &usage.CreatedAt)
if err != nil {
return errs.NewInternalError(errs.DatabaseError, "failed to create token usage", err)
}
return nil
}