Files
velocity-pay-springboot/src/main/java/zw/qantra/tm/seeders/ProviderSeeder.java

135 lines
5.7 KiB
Java

package zw.qantra.tm.seeders;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import zw.qantra.tm.domain.enums.CurrencyType;
import zw.qantra.tm.domain.models.Provider;
import zw.qantra.tm.domain.repositories.ProviderRepository;
import zw.qantra.tm.utils.Utils;
import java.util.Arrays;
import java.util.List;
/**
* Seeds Provider entities.
* Priority: 4th - Must run after CategorySeeder (providers reference categories).
* Only seeds entities that don't already exist (checked by clientId).
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class ProviderSeeder implements Seeder {
private final ProviderRepository providerRepository;
@Override
public void seed() {
List<Provider> providers = Arrays.asList(
Provider.builder()
.name("Econet Airtime")
.description("Econet Airtime")
.clientId("econet_airtime")
.currency(CurrencyType.USD)
.label("ECONET")
.category("AIRTIME")
.image("econet.png")
.externalId("78f1f497-c9eb-401c-b22c-884756e68e40")
.integrationProcessorLabel("HOT")
.accountFieldName("Phone Number")
.percentageCommission(5)
.requiresAccount(false)
.requiresAmount(true)
.requiresPhone(true)
.priority(2)
.meta("{\"hotProductId\": \"101\"}")
.uid(Utils.getUid())
.build(),
Provider.builder()
.name("NetOne Airtime")
.description("NetOne Airtime")
.clientId("netone_usd_airtime")
.currency(CurrencyType.USD)
.label("NETONE")
.category("AIRTIME")
.image("netone.png")
.externalId("95d485a7-39c9-4559-8a27-6521969abe8f")
.integrationProcessorLabel("HOT")
.accountFieldName("Phone Number")
.percentageCommission(5)
.requiresAccount(false)
.requiresAmount(true)
.requiresPhone(true)
.uid(Utils.getUid())
.priority(3)
.meta("{\"hotProductId\": \"35\"}")
.build(),
Provider.builder()
.name("Zesa Prepaid")
.description("Prepaid Zesa")
.clientId("zesa_prepaid_zwg")
.currency(CurrencyType.ZWG)
.label("ZESA")
.category("UTILITIES")
.image("zesa.png")
.externalId("5468b1ed-4e11-4348-9bc1-f422890fc2c2")
.integrationProcessorLabel("HOT")
.accountFieldName("Meter Number")
.percentageCommission(1.5)
.requiresAccount(true)
.requiresAmount(true)
.requiresPhone(true)
.priority(1)
.meta("{\"hotProductId\": \"24\"}")
.uid(Utils.getUid())
.build(),
Provider.builder()
.name("Zesa Prepaid")
.description("Prepaid Zesa")
.clientId("zesa_prepaid_usd")
.currency(CurrencyType.USD)
.label("ZESA")
.category("UTILITIES")
.image("zesa.png")
.externalId("0f67f7cc-b62b-4fb5-915f-6740b2afdba6")
.integrationProcessorLabel("HOT")
.accountFieldName("Meter Number")
.percentageCommission(1.5)
.requiresAccount(true)
.requiresAmount(true)
.requiresPhone(true)
.priority(1)
.meta("{\"hotProductId\": \"41\"}")
.uid(Utils.getUid())
.build(),
Provider.builder()
.name("Econet Bundles")
.description("Econet Bundles")
.clientId("econet_bundles_usd")
.currency(CurrencyType.USD)
.label("ECONET_BUNDLES")
.category("AIRTIME")
.image("econet.png")
.externalId("287863e2-a791-4106-b629-79dadc9a6779")
.integrationProcessorLabel("HOT")
.accountFieldName("Phone Number")
.percentageCommission(5)
.requiresAccount(false)
.requiresAmount(false)
.requiresPhone(true)
.priority(4)
.meta("{\"hotProductId\": \"111\"}")
.uid(Utils.getUid())
.build()
);
for (Provider provider : providers) {
if (providerRepository.existsByClientId(provider.getClientId())) {
log.info("Provider '{}' already exists, skipping.", provider.getClientId());
} else {
providerRepository.save(provider);
log.info("Provider '{}' seeded.", provider.getClientId());
}
}
}
}