44 lines
1.2 KiB
Go
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
|
|
}
|