package net.gepafin.tendermanagement.dao; import java.time.LocalDateTime; import java.time.LocalTime; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.enums.ProtocolTypeEnum; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.util.LoggingUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.HubEntity; import net.gepafin.tendermanagement.entities.ProtocolEntity; import net.gepafin.tendermanagement.repositories.ProtocolRepository; import net.gepafin.tendermanagement.util.DateTimeUtil; @Component public class ProtocolDao { @Autowired private ProtocolRepository protocolRepository; @Value("${default.hub.uuid}") private String defaultHubUuid; @Autowired private LoggingUtil loggingUtil; @Autowired private HttpServletRequest request; public Long getProtocolNumber(HubEntity hubEntity) { Long maxProtocolNumber = protocolRepository.findMaxProtocolNumberAndHubId(hubEntity.getId()); Long startNumber = 10000001L; if(Boolean.FALSE.equals(defaultHubUuid.equals(hubEntity.getUniqueUuid()))) { startNumber = 20000001L; } return (maxProtocolNumber != null) ? maxProtocolNumber + 1 : startNumber; } public ProtocolEntity createProtocolEntity(ApplicationEntity applicationEntity,Long protocolNumber, Long hubId,Boolean isForApplication){ ProtocolEntity protocolEntity=new ProtocolEntity(); protocolEntity.setCall(applicationEntity.getCall().getId()); LocalDateTime utcDateTime = DateTimeUtil.DateServerToUTC(LocalDateTime.now()); protocolEntity.setYear(utcDateTime.getYear()); protocolEntity.setProtocolNumber(protocolNumber); protocolEntity.setTime(LocalTime.now()); protocolEntity.setApplicationId(applicationEntity.getId()); protocolEntity.setHubId(hubId); if(Boolean.TRUE.equals(isForApplication)){ protocolEntity.setType(ProtocolTypeEnum.INPUT.getValue()); }else { protocolEntity.setType(ProtocolTypeEnum.OUTPUT.getValue()); } protocolRepository.save(protocolEntity); /** This code is responsible for adding a version history log for "create protocol" operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(protocolEntity).build()); return protocolEntity; } }