2023-12-28 10:56:59 +00:00
|
|
|
package bunmodel
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
|
2024-04-06 04:32:29 +00:00
|
|
|
"gitea.dwysokinski.me/twhelp/core/internal/domain"
|
2023-12-28 10:56:59 +00:00
|
|
|
"github.com/uptrace/bun"
|
|
|
|
)
|
|
|
|
|
2024-02-28 06:59:10 +00:00
|
|
|
var TribeMetaColumns = []string{"id", "name", "tag", "profile_url"}
|
|
|
|
|
2023-12-28 10:56:59 +00:00
|
|
|
type Tribe struct {
|
|
|
|
bun.BaseModel `bun:"table:tribes,alias:tribe"`
|
|
|
|
|
|
|
|
ID int `bun:"id,nullzero,pk"`
|
|
|
|
ServerKey string `bun:"server_key,nullzero,pk"`
|
|
|
|
Name string `bun:"name,nullzero"`
|
|
|
|
Tag string `bun:"tag,nullzero"`
|
|
|
|
NumMembers int `bun:"num_members"`
|
|
|
|
NumVillages int `bun:"num_villages"`
|
|
|
|
Points int `bun:"points"`
|
|
|
|
AllPoints int `bun:"all_points"`
|
|
|
|
Rank int `bun:"rank"`
|
|
|
|
Dominance float64 `bun:"dominance"`
|
|
|
|
ProfileURL string `bun:"profile_url,nullzero"`
|
|
|
|
BestRank int `bun:"best_rank,nullzero,default:999999"`
|
|
|
|
BestRankAt time.Time `bun:"best_rank_at,nullzero,default:CURRENT_TIMESTAMP"`
|
|
|
|
MostPoints int `bun:"most_points"`
|
|
|
|
MostPointsAt time.Time `bun:"most_points_at,nullzero,default:CURRENT_TIMESTAMP"`
|
|
|
|
MostVillages int `bun:"most_villages"`
|
|
|
|
MostVillagesAt time.Time `bun:"most_villages_at,nullzero,default:CURRENT_TIMESTAMP"`
|
|
|
|
CreatedAt time.Time `bun:"created_at,nullzero,default:CURRENT_TIMESTAMP"`
|
|
|
|
DeletedAt time.Time `bun:"deleted_at,nullzero"`
|
|
|
|
|
|
|
|
OpponentsDefeated
|
|
|
|
}
|
|
|
|
|
2024-02-28 06:59:10 +00:00
|
|
|
func (t Tribe) ToMeta() (domain.TribeMeta, error) {
|
|
|
|
converted, err := domain.UnmarshalTribeMetaFromDatabase(
|
|
|
|
t.ID,
|
|
|
|
t.Name,
|
|
|
|
t.Tag,
|
|
|
|
t.ProfileURL,
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
return domain.TribeMeta{}, fmt.Errorf(
|
|
|
|
"couldn't construct domain.TribeMeta (id=%d,serverKey=%s): %w",
|
|
|
|
t.ID,
|
|
|
|
t.ServerKey,
|
|
|
|
err,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
return converted, nil
|
|
|
|
}
|
|
|
|
|
2023-12-28 10:56:59 +00:00
|
|
|
func (t Tribe) ToDomain() (domain.Tribe, error) {
|
|
|
|
od, err := t.OpponentsDefeated.ToDomain()
|
|
|
|
if err != nil {
|
|
|
|
return domain.Tribe{}, fmt.Errorf("couldn't construct domain.Tribe (id=%d,serverKey=%s): %w", t.ID, t.ServerKey, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
converted, err := domain.UnmarshalTribeFromDatabase(
|
|
|
|
t.ID,
|
|
|
|
t.ServerKey,
|
|
|
|
t.Name,
|
|
|
|
t.Tag,
|
|
|
|
t.NumMembers,
|
|
|
|
t.NumVillages,
|
|
|
|
t.Points,
|
|
|
|
t.AllPoints,
|
|
|
|
t.Rank,
|
|
|
|
od,
|
|
|
|
t.ProfileURL,
|
|
|
|
t.Dominance,
|
|
|
|
t.BestRank,
|
|
|
|
t.BestRankAt,
|
|
|
|
t.MostPoints,
|
|
|
|
t.MostPointsAt,
|
|
|
|
t.MostVillages,
|
|
|
|
t.MostVillagesAt,
|
|
|
|
t.CreatedAt,
|
|
|
|
t.DeletedAt,
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
return domain.Tribe{}, fmt.Errorf("couldn't construct domain.Tribe (id=%d,serverKey=%s): %w", t.ID, t.ServerKey, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return converted, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type Tribes []Tribe
|
|
|
|
|
|
|
|
func (ts Tribes) ToDomain() (domain.Tribes, error) {
|
2024-03-12 06:52:41 +00:00
|
|
|
return sliceToDomain(ts)
|
2023-12-28 10:56:59 +00:00
|
|
|
}
|