refactor: prevent ProfileURL methods panic
ci/woodpecker/push/govulncheck Pipeline was successful Details
ci/woodpecker/push/test Pipeline was successful Details

This commit is contained in:
Dawid Wysokiński 2024-03-11 08:37:04 +01:00
parent fc5f531ce7
commit a86acd760a
Signed by: Kichiyaki
GPG Key ID: B5445E357FB8B892
10 changed files with 42 additions and 24 deletions

View File

@ -78,25 +78,6 @@ func (repo *EnnoblementBunRepository) ListWithRelations(
) (domain.ListEnnoblementsWithRelationsResult, error) {
var ennoblements bunmodel.Ennoblements
fmt.Println(repo.db.NewSelect().
Model(&ennoblements).
Apply(listEnnoblementsParamsApplier{params: params}.apply).
Relation("Village", func(q *bun.SelectQuery) *bun.SelectQuery {
return q.Column(bunmodel.VillageMetaColumns...)
}).
Relation("NewOwner", func(q *bun.SelectQuery) *bun.SelectQuery {
return q.Column(bunmodel.PlayerMetaColumns...)
}).
Relation("NewTribe", func(q *bun.SelectQuery) *bun.SelectQuery {
return q.Column(bunmodel.TribeMetaColumns...)
}).
Relation("OldOwner", func(q *bun.SelectQuery) *bun.SelectQuery {
return q.Column(bunmodel.PlayerMetaColumns...)
}).
Relation("OldTribe", func(q *bun.SelectQuery) *bun.SelectQuery {
return q.Column(bunmodel.TribeMetaColumns...)
}).String())
if err := repo.db.NewSelect().
Model(&ennoblements).
Apply(listEnnoblementsParamsApplier{params: params}.apply).

View File

@ -58,9 +58,13 @@ func (e Ennoblement) ToDomainWithRelations() (domain.EnnoblementWithRelations, e
return domain.EnnoblementWithRelations{}, err
}
village, err := e.Village.ToMeta()
if err != nil {
return domain.EnnoblementWithRelations{}, err
// in some cases there is no corresponding village in the db (for example, for old ennoblements)
var village domain.VillageMeta
if e.Village.ID > 0 {
village, err = e.Village.ToMeta()
if err != nil {
return domain.EnnoblementWithRelations{}, err
}
}
var newOwner domain.NullPlayerMeta

View File

@ -125,6 +125,9 @@ func (p BasePlayer) OD() OpponentsDefeated {
}
func (p BasePlayer) ProfileURL() *url.URL {
if p.profileURL == nil {
return &url.URL{}
}
return p.profileURL
}

View File

@ -159,6 +159,9 @@ func (t BaseTribe) OD() OpponentsDefeated {
}
func (t BaseTribe) ProfileURL() *url.URL {
if t.profileURL == nil {
return &url.URL{}
}
return t.profileURL
}

View File

@ -147,6 +147,9 @@ func (v BaseVillage) PlayerID() int {
}
func (v BaseVillage) ProfileURL() *url.URL {
if v.profileURL == nil {
return &url.URL{}
}
return v.profileURL
}

View File

@ -142,6 +142,9 @@ func (p Player) OD() OpponentsDefeated {
}
func (p Player) ProfileURL() *url.URL {
if p.profileURL == nil {
return &url.URL{}
}
return p.profileURL
}
@ -337,6 +340,9 @@ func (p PlayerMeta) Name() string {
}
func (p PlayerMeta) ProfileURL() *url.URL {
if p.profileURL == nil {
return &url.URL{}
}
return p.profileURL
}

View File

@ -158,6 +158,9 @@ func (t Tribe) OD() OpponentsDefeated {
}
func (t Tribe) ProfileURL() *url.URL {
if t.profileURL == nil {
return &url.URL{}
}
return t.profileURL
}
@ -316,6 +319,9 @@ func (t TribeMeta) Tag() string {
}
func (t TribeMeta) ProfileURL() *url.URL {
if t.profileURL == nil {
return &url.URL{}
}
return t.profileURL
}

View File

@ -137,6 +137,9 @@ func (v Village) PlayerID() int {
}
func (v Village) ProfileURL() *url.URL {
if v.profileURL == nil {
return &url.URL{}
}
return v.profileURL
}
@ -306,6 +309,9 @@ func (v VillageMeta) Continent() string {
}
func (v VillageMeta) ProfileURL() *url.URL {
if v.profileURL == nil {
return &url.URL{}
}
return v.profileURL
}

View File

@ -17,7 +17,10 @@ func (h *apiHTTPHandler) ListEnnoblements(
) {
domainParams := domain.NewListEnnoblementsParams()
if err := domainParams.SetSort([]domain.EnnoblementSort{domain.EnnoblementSortIDASC}); err != nil {
if err := domainParams.SetSort([]domain.EnnoblementSort{
domain.EnnoblementSortCreatedAtASC,
domain.EnnoblementSortIDASC,
}); err != nil {
h.errorRenderer.withErrorPathFormatter(formatListEnnoblementsErrorPath).render(w, r, err)
return
}

View File

@ -45,7 +45,10 @@ func TestListEnnoblements(t *testing.T) {
assert.NotZero(t, body.Cursor.Self)
assert.NotZero(t, body.Data)
assert.True(t, slices.IsSortedFunc(body.Data, func(a, b apimodel.Ennoblement) int {
return cmp.Compare(a.Id, b.Id)
return cmp.Or(
a.CreatedAt.Compare(b.CreatedAt),
cmp.Compare(a.Id, b.Id),
)
}))
},
},