UnshardedTradeShardRouter.java

package com.ecommerce.trade.infrastructure.sharding;

import java.util.Objects;
import java.util.function.Supplier;

public final class UnshardedTradeShardRouter implements TradeShardRouter {

    @Override
    public boolean isRouted() {
        return true;
    }

    @Override
    public int shardCount() {
        return 1;
    }

    @Override
    public int shardIndex(long userId) {
        return 0;
    }

    @Override
    public <T> T executeForUser(long userId, Supplier<T> action) {
        return Objects.requireNonNull(action, "action").get();
    }

    @Override
    public <T> T executeOnShard(int shardIndex, Supplier<T> action) {
        if (shardIndex != 0) {
            throw new IllegalArgumentException("Unsharded mode only exposes shard 0");
        }
        return Objects.requireNonNull(action, "action").get();
    }
}