This repository has been archived on 2024-04-06. You can view files and clone it, but cannot push or open issues or pull requests.
core-old/internal/bundb/version.go
Dawid Wysokiński 4e4493e33f
All checks were successful
continuous-integration/drone/push Build is passing
feat: tracing (#76)
Reviewed-on: twhelp/core#76
2022-09-12 05:34:46 +00:00

82 lines
1.9 KiB
Go

package bundb
import (
"context"
"database/sql"
"errors"
"fmt"
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"github.com/uptrace/bun"
)
type Version struct {
db *bun.DB
}
func NewVersion(db *bun.DB) *Version {
return &Version{db: db}
}
func (v *Version) List(ctx context.Context, params domain.ListVersionsParams) ([]domain.Version, int64, error) {
ctx, span := tracer.Start(ctx, "Version.List")
defer span.End()
var versions []model.Version
var count int
var err error
q := v.db.NewSelect().
Model(&versions).
Order("code ASC")
if params.Count {
count, err = q.ScanAndCount(ctx)
} else {
err = q.Scan(ctx)
}
if err != nil && !errors.Is(err, sql.ErrNoRows) {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return nil, 0, fmt.Errorf("couldn't select versions from the db: %w", err)
}
result := make([]domain.Version, 0, len(versions))
for _, version := range versions {
result = append(result, version.ToDomain())
}
return result, int64(count), nil
}
func (v *Version) GetByCode(ctx context.Context, code string) (domain.Version, error) {
ctx, span := tracer.Start(ctx, "Version.GetByCode", trace.WithAttributes(
attribute.String("version.code", code),
))
defer span.End()
var version model.Version
if err := v.db.NewSelect().
Model(&version).
Where("code = ?", code).
Scan(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
if errors.Is(err, sql.ErrNoRows) {
return domain.Version{}, domain.VersionNotFoundError{VerCode: code}
}
return domain.Version{}, fmt.Errorf(
"something went wrong while selecting version (code=%s) from the db: %w",
code,
err,
)
}
return version.ToDomain(), nil
}