Resolved conflict

This commit is contained in:
rajesh
2025-06-06 15:17:53 +05:30
55 changed files with 1601 additions and 1305 deletions

View File

@@ -571,7 +571,7 @@ public class GepafinConstant {
public static final String PROTOCOL_EXTERNAL_NUMBER="NUM_PG";
public static final String PROTOCOL_EXTERNAL_DATE="DATA_PG_DT";
public static final String PROTOCOL_DOC_SUFFIX="#noauth";
public static final String CREATE_NDG="CHECK_OR_CREATE_NDG_CODE";
}

View File

@@ -17,6 +17,11 @@ import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.model.util.SortBy;
import net.gepafin.tendermanagement.repositories.*;
@@ -1990,7 +1995,7 @@ public class ApplicationDao {
}
// Wrap it in ="..." to make Excel treat it as a literal string
return "=\"" + stringValue.replace("\"", "\"\"") + "\"";
return stringValue;
} catch (Exception e) {
return "";

View File

@@ -18,10 +18,7 @@ import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity;
import net.gepafin.tendermanagement.entities.CompanyEntity;
import net.gepafin.tendermanagement.entities.DocumentEntity;
import net.gepafin.tendermanagement.entities.HubEntity;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.enums.NotificationTypeEnum;
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.AppointmentCreationRequest;
import net.gepafin.tendermanagement.model.request.AppointmentNdgRequest;
import net.gepafin.tendermanagement.model.request.AppointmentVisuraListRequest;
@@ -55,6 +52,8 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
@@ -66,7 +65,10 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.ScheduledExecutorService;
@Slf4j
@Component
@@ -150,7 +152,8 @@ public class AppointmentDao {
@Autowired
private ApplicationEvaluationDao applicationEvaluationDao;
private final Map<Long, ExecutorService> executorMap = new ConcurrentHashMap<>();
private final Map<Long, ScheduledExecutorService> executorMap = new ConcurrentHashMap<>();
private final ConcurrentHashMap<Long, ExecutorService> threadForDocumentMap = new ConcurrentHashMap<>();
@@ -159,6 +162,8 @@ public class AppointmentDao {
public NdgResponse checkNdgForAppointment(Long applicationId) {
log.info("Starting NDG check for appointment. applicationId: {}", applicationId);
ApplicationEntity application = applicationService.validateApplication(applicationId);
ApplicationEntity oldApplication = Utils.getClonedEntityForData(application);
NdgResponse ndgResponse = new NdgResponse();
if (application.getNdgStatus() != null && application.getNdgStatus().equalsIgnoreCase(GepafinConstant.NDG_IN_PROGRESS)) {
log.warn("NDG generation already in progress. applicationId: {}", applicationId);
@@ -175,6 +180,10 @@ public class AppointmentDao {
application.setNdgStatus(GepafinConstant.NDG_IN_PROGRESS);
applicationRepository.save(application);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
// Start async processing
HubEntity hub = hubRepository.findByHubId(application.getHubId());
loginToOdessa(hub, application);
@@ -432,35 +441,92 @@ public class AppointmentDao {
}
private void startAsyncNdgProcessing(Long applicationId) {
// Check if a thread is already running for this application
if (executorMap.containsKey(applicationId)) {
// If already polling for this applicationId, do nothing:
if (executorMap.containsKey(applicationId)) {
log.warn("Async processing already running for applicationId: {}", applicationId);
return;
}
ServletRequestAttributes requestAttributes = new ServletRequestAttributes(request);
// Create a dedicated thread for asynchronous processing
ExecutorService executor = Executors.newSingleThreadExecutor(runnable -> {
Thread thread = new Thread(runnable);
thread.setName("AsyncNdgProcessing-" + applicationId);
return thread;
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(runnable -> {
Thread t = new Thread(runnable);
t.setName("AsyncNdgProcessing-" + applicationId);
return t;
});
executorMap.put(applicationId, executor);
executorMap.put(applicationId, scheduler);
executor.submit(() -> {
// Record the start time so we can stop after 2 hours:
long startTime = System.currentTimeMillis();
long twoHoursMs = TimeUnit.HOURS.toMillis(2);
long fifteenMin = 15; // in MINUTES
// We need a reference to cancel the scheduled task from inside itself when we're done:
AtomicReference<ScheduledFuture<?>> futureRef = new AtomicReference<>();
Runnable pollingTask = () -> {
RequestContextHolder.setRequestAttributes(requestAttributes, true);
Utils.setHttpServletRequestForThread(request,HttpMethodEnum.POST.getValue(),GepafinConstant.CREATE_NDG, (Long) request.getAttribute(GepafinConstant.USER_ACTION_ID));
try {
log.info("Starting async processing for applicationId: {}", applicationId);
processNdgGeneration(applicationId);
} catch (Exception e) {
log.error("Error in async NDG processing for applicationId: {}", applicationId, e);
} finally {
// Cleanup resources
ExecutorService executorToShutdown = executorMap.remove(applicationId);
if (executorToShutdown != null) {
executorToShutdown.shutdown();
// 1) If 2 hours have already passed, mark as FAILED and shut down:
if (System.currentTimeMillis() - startTime > twoHoursMs) {
ApplicationEntity app = applicationService.validateApplication(applicationId);
log.warn("2-hour timeout reached for applicationId {}. Marking NDG_FAILED.", applicationId);
app.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(app);
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
return;
}
// 2) Otherwise, call processNdgGeneration once:
processNdgGeneration(applicationId);
// 3) After return, check if NDG is now set or timed out. If so, cancel & shut down:
ApplicationEntity updated = applicationService.validateApplication(applicationId);
if (isNdgValid(updated.getNdg())) {
log.info("NDG found for applicationId {}. Shutting down scheduler.", applicationId);
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
} else if (updated.getNdgStatus() != null && updated.getNdgStatus().equals(GepafinConstant.NDG_FAILED)) {
log.info("NDG status is NDG_FAILED for applicationId {}. Shutting down scheduler.", applicationId);
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
}
// Otherwise: no NDG yet, not timed out → next run happens in 15 minutes automatically.
} catch (Exception ex) {
log.error("Unexpected error during scheduled polling for applicationId {}: {}", applicationId, ex.getMessage(), ex);
try {
ApplicationEntity checkApp = applicationService.validateApplication(applicationId);
if (System.currentTimeMillis() - startTime > twoHoursMs) {
log.warn("After exception, 2-hour window passed for applicationId {}. Marking NDG_FAILED.", applicationId);
checkApp.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(checkApp);
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
}
} catch (Exception ignore) {
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
}
log.info("Async processing completed for applicationId: {}", applicationId);
}
});
};
// Schedule pollingTask: run now (delay=0), then every fifteen minutes:
ScheduledFuture<?> future = scheduler.scheduleWithFixedDelay(pollingTask, 0, // initial delay = 0 min → run immediately
fifteenMin, // subsequent runs every 15 minutes
TimeUnit.MINUTES);
futureRef.set(future);
}
private void shutdownScheduler(Long applicationId) {
ScheduledExecutorService shed = executorMap.remove(applicationId);
if (shed != null) {
shed.shutdownNow();
}
log.info("Scheduler shut down for applicationId: {}", applicationId);
}
private void processNdgGeneration(Long applicationId) {
@@ -486,83 +552,120 @@ public class AppointmentDao {
// Try retrieving NDG by VAT number
AppointmentLoginResponse ndgResponse = retrieveNdgByVatNumber(company.getVatNumber(), authorizationToken, hub, application);
if (isNdgValid(ndgResponse.getNdg())) {
saveNdgAndIdVisura(application, company, ndgResponse.getNdg(), null);
saveNdgAndIdVisura(application, company, ndgResponse.getNdg());
log.info("NDG successfully generated for applicationId: {}", applicationId);
} else {
// If NDG isn't immediately available, start polling
log.info("Polling for NDG for applicationId: {}", applicationId);
handleNdgPolling(application, company, hub, authorizationToken);
}
} catch (Exception e) {
log.error("Exception occurred during NDG generation. ApplicationId: {}, CompanyId: {}, HubId: {}, Error: {}",
applicationId, company.getId(), hub.getId(), e.getMessage(), e);
log.error("Exception occurred during NDG generation. ApplicationId: {}, CompanyId: {}, HubId: {}, Error: {}", applicationId, company.getId(), hub.getId(),
e.getMessage(), e);
}
}
private void handleNdgPolling(ApplicationEntity application, CompanyEntity company, HubEntity hub, String authorizationToken) {
log.info("Starting singleshot NDG polling attempt for applicationId: {}, CompanyId: {}, HubId: {}", application.getId(), company.getId(), hub.getId());
ApplicationEntity oldApplication = Utils.getClonedEntityForData(application);
CompanyEntity oldCompanyEntity=Utils.getClonedEntityForData(company);
long startTime = System.currentTimeMillis();
long twoHoursMs = TimeUnit.HOURS.toMillis(2);
try {
log.info("Starting NDG polling for applicationId: {}, CompanyId: {}, HubId: {}", application.getId(),company.getId(), hub.getId());
long startTime = System.currentTimeMillis();
while (true) {
if (application.getNdg() != null) {
log.info("NDG retrieved for applicationId: {}", application.getId());
break;
}
try {
// Fetch Visura list and attempt to parse NDG
String visuraListJson = getVisuraList(application.getIdVisura(), authorizationToken, application, hub);
log.debug("Parsing NDG from visura list response | ApplicationId: {}", application.getId());
String ndg = parseNdgFromVisuraListResponse(visuraListJson);
if (isNdgValid(ndg)) {
// CompanyEntity oldCompanyData = Utils.getClonedEntityForData(company);
// ApplicationEntity oldApplicationData = Utils.getClonedEntityForData(application);
log.info("Valid NDG retrieved: {} | ApplicationId: {}", ndg, application.getId());
company.setNdg(ndg);
application.setNdg(ndg);
application.setNdgStatus(GepafinConstant.NDG_GENERATED);
application.setStatus(ApplicationStatusTypeEnum.NDG.getValue());
applicationRepository.save(application);
companyRepository.save(company);
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId());
// Map<String, String> placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.NDG_GENERATION);
Map<String, String> placeHolders = new HashMap<>();
placeHolders.put("{{call_name}}", application.getCall().getName());
String protocolNumber=application.getProtocol().getExternalProtocolNumber();
if(protocolNumber==null){
protocolNumber= String.valueOf(application.getProtocol().getProtocolNumber());
}
placeHolders.put("{{protocol_number}}", protocolNumber);
notificationDao.sendNotificationToInstructor(placeHolders, applicationEvaluationEntity, NotificationTypeEnum.NDG_GENERATION);
notificationDao.sendNotificationToSuperUser(application, placeHolders, NotificationTypeEnum.NDG_GENERATION);
log.info("NDG saved successfully for applicationId: {}", application.getId());
break;
}
// Check if polling has timed out
if (System.currentTimeMillis() - startTime > TimeUnit.HOURS.toMillis(2)) {
log.warn("NDG polling timed out for applicationId: {}", application.getId());
application.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(application);
break;
}
// Wait before the next polling attempt
Thread.sleep(TimeUnit.MINUTES.toMillis(15));
} catch (InterruptedException e) {
log.warn("NDG polling interrupted for applicationId: {}", application.getId());
Thread.currentThread().interrupt();
break;
} catch (Exception e) {
log.error("Error during NDG polling for applicationId: {}", application.getId(), e);
}
// 1) If NDG was already populated (perhaps by another thread), skip polling.
if (application.getNdg() != null) {
log.info("NDG already present for applicationId {}. Exiting singleshot polling.", application.getId());
return;
}
// 2) Attempt to create Visura (this may immediately return a valid NDG)
AppointmentLoginResponse visuraResponse = createVisura(company, authorizationToken, hub);
// 2a) If createVisura gave us a valid NDG, persist & exit
String fetchedNdg = visuraResponse.getNdg();
if (isNdgValid(fetchedNdg)) {
log.info("Valid NDG retrieved from createVisura(): {} | applicationId: {}", fetchedNdg, application.getId());
company.setNdg(fetchedNdg);
application.setNdg(fetchedNdg);
application.setNdgStatus(GepafinConstant.NDG_GENERATED);
application.setStatus(ApplicationStatusTypeEnum.NDG.getValue());
application.setIdVisura(visuraResponse.getIdVisura());
companyRepository.save(company);
applicationRepository.save(application);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCompanyEntity).newData(company).build());
ApplicationEvaluationEntity eval = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId());
Map<String, String> placeholders = new HashMap<>();
placeholders.put("{{call_name}}", application.getCall().getName());
placeholders.put("{{protocol_number}}", String.valueOf(application.getProtocol().getProtocolNumber()));
notificationDao.sendNotificationToInstructor(placeholders, eval, NotificationTypeEnum.NDG_GENERATION);
notificationDao.sendNotificationToSuperUser(application, placeholders, NotificationTypeEnum.NDG_GENERATION);
log.info("NDG saved successfully for applicationId: {}", application.getId());
return;
}
// 2b) If no immediate NDG, fetch the Visura list JSON and parse out NDG
String visuraListJson = getVisuraList(visuraResponse.getIdVisura(), authorizationToken, application, hub);
log.debug("Parsing NDG from VisuraList JSON for applicationId: {}", application.getId());
String parsedNdg = parseNdgFromVisuraListResponse(visuraListJson);
if (isNdgValid(parsedNdg)) {
log.info("Valid NDG parsed from VisuraList: {} | applicationId: {}", parsedNdg, application.getId());
company.setNdg(parsedNdg);
application.setNdg(parsedNdg);
application.setNdgStatus(GepafinConstant.NDG_GENERATED);
application.setStatus(ApplicationStatusTypeEnum.NDG.getValue());
application.setIdVisura(visuraResponse.getIdVisura());
companyRepository.save(company);
applicationRepository.save(application);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCompanyEntity).newData(company).build());
ApplicationEvaluationEntity eval = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId());
Map<String, String> placeholders = new HashMap<>();
placeholders.put("{{call_name}}", application.getCall().getName());
placeholders.put("{{protocol_number}}", String.valueOf(application.getProtocol().getProtocolNumber()));
notificationDao.sendNotificationToInstructor(placeholders, eval, NotificationTypeEnum.NDG_GENERATION);
notificationDao.sendNotificationToSuperUser(application, placeholders, NotificationTypeEnum.NDG_GENERATION);
log.info("NDG saved successfully for applicationId: {}", application.getId());
return;
}
// 3) Neither direct API nor parsing yielded a valid NDG. Check timeout.
if (System.currentTimeMillis() - startTime > twoHoursMs) {
log.warn("NDG polling timed out after 2 hours for applicationId: {}", application.getId());
application.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(application);
return;
}
// 4) No NDG yet—just return. The scheduler will retry in 15 minutes.
log.info("No valid NDG yet for applicationId {}. Returning to scheduler—next attempt in 15 minutes.", application.getId());
} catch (Exception e) {
log.error("Exception during NDG polling for applicationId: {}", application.getId(), e);
// If timeout after exception, mark NDG_FAILED
if (System.currentTimeMillis() - startTime > twoHoursMs) {
log.warn("Example: exiting singleshot polling due to timeout after exception for applicationId: {}", application.getId());
application.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(application);
} else {
log.info("Exception occurred but not timed out for applicationId {}. Returning to scheduler for next attempt in 15 minutes.", application.getId());
}
} finally {
log.info("NDG polling completed for applicationId: {}", application.getId());
}
log.info("NDG polling completed for applicationId: {}", application.getId());
}
private static String getBearerToken(HubEntity hub) {
@@ -575,24 +678,26 @@ public class AppointmentDao {
return ndg != null && !ndg.isEmpty();
}
private void saveNdgAndIdVisura(ApplicationEntity application, CompanyEntity company, String ndg, String idVisura) {
private void saveNdgAndIdVisura(ApplicationEntity application, CompanyEntity company, String ndg) {
ApplicationEntity oldApplication = Utils.getClonedEntityForData(application);
CompanyEntity oldCompanyEntity=Utils.getClonedEntityForData(company);
application.setNdg(ndg);
application.setIdVisura(idVisura);
application.setNdgStatus(GepafinConstant.NDG_GENERATED);
application.setStatus(ApplicationStatusTypeEnum.NDG.getValue());
company.setNdg(ndg);
companyRepository.save(company);
applicationRepository.save(application);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCompanyEntity).newData(company).build());
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId());
// Map<String, String> placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.NDG_GENERATION);
Map<String, String> placeHolders = new HashMap<>();
placeHolders.put("{{call_name}}", application.getCall().getName());
String protocolNumber=application.getProtocol().getExternalProtocolNumber();
if(protocolNumber==null){
protocolNumber= String.valueOf(application.getProtocol().getProtocolNumber());
}
placeHolders.put("{{protocol_number}}", protocolNumber);
placeHolders.put("{{protocol_number}}", String.valueOf(application.getProtocol().getProtocolNumber()));
notificationDao.sendNotificationToInstructor(placeHolders, applicationEvaluationEntity, NotificationTypeEnum.NDG_GENERATION);
notificationDao.sendNotificationToSuperUser(application, placeHolders, NotificationTypeEnum.NDG_GENERATION);
log.info("NDG saved for applicationId: {}, {}", application.getId(), application.getNdg());
@@ -758,19 +863,28 @@ public class AppointmentDao {
public AppointmentLoginResponse parseVisuraResponse(String jsonResponse) {
try {
// Log full raw JSON for debug purposes
log.info("Raw Visura JSON Response: {}", jsonResponse);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonResponse);
JsonNode dataNode = rootNode.get(GepafinConstant.DATA_STRING);
if (dataNode != null) {
if (dataNode != null && dataNode.isObject()) {
AppointmentLoginResponse response = new AppointmentLoginResponse();
response.setIdVisura(normalizeNullValue(dataNode.get(GepafinConstant.ID_VISURA_STRING).asText()));
response.setNdg(normalizeNullValue(dataNode.get(GepafinConstant.NDG_STRING).asText()));
JsonNode idVisuraNode = dataNode.get(GepafinConstant.ID_VISURA_STRING);
JsonNode ndgNode = dataNode.get(GepafinConstant.NDG_STRING);
if (idVisuraNode == null || ndgNode == null) {
log.error("Missing expected fields in 'data' node. JSON: {}", dataNode);
}
response.setIdVisura(normalizeNullValue(idVisuraNode != null ? idVisuraNode.asText() : null));
response.setNdg(normalizeNullValue(ndgNode != null ? ndgNode.asText() : null));
return response;
} else {
throw new RuntimeException("Invalid JSON structure: Missing 'data' node.");
System.err.println("Invalid JSON: 'data' node is missing or not an object.");
throw new RuntimeException("Invalid JSON structure: Missing or malformed 'data' node.");
}
} catch (Exception e) {
System.err.println("Exception while parsing Visura response: " + e.getMessage());
throw new RuntimeException("Failed to parse response: " + e.getMessage(), e);
}
}

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
import net.gepafin.tendermanagement.model.response.EmailSendResponse;
import java.time.LocalDateTime;
@@ -10,6 +11,7 @@ import java.util.List;
@Entity
@Table(name="application_amendment_request")
@Data
@Where(clause = "is_deleted = false")
public class ApplicationAmendmentRequestEntity extends BaseEntity {
@Column(name = "NOTE")
@@ -33,9 +35,6 @@ public class ApplicationAmendmentRequestEntity extends BaseEntity {
@Column(name = "FORM_FIELDS")
private String formFields;
@Column(name="IS_DELETED")
private Boolean isDeleted=false;
@Column(name = "STATUS")
private String status;

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Where;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@@ -9,6 +10,7 @@ import java.time.LocalDateTime;
@Entity
@Table(name = "APPLICATION")
@Data
@Where(clause = "is_deleted = false")
public class ApplicationEntity extends BaseEntity {
@Column(name = "USER_ID")
@@ -30,9 +32,6 @@ public class ApplicationEntity extends BaseEntity {
@JoinColumn(name = "CALL_ID", nullable = false)
private CallEntity call;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@OneToOne
@JoinColumn(name = "PROTOCOL_NUMBER")
private ProtocolEntity protocol;

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
import net.gepafin.tendermanagement.model.response.EmailSendResponse;
import java.time.LocalDateTime;
@@ -10,6 +11,7 @@ import java.util.List;
@Data
@Entity
@Table(name = "application_evaluation")
@Where(clause = "is_deleted = false")
public class ApplicationEvaluationEntity extends BaseEntity{
@Column(name = "application_Id")
@@ -39,9 +41,6 @@ public class ApplicationEvaluationEntity extends BaseEntity{
@Column(name = "MOTIVATION")
private String motivation;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@ManyToOne
@JoinColumn(name = "assigned_applications_id", nullable = true)
private AssignedApplicationsEntity assignedApplicationsEntity;

View File

@@ -2,16 +2,15 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Data
@Table(name = "APPLICATION_EVALUATION_FORM")
@Where(clause = "is_deleted = false")
public class ApplicationEvaluationFormEntity extends BaseEntity{
private Long applicationId;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@ManyToOne
@JoinColumn(name = "EVALUATION_ID")
private ApplicationEvaluationEntity applicationEvaluation;

View File

@@ -2,10 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Data
@Table(name = "APPLICATION_EVALUATION_FORM_FIELD")
@Where(clause = "is_deleted = false")
public class ApplicationEvaluationFormFieldEntity extends BaseEntity {
@ManyToOne
@@ -18,7 +20,4 @@ public class ApplicationEvaluationFormFieldEntity extends BaseEntity {
@Column(name = "FIELD_VALUE")
private String fieldValue;
@Column(name="IS_DELETED")
private Boolean isDeleted;
}

View File

@@ -2,11 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "APPLICATION_FORM")
@Data
@Where(clause = "is_deleted = false")
public class ApplicationFormEntity extends BaseEntity {
@ManyToOne

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@@ -11,6 +12,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class ApplicationFormFieldEntity extends BaseEntity {
@ManyToOne

View File

@@ -6,10 +6,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Data
@Entity
@Table(name = "application_signed_document")
@Where(clause = "is_deleted = false")
public class ApplicationSignedDocumentEntity extends BaseEntity {
@ManyToOne

View File

@@ -2,13 +2,14 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@Entity
@Data
@Table(name = "assigned_applications")
@Where(clause = "is_deleted = false")
public class AssignedApplicationsEntity extends BaseEntity{
@ManyToOne
@@ -27,9 +28,7 @@ public class AssignedApplicationsEntity extends BaseEntity{
@Column(name = "NOTE")
private String note;
@Column(name="IS_DELETED")
private Boolean isDeleted=false;
@Column(nullable = false)
private LocalDateTime assignedAt;
}

View File

@@ -22,7 +22,12 @@ public class BaseEntity {
@Column(name = "UPDATED_DATE")
LocalDateTime updatedDate;
@PrePersist
@Column(name="IS_DELETED")
private Boolean isDeleted = false;
@PrePersist
public void setCreatedDate() {
this.createdDate = DateTimeUtil.DateServerToUTC(LocalDateTime.now());
this.updatedDate = DateTimeUtil.DateServerToUTC(LocalDateTime.now());

View File

@@ -7,10 +7,12 @@ import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.validation.constraints.Email;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "BENEFICIARY")
@Data
@Where(clause = "is_deleted = false")
public class BeneficiaryEntity extends BaseEntity {
@Email

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@@ -14,6 +15,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class BeneficiaryPreferredCallEntity extends BaseEntity{
@Id
@@ -35,9 +37,6 @@ public class BeneficiaryPreferredCallEntity extends BaseEntity{
@Column(name = "STATUS", length = 255)
private String status;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@ManyToOne
@JoinColumn(name = "USER_WITH_COMPANY_ID")
private UserWithCompanyEntity userWithCompany;

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import org.hibernate.annotations.Where;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@@ -16,6 +17,7 @@ import java.time.LocalTime;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class CallEntity extends BaseEntity {
@Column(name = "NAME", length = 255)

View File

@@ -2,10 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "CALL_TARGET_AUDIENCE_CHECKLIST")
@Data
@Where(clause = "is_deleted = false")
public class CallTargetAudienceChecklistEntity extends BaseEntity{
@ManyToOne
@@ -19,8 +21,4 @@ public class CallTargetAudienceChecklistEntity extends BaseEntity{
@Column(name = "IS_VALIDATED")
private Boolean isValidated;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
}

View File

@@ -6,12 +6,14 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@Entity
@Table(name = "communication")
@Data
@Where(clause = "is_deleted = false")
public class CommunicationEntity extends BaseEntity {
@Column(name = "COMMUNICATION_TITLE")
@@ -20,9 +22,6 @@ public class CommunicationEntity extends BaseEntity {
@Column(name = "COMMUNICATION_COMMENT")
private String communicationComment;
@Column(name = "IS_DELETED")
private Boolean isDeleted = false;
@Column(name = "COMMENTED_DATE")
private LocalDateTime commentedDate;

View File

@@ -2,12 +2,14 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@Entity
@Table(name = "COMPANY_DOCUMENT")
@Data
@Where(clause = "is_deleted = false")
public class CompanyDocumentEntity extends BaseEntity {
@Column(name = "FILE_NAME")
@@ -25,9 +27,6 @@ public class CompanyDocumentEntity extends BaseEntity {
@Column(name="COMPANY_ID")
private Long companyId;
@Column(name ="IS_DELETED")
private Boolean isDeleted = false;
@Column(name="UPLOADED_BY")
private Long uploadedBy;

View File

@@ -8,10 +8,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "COMPANY")
@Data
@Where(clause = "is_deleted = false")
public class CompanyEntity extends BaseEntity{
@Column(name = "COMPANY_NAME")

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "criteria_form_field")
@Data
@Where(clause = "is_deleted = false")
public class CriteriaFormFieldEntity extends BaseEntity {
private Long callId;
@@ -18,7 +20,4 @@ public class CriteriaFormFieldEntity extends BaseEntity {
private Long evaluationCriteriaId;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
}

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "document_category")
@Data
@Where(clause = "is_deleted = false")
public class DocumentCategoryEntity extends BaseEntity {
@Column(name = "CATEGORY_NAME")
@@ -16,7 +18,4 @@ public class DocumentCategoryEntity extends BaseEntity {
@Column(name = "DESCRIPTION")
private String description;
@Column(name ="IS_DELETED")
private Boolean isDeleted = false;
}

View File

@@ -6,10 +6,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "DOCUMENT")
@Data
@Where(clause = "is_deleted = false")
public class DocumentEntity extends BaseEntity{
@Column(name = "FILE_NAME", length = 255)
private String fileName;
@@ -26,9 +28,6 @@ public class DocumentEntity extends BaseEntity{
@Column(name="SOURCE_ID")
private Long sourceId;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
@Column(name="DOCUMENT_ATTACHMENT_ID")
private String documentAttachmentId;

View File

@@ -1,12 +1,14 @@
package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@Entity
@Data
@Table(name = "email_log")
@Where(clause = "is_deleted = false")
public class EmailLogEntity extends BaseEntity{
@Column(name = "email_type", nullable = false, length = 255)
@@ -54,9 +56,6 @@ public class EmailLogEntity extends BaseEntity{
@Column(name = "call_id")
private Long callId;
@Column(name = "is_deleted")
private Boolean isDeleted;
@ManyToOne
@JoinColumn(name = "user_action_id")
private UserActionEntity userAction;

View File

@@ -5,6 +5,7 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
import java.math.BigDecimal;
@@ -12,6 +13,7 @@ import java.math.BigDecimal;
@Entity
@Table(name = "EVALUATION_CRITERIA")
@Data
@Where(clause = "is_deleted = false")
public class EvaluationCriteriaEntity extends BaseEntity {
@ManyToOne
@@ -25,7 +27,4 @@ public class EvaluationCriteriaEntity extends BaseEntity {
@Column(name = "SCORE", nullable = false)
private BigDecimal score;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
}

View File

@@ -5,12 +5,15 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "EVALUATION_FORM")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class EvaluationFormEntity extends BaseEntity{
@@ -24,6 +27,4 @@ public class EvaluationFormEntity extends BaseEntity{
@Column(name = "CONTENT")
private String content;
@Column(name="IS_DELETED")
private Boolean isDeleted;
}

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "expiration_config")
@Data
@Where(clause = "is_deleted = false")
public class ExpirationConfigEntity extends BaseEntity {
@Column(name="INTERVAL_DAYS")
@@ -15,7 +17,4 @@ public class ExpirationConfigEntity extends BaseEntity {
@Column(name="TYPE")
private String type;
@Column(name="IS_DELETED")
private Boolean isDeleted;
}

View File

@@ -9,11 +9,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "FAQ")
@Data
@Where(clause = "is_deleted = false")
public class FaqEntity extends BaseEntity {
@ManyToOne
@@ -39,9 +40,6 @@ public class FaqEntity extends BaseEntity {
@Column(name = "RESPONSE_DATE")
private LocalDateTime responseDate;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
@Column(name ="COMPANY_ID")
private Long companyId;

View File

@@ -1,6 +1,7 @@
package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@@ -10,6 +11,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class FlowDataEntity extends BaseEntity{
@Column(name = "FORM_ID")
@@ -23,4 +25,5 @@ public class FlowDataEntity extends BaseEntity{
@Column(name="CALL_ID")
private Long callId;
}

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@@ -11,6 +12,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class FlowEdgesEntity extends BaseEntity {
@Column(name = "SOURCE_ID")

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "FORM")
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class FormEntity extends BaseEntity{
@Column(name = "LABEL", length = 255)

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "FORM_FIELD")
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class FormFieldEntity extends BaseEntity{
@Column(name = "NAME", length = 255)
@@ -31,4 +33,5 @@ public class FormFieldEntity extends BaseEntity{
@Column(name = "SORT_ORDER")
private Integer sortOrder;
}

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "FORM_TEMPLATE")
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Where(clause = "is_deleted = false")
public class FormTemplateEntity extends BaseEntity{
@Column(name = "LABEL", length = 255)

View File

@@ -15,7 +15,4 @@ public class GlobalConfigEntity extends BaseEntity{
@Column(name = "TYPE")
private String type;
@Column(name = "IS_DELETED")
private Boolean isDeleted = false;
}

View File

@@ -4,12 +4,13 @@ import jakarta.persistence.*;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Where;
@Entity
@Table(name="hub")
@Setter
@Getter
@Where(clause = "is_deleted = false")
public class HubEntity extends BaseEntity{
@Column(name = "COMPANY_NAME")

View File

@@ -3,11 +3,13 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "hub_user")
@Getter
@Setter
@Where(clause = "is_deleted = false")
public class HubUserEntity extends BaseEntity{
@ManyToOne

View File

@@ -2,12 +2,14 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
@Entity
@Table(name = "LOGIN_ATTEMPT")
@Data
@Where(clause = "is_deleted = false")
public class LoginAttemptEntity extends BaseEntity{
@Column(name = "USERNAME")

View File

@@ -3,10 +3,12 @@ package net.gepafin.tendermanagement.entities;
import com.fasterxml.jackson.annotation.JsonValue;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "LOOKUP_DATA")
@Data
@Where(clause = "is_deleted = false")
public class LookUpDataEntity extends BaseEntity{
@Column(name = "TITLE", columnDefinition = "TEXT", nullable = true)

View File

@@ -6,10 +6,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "NOTIFICATION")
@Data
@Where(clause = "is_deleted = false")
public class NotificationEntity extends BaseEntity {
@Column(name = "USER_ID")
@@ -24,9 +26,6 @@ public class NotificationEntity extends BaseEntity {
@Column(name = "STATUS")
private String status;
@Column(name = "IS_DELETED")
private Boolean isDeleted;
@Column(name = "NOTIFICATION_TYPE")
private String notificationType;

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Data
@Table(name = "NOTIFICATION_TYPE")
@Where(clause = "is_deleted = false")
public class NotificationTypeEntity extends BaseEntity {
@Column(name = "NOTIFICATION_NAME")
@@ -18,7 +20,4 @@ public class NotificationTypeEntity extends BaseEntity {
@Column(name = "TITLE")
private String title;
@Column(name="IS_DELETED")
private Boolean isDeleted;
}

View File

@@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import net.gepafin.tendermanagement.config.LocalTimeAttributeConverter;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -10,6 +11,7 @@ import java.time.LocalTime;
@Entity
@Table(name = "PROTOCOL")
@Data
@Where(clause = "is_deleted = false")
public class ProtocolEntity extends BaseEntity {
@Column(name = "PROTOCOL_NUMBER", nullable = false)

View File

@@ -6,6 +6,7 @@ import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Where;
import java.math.BigDecimal;
@@ -13,6 +14,7 @@ import java.math.BigDecimal;
@Table(name = "REGION")
@Getter
@Setter
@Where(clause = "is_deleted = false")
public class RegionEntity extends BaseEntity {
@Column(name = "REGION_NAME", length = 255, nullable = true)

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Data
@Table(name ="role_action_context")
@Where(clause = "is_deleted = false")
public class RoleActionContextEntity extends BaseEntity {
@Column(name = "action_context")
@@ -16,9 +18,6 @@ public class RoleActionContextEntity extends BaseEntity {
@Column(name = "role_id")
private Long roleId;
@Column(name="is_deleted")
private Boolean isDeleted;
@Column(name = "is_viewed")
private Boolean isViewed;

View File

@@ -4,11 +4,13 @@ import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "ROLE")
@Getter
@Setter
@Where(clause = "is_deleted = false")
public class RoleEntity extends BaseEntity {
@Column(name = "ROLE_NAME", length = 255, nullable = true)

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "s3_path_configuration")
@Data
@Where(clause = "is_deleted = false")
public class S3ConfigEntity extends BaseEntity {
@Column(name = "TYPE")
@@ -21,5 +23,6 @@ public class S3ConfigEntity extends BaseEntity {
@Column(name = "PARENT_FOLDER")
private String parentFolder;
}

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "SAML_RESPONSE")
@Data
@Where(clause = "is_deleted = false")
public class SamlResponseEntity extends BaseEntity{
@Column(name = "AUTHENTICATION_OBJECT")
@@ -31,5 +33,4 @@ public class SamlResponseEntity extends BaseEntity{
@Column(name = "TOKEN")
private String token;
}

View File

@@ -8,10 +8,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "system_email_template")
@Data
@Where(clause = "is_deleted = false")
public class SystemEmailTemplatesEntity extends BaseEntity {
@@ -33,9 +35,6 @@ public class SystemEmailTemplatesEntity extends BaseEntity {
@Column(name = "SYSTEM")
private Boolean system;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
@Column(name = "email_scenario")
private String emailScenario;

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Data
@Entity
@Table(name = "user_action")
@Where(clause = "is_deleted = false")
public class UserActionEntity extends BaseEntity {
@Column(name = "USER_ID")
@@ -40,7 +42,4 @@ public class UserActionEntity extends BaseEntity {
@Column(name = "RESPONSE")
private String response;
@Column(name = "IS_DELETED", nullable = false)
private Boolean isDeleted = false;
}

View File

@@ -2,10 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Where;
@Data
@Entity
@Table(name = "user_company_delegation")
@Where(clause = "is_deleted = false")
public class UserCompanyDelegationEntity extends BaseEntity{
@Column(name="USER_ID")

View File

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Where;
import net.gepafin.tendermanagement.model.response.EmailSendResponse;
import java.time.LocalDateTime;
@@ -16,6 +17,7 @@ import java.util.List;
@Table(name = "GEPAFIN_USER")
@Getter
@Setter
@Where(clause = "is_deleted = false")
public class UserEntity extends BaseEntity {
@Column(name = "PASSWORD", columnDefinition = "TEXT",nullable = true)

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Entity
@Table(name = "USER_WITH_COMPANY")
@Data
@Where(clause = "is_deleted = false")
public class UserWithCompanyEntity extends BaseEntity{
@Column(name = "USER_ID")
@@ -35,7 +37,4 @@ public class UserWithCompanyEntity extends BaseEntity{
@Column(name = "EMAIL")
private String email;
@Column(name = "IS_DELETED")
private Boolean isDeleted = false;
}

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import org.hibernate.annotations.Where;
@Data
@Entity
@Table(name = "version_history")
@Where(clause = "is_deleted = false")
public class VersionHistoryEntity extends BaseEntity {
@Column(name = "OLD_DATA", columnDefinition = "LONGTEXT")
@@ -30,7 +32,4 @@ public class VersionHistoryEntity extends BaseEntity {
@Column(name = "USER_ID")
private Long userId;
@Column(name = "IS_DELETED", nullable = false)
private Boolean isDeleted = false;
}

View File

@@ -0,0 +1,18 @@
package net.gepafin.tendermanagement.enums;
import com.fasterxml.jackson.annotation.JsonValue;
public enum HttpMethodEnum {
POST("POST"), PUT("PUT"), GET("GET"), DELETE("DELETE");
private String value;
HttpMethodEnum(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}

View File

@@ -1052,5 +1052,17 @@ public class Utils {
headers.add(org.apache.http.HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0");
return headers;
}
public static void setHttpServletRequestForThread(HttpServletRequest request,String methodType, String remoteUser, Long userActionId) {
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.setRequestURI(request.getRequestURI());
mockRequest.setMethod(methodType);
mockRequest.setRemoteUser(remoteUser); // or pass it in if needed
mockRequest.setAttribute(GepafinConstant.USER_ACTION_ID, userActionId);
ServletRequestAttributes attributes = new ServletRequestAttributes(mockRequest);
RequestContextHolder.setRequestAttributes(attributes, true);
}
}

View File

@@ -2737,6 +2737,132 @@
</insert>
</changeSet>
<changeSet id="09-01-2025_PK_120129" author="Piyush Kag">
<addColumn tableName="application_signed_document">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="APPLICATION_FORM">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="APPLICATION_FORM_FIELD">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="BENEFICIARY">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="CALL">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="COMPANY">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FLOW_DATA">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FLOW_EDGES">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FORM">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FORM_FIELD">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FORM_TEMPLATE">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="hub">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="LOGIN_ATTEMPT">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="LOOKUP_DATA">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="PROTOCOL">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="REGION">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="ROLE">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="s3_path_configuration">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="SAML_RESPONSE">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="user_company_delegation">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="GEPAFIN_USER">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
<changeSet id="08-04-2025_PK_160730" author="Piyush kag">
<sqlFile dbms="postgresql"