Use multi index for auction id on authorities map
This commit is contained in:
parent
fe40617d9e
commit
8fac27fabe
@ -53,16 +53,16 @@ func newRecordIndexes(sb *collections.SchemaBuilder) RecordsIndexes {
|
||||
|
||||
// TODO
|
||||
type AuthoritiesIndexes struct {
|
||||
AuctionId *indexes.Unique[string, string, registrytypes.NameAuthority]
|
||||
AuctionId *indexes.Multi[string, string, registrytypes.NameAuthority]
|
||||
}
|
||||
|
||||
func (b AuthoritiesIndexes) IndexesList() []collections.Index[string, registrytypes.NameAuthority] {
|
||||
return []collections.Index[string, registrytypes.NameAuthority]{}
|
||||
func (a AuthoritiesIndexes) IndexesList() []collections.Index[string, registrytypes.NameAuthority] {
|
||||
return []collections.Index[string, registrytypes.NameAuthority]{a.AuctionId}
|
||||
}
|
||||
|
||||
func newAuthorityIndexes(sb *collections.SchemaBuilder) AuthoritiesIndexes {
|
||||
return AuthoritiesIndexes{
|
||||
AuctionId: indexes.NewUnique(
|
||||
AuctionId: indexes.NewMulti(
|
||||
sb, registrytypes.AuthoritiesByAuctionIdIndexPrefix, "authorities_by_auction_id",
|
||||
collections.StringKey, collections.StringKey,
|
||||
func(name string, v registrytypes.NameAuthority) (string, error) {
|
||||
|
@ -64,16 +64,24 @@ func (rk RecordKeeper) OnAuctionBid(ctx sdk.Context, auctionId string, bidderAdd
|
||||
|
||||
func (rk RecordKeeper) OnAuctionWinnerSelected(ctx sdk.Context, auctionId string) {
|
||||
// Update authority status based on auction status/winner.
|
||||
name, err := rk.k.Authorities.Indexes.AuctionId.MatchExact(ctx, auctionId)
|
||||
iter, err := rk.k.Authorities.Indexes.AuctionId.MatchExact(ctx, auctionId)
|
||||
if err != nil && !errors.Is(err, collections.ErrNotFound) {
|
||||
panic(err)
|
||||
}
|
||||
if name == "" {
|
||||
names, err := iter.PrimaryKeys()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if len(names) == 0 {
|
||||
// We don't know about this auction, ignore.
|
||||
logger(ctx).Info(fmt.Sprintf("Ignoring auction notification, name mapping not found: %s", auctionId))
|
||||
return
|
||||
}
|
||||
|
||||
// Take the first one as an auction (non-empty) will map to only one name
|
||||
// MultiIndex being used as there can be multiple entries with empty auction id ("")
|
||||
name := names[0]
|
||||
if has, err := rk.k.HasNameAuthority(ctx, name); !has {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
Loading…
Reference in New Issue
Block a user