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

59 lines
1.3 KiB
Go

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{}
lineParser, err := newLineParser(s.LangVersion.Timezone)
if err != nil {
return nil, err
}
for _, line := range lines {
ennoblement, err := lineParser.parse(line)
if err != nil {
continue
}
e = append(e, ennoblement)
}
return e, nil
}