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/ennoblement/repository/pg_repository.go

55 lines
1.2 KiB
Go
Raw Normal View History

2020-06-03 15:21:28 +00:00
package repository
import (
"context"
"fmt"
"time"
"github.com/tribalwarshelp/api/ennoblement"
"github.com/go-pg/pg/v10"
"github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models"
)
type pgRepository struct {
*pg.DB
}
func NewPGRepository(db *pg.DB) ennoblement.Repository {
return &pgRepository{db}
}
func (repo *pgRepository) Fetch(ctx context.Context, server string) ([]*models.Ennoblement, error) {
s := &models.Server{}
if err := repo.Model(s).Where("key = ?", server).Relation("LangVersion").Select(); err != nil {
if err == pg.ErrNoRows {
return nil, fmt.Errorf("Server not found")
}
return nil, errors.Wrap(err, "Internal server error")
}
if s.Status == models.ServerStatusClosed {
return nil, fmt.Errorf("Server is " + models.ServerStatusClosed.String())
}
url := "https://" + s.Key + "." + s.LangVersion.Host +
fmt.Sprintf(ennoblement.EndpointGetConquer, time.Now().Add(-1*time.Hour).Unix())
lines, err := getCSVData(url)
if err != nil {
return nil, errors.Wrap(err, "Cannot fetch ennoblements")
}
e := []*models.Ennoblement{}
for _, line := range lines {
ennoblement, err := parseLine(line, s.LangVersion.Timezone)
if err != nil {
continue
}
e = append(e, ennoblement)
}
return e, nil
}