53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package rag
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"git.toki-labs.com/toki/rara/packages/go/database"
|
|
"git.toki-labs.com/toki/rara/packages/go/database/dbgen"
|
|
"github.com/google/uuid"
|
|
"github.com/jackc/pgx/v5"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
type PostgreSQLReleaseResolver struct {
|
|
queries *dbgen.Queries
|
|
}
|
|
|
|
func NewReleaseResolver(store *database.Store) ReleaseResolver {
|
|
return &PostgreSQLReleaseResolver{queries: store.Queries}
|
|
}
|
|
|
|
func (resolver *PostgreSQLReleaseResolver) Resolve(
|
|
ctx context.Context,
|
|
projectID uuid.UUID,
|
|
knowledgeBaseID uuid.UUID,
|
|
alias string,
|
|
) (Release, error) {
|
|
record, err := resolver.queries.GetActiveReleaseByAlias(
|
|
ctx,
|
|
dbgen.GetActiveReleaseByAliasParams{
|
|
ProjectID: pgUUID(projectID),
|
|
KnowledgeBaseID: pgUUID(knowledgeBaseID),
|
|
Alias: alias,
|
|
},
|
|
)
|
|
if errors.Is(err, pgx.ErrNoRows) {
|
|
return Release{}, ErrNotFound
|
|
}
|
|
if err != nil {
|
|
return Release{}, err
|
|
}
|
|
return Release{
|
|
ID: uuid.UUID(record.ID.Bytes),
|
|
Alias: record.Alias,
|
|
Version: record.Version,
|
|
RetrievalPolicy: record.RetrievalPolicy,
|
|
GenerationPolicy: record.GenerationPolicy,
|
|
}, nil
|
|
}
|
|
|
|
func pgUUID(value uuid.UUID) pgtype.UUID {
|
|
return pgtype.UUID{Bytes: [16]byte(value), Valid: true}
|
|
}
|