2020-06-21 10:26:57 +00:00
|
|
|
package usecase
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2021-01-15 17:59:24 +00:00
|
|
|
"time"
|
2020-06-21 10:26:57 +00:00
|
|
|
|
|
|
|
"github.com/tribalwarshelp/api/ennoblement"
|
2020-08-09 12:32:46 +00:00
|
|
|
"github.com/tribalwarshelp/api/middleware"
|
2020-06-21 10:26:57 +00:00
|
|
|
"github.com/tribalwarshelp/api/utils"
|
|
|
|
"github.com/tribalwarshelp/shared/models"
|
|
|
|
)
|
|
|
|
|
|
|
|
type usecase struct {
|
|
|
|
repo ennoblement.Repository
|
|
|
|
}
|
|
|
|
|
|
|
|
func New(repo ennoblement.Repository) ennoblement.Usecase {
|
|
|
|
return &usecase{repo}
|
|
|
|
}
|
|
|
|
|
2020-11-21 09:08:22 +00:00
|
|
|
func (ucase *usecase) Fetch(ctx context.Context, cfg ennoblement.FetchConfig) ([]*models.Ennoblement, int, error) {
|
|
|
|
if cfg.Filter == nil {
|
|
|
|
cfg.Filter = &models.EnnoblementFilter{}
|
2020-06-21 10:26:57 +00:00
|
|
|
}
|
2020-11-21 09:08:22 +00:00
|
|
|
|
|
|
|
if !middleware.CanExceedLimit(ctx) && (cfg.Limit > ennoblement.PaginationLimit || cfg.Limit <= 0) {
|
|
|
|
cfg.Limit = ennoblement.PaginationLimit
|
|
|
|
}
|
2021-03-20 17:13:45 +00:00
|
|
|
cfg.Sort = utils.SanitizeSorts(cfg.Sort)
|
2020-11-21 09:08:22 +00:00
|
|
|
return ucase.repo.Fetch(ctx, cfg)
|
2020-06-21 10:26:57 +00:00
|
|
|
}
|
2021-01-15 17:59:24 +00:00
|
|
|
|
|
|
|
func (ucase *usecase) FetchLiveEnnoblements(ctx context.Context, server string) ([]*models.LiveEnnoblement, error) {
|
|
|
|
limit := 0
|
|
|
|
if !middleware.CanExceedLimit(ctx) {
|
|
|
|
limit = ennoblement.PaginationLimit
|
|
|
|
}
|
|
|
|
ennoblements, _, err := ucase.repo.Fetch(ctx, ennoblement.FetchConfig{
|
|
|
|
Server: server,
|
|
|
|
Count: false,
|
|
|
|
Filter: &models.EnnoblementFilter{
|
|
|
|
EnnobledAtGTE: time.Now().Add(-1 * time.Hour),
|
|
|
|
},
|
|
|
|
Limit: limit,
|
|
|
|
Sort: []string{"ennobled_at ASC"},
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return convertToLiveEnnoblements(ennoblements), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func convertToLiveEnnoblements(ennoblements []*models.Ennoblement) []*models.LiveEnnoblement {
|
|
|
|
lv := []*models.LiveEnnoblement{}
|
|
|
|
for _, e := range ennoblements {
|
|
|
|
lv = append(lv, &models.LiveEnnoblement{
|
|
|
|
VillageID: e.VillageID,
|
|
|
|
NewOwnerID: e.NewOwnerID,
|
|
|
|
OldOwnerID: e.OldOwnerID,
|
|
|
|
EnnobledAt: e.EnnobledAt,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return lv
|
|
|
|
}
|