package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.HubEntity; import net.gepafin.tendermanagement.model.request.HubReq; import net.gepafin.tendermanagement.model.response.HubResponseBean; import net.gepafin.tendermanagement.model.util.NanoIdUtils; import net.gepafin.tendermanagement.repositories.HubRepository; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.List; @Component public class HubDao { @Autowired private HubRepository hubRepository; public HubResponseBean createHub(HubReq hubReq) { HubEntity hubEntity = createOrUpdateHubEntity(new HubEntity(), hubReq); hubRepository.save(hubEntity); return convertToHubResponseBean(hubEntity); } public HubResponseBean updateHub(Long hubId, HubReq hubReq) { HubEntity hubEntity = validateHub(hubId); createOrUpdateHubEntity(hubEntity, hubReq); return convertToHubResponseBean(hubEntity); } public HubResponseBean getHubById(Long hubId) { return convertToHubResponseBean(validateHub(hubId)); } public List getAllHubs() { List hubs = hubRepository.findAll(); return hubs.stream().map(this::convertToHubResponseBean).toList(); } public void deleteHub(Long hubId) { HubEntity hubEntity = validateHub(hubId); hubRepository.deleteById(hubId); hubRepository.save(hubEntity); } public HubEntity validateHub(Long hubId) { return hubRepository.findById(hubId) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.HUB_NOT_FOUND))); } private HubEntity createOrUpdateHubEntity(HubEntity hubEntity, HubReq hubReq) { hubEntity.setCompanyName(hubReq.getCompanyName()); hubEntity.setFirstName(hubReq.getFirstName()); hubEntity.setLastName(hubReq.getLastName()); hubEntity.setEmail(hubReq.getEmail()); hubEntity.setCity(hubReq.getCity()); hubEntity.setCountry(hubReq.getCountry()); hubEntity.setVatNumber(hubReq.getVatNumber()); hubEntity.setUniqueUuid(NanoIdUtils.randomNanoId()); hubEntity.setDomainName(hubReq.getDomainName()); hubEntity.setAppConfig(hubReq.getAppConfig() != null ? hubReq.getAppConfig().toString() : null); hubEntity.setCreatedDate(hubEntity.getCreatedDate() == null ? LocalDateTime.now() : hubEntity.getCreatedDate()); hubEntity.setUpdatedDate(LocalDateTime.now()); return hubEntity; } private HubResponseBean convertToHubResponseBean(HubEntity hubEntity) { HubResponseBean responseBean = new HubResponseBean(); responseBean.setId(hubEntity.getId()); responseBean.setCompanyName(hubEntity.getCompanyName()); responseBean.setFirstName(hubEntity.getFirstName()); responseBean.setLastName(hubEntity.getLastName()); responseBean.setEmail(hubEntity.getEmail()); responseBean.setCity(hubEntity.getCity()); responseBean.setCountry(hubEntity.getCountry()); responseBean.setVatNumber(hubEntity.getVatNumber()); responseBean.setUniqueUuid(hubEntity.getUniqueUuid()); responseBean.setDomainName(hubEntity.getDomainName()); responseBean.setAppConfig(hubEntity.getAppConfig()); responseBean.setCreatedDate(hubEntity.getCreatedDate()); responseBean.setUpdatedDate(hubEntity.getUpdatedDate()); return responseBean; } public HubEntity getHubByUuid(String hubUuid) { return hubRepository.findByUniqueUuid(hubUuid).orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.HUB_NOT_FOUND))); } public HubResponseBean getHubByHubUuid(String uuid) { return convertToHubResponseBean(getHubByUuid(uuid)); } }