diff --git a/internal/adapter/repository_bun_ennoblement.go b/internal/adapter/repository_bun_ennoblement.go index 7e65df6..8bb2a96 100644 --- a/internal/adapter/repository_bun_ennoblement.go +++ b/internal/adapter/repository_bun_ennoblement.go @@ -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). diff --git a/internal/bun/bunmodel/ennoblement.go b/internal/bun/bunmodel/ennoblement.go index 98746dc..4c86116 100644 --- a/internal/bun/bunmodel/ennoblement.go +++ b/internal/bun/bunmodel/ennoblement.go @@ -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 diff --git a/internal/domain/base_player.go b/internal/domain/base_player.go index 93e6a6e..9046ee5 100644 --- a/internal/domain/base_player.go +++ b/internal/domain/base_player.go @@ -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 } diff --git a/internal/domain/base_tribe.go b/internal/domain/base_tribe.go index f2d9456..bb80494 100644 --- a/internal/domain/base_tribe.go +++ b/internal/domain/base_tribe.go @@ -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 } diff --git a/internal/domain/base_village.go b/internal/domain/base_village.go index 9e7411b..6404acd 100644 --- a/internal/domain/base_village.go +++ b/internal/domain/base_village.go @@ -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 } diff --git a/internal/domain/player.go b/internal/domain/player.go index ad60dc5..42389a3 100644 --- a/internal/domain/player.go +++ b/internal/domain/player.go @@ -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 } diff --git a/internal/domain/tribe.go b/internal/domain/tribe.go index 7a9dae6..521b761 100644 --- a/internal/domain/tribe.go +++ b/internal/domain/tribe.go @@ -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 } diff --git a/internal/domain/village.go b/internal/domain/village.go index 666f6fc..2af1593 100644 --- a/internal/domain/village.go +++ b/internal/domain/village.go @@ -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 } diff --git a/internal/port/handler_http_api_ennoblement.go b/internal/port/handler_http_api_ennoblement.go index 150754c..9f58896 100644 --- a/internal/port/handler_http_api_ennoblement.go +++ b/internal/port/handler_http_api_ennoblement.go @@ -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 } diff --git a/internal/port/handler_http_api_ennoblement_test.go b/internal/port/handler_http_api_ennoblement_test.go index 8a47ec0..9d0e494 100644 --- a/internal/port/handler_http_api_ennoblement_test.go +++ b/internal/port/handler_http_api_ennoblement_test.go @@ -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), + ) })) }, },