This repository has been archived on 2022-09-04. You can view files and clone it, but cannot push or open issues or pull requests.
api/version/repository/pg_repository.go

56 lines
1.2 KiB
Go
Raw Permalink Normal View History

2020-06-02 15:45:21 +00:00
package repository
import (
"context"
"github.com/Kichiyaki/gopgutil/v10"
"github.com/tribalwarshelp/shared/tw/twmodel"
2020-06-02 15:45:21 +00:00
"github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm"
"github.com/pkg/errors"
2020-11-06 19:23:12 +00:00
"github.com/tribalwarshelp/api/version"
2020-06-02 15:45:21 +00:00
)
type pgRepository struct {
*pg.DB
}
2020-11-06 19:23:12 +00:00
func NewPGRepository(db *pg.DB) (version.Repository, error) {
if err := db.Model(&twmodel.Version{}).CreateTable(&orm.CreateTableOptions{
2020-06-02 15:45:21 +00:00
IfNotExists: true,
}); err != nil {
return nil, errors.Wrap(err, "cannot create 'versions' table")
2020-06-02 15:45:21 +00:00
}
return &pgRepository{db}, nil
}
func (repo *pgRepository) Fetch(ctx context.Context, cfg version.FetchConfig) ([]*twmodel.Version, int, error) {
2020-06-02 15:45:21 +00:00
var err error
data := make([]*twmodel.Version, 0)
total := 0
query := repo.
Model(&data).
Context(ctx).
Limit(cfg.Limit).
Offset(cfg.Offset).
Apply(cfg.Filter.Where).
Apply(gopgutil.OrderAppender{
Orders: cfg.Sort,
MaxDepth: 4,
}.Apply)
2020-06-02 15:45:21 +00:00
if cfg.Count && cfg.Select {
total, err = query.SelectAndCount()
} else if cfg.Select {
err = query.Select()
} else if cfg.Count {
total, err = query.Count()
}
2020-06-02 15:45:21 +00:00
if err != nil && err != pg.ErrNoRows {
return nil, 0, errors.New("Internal server error")
2020-06-02 15:45:21 +00:00
}
return data, total, nil
}