135 lines
5.7 KiB
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());
|
|
}
|
|
}
|
|
}
|
|
} |