Skip to content

Commit

Permalink
Cndit 1599 2 (#6)
Browse files Browse the repository at this point in the history
* added processor

* added core for netss

* added support for nettss

* fix failure

* unit test for data exchange

* test for poll

* update yaml and added logic to processing date input

* unit test and added script for windows and lnux

* unit test and added script for windows and lnux

* updated read me

* updated script
  • Loading branch information
ndduc01 authored Aug 2, 2024
1 parent b2434aa commit a981b49
Show file tree
Hide file tree
Showing 65 changed files with 2,834 additions and 52 deletions.
Binary file modified .DS_Store
Binary file not shown.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@ This architecture ensure the STLT can make a secure connection to CDC database w
- OP_DBUSER: On Prem DB info
- NBS_NND_CRON: Cron Scheduler (ex: * * * * * *)
- NBS_NND_CRON_TIME_ZONE: Cron timezone (ex: UTC)
- NETSS Message Processor ENV:
- NBS_NND_CRON: Cron Scheduler (ex: * * * * * *)
- NND_FILE_LOCATION: Path to output directory on the setup machine (ex: /Users/UserName/Desktop/LOG)
- NND_PRIOR: prior date indicator (ex: either T or F)
- NND_DATE: date value (format: 12/30/2023)
- OP_DBPASSWORD: On Prem DB info
- OP_DBSERVER: On Prem DB info
- OP_DBUSER: On Prem DB info

## Useful command to run Poller jar file
The two enviroment variable the end user will need to explicitly set when running the poller service is the CRON configuration (NBS_NND_CRON (schedule) and NBS_NND_CRON_TIME_ZONE (timezone))
Expand Down
21 changes: 15 additions & 6 deletions nnd-data-exchange-service/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,29 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'com.google.code.gson:gson:2.10.1'

implementation 'com.google.code.gson:gson:2.10.1'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server:3.2.0'
implementation 'com.microsoft.sqlserver:mssql-jdbc:12.2.0.jre11'
implementation 'com.zaxxer:HikariCP:5.0.1'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
testImplementation 'org.springframework.security:spring-security-test:6.2.0'
runtimeOnly 'com.nimbusds:oauth2-oidc-sdk:11.8'
implementation 'org.apache.httpcomponents.core5:httpcore5:5.2.5'

runtimeOnly 'com.nimbusds:oauth2-oidc-sdk:11.8'

testImplementation platform('org.junit:junit-bom')
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.mockito:mockito-core'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
test {
useJUnitPlatform()
}


test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
Expand Down Expand Up @@ -43,10 +42,11 @@ public DataExchangeController(IDataExchangeService dataExchangeService) {
@GetMapping(path = "/api/nnd/data-exchange")
public ResponseEntity<DataExchangeModel> exchangingData(@RequestParam("cnStatusTime") String cnStatusTime,
@RequestParam("transportStatusTime") String transportStatusTime,
@RequestParam("netssTime") String netssTime,
@RequestParam("statusCd") String statusCd) throws DataExchangeException {
if (statusCd.isEmpty()) {
throw new DataExchangeException("Status Code is Missing");
}
return ResponseEntity.ok(dataExchangeService.getDataForOnPremExchanging(cnStatusTime, transportStatusTime, statusCd));
return ResponseEntity.ok(dataExchangeService.getDataForOnPremExchanging(cnStatusTime, transportStatusTime,netssTime, statusCd));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,21 @@

import gov.cdc.nnddataexchangeservice.repository.msg.model.NETSSTransportQOut;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.sql.Timestamp;
import java.util.Collection;
import java.util.Optional;

@Repository
public interface NETSSTransportQOutRepository extends JpaRepository<NETSSTransportQOut, Long> {
@Query("SELECT a FROM NETSSTransportQOut a")
Optional<Collection<NETSSTransportQOut>> findNetssTransport ();

@Query("SELECT a FROM NETSSTransportQOut a WHERE a.addTime > :recordStatusTime")
Optional<Collection<NETSSTransportQOut>> findNetssTransportByCreationTime (@Param("recordStatusTime") Timestamp recordStatusTime);


}
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package gov.cdc.nnddataexchangeservice.repository.msg;

import gov.cdc.nnddataexchangeservice.repository.msg.model.NETSSTransportQOut;
import gov.cdc.nnddataexchangeservice.repository.msg.model.TransportQOut;
import gov.cdc.nnddataexchangeservice.repository.odse.model.CNTransportQOut;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.sql.Timestamp;
import java.util.Collection;
import java.util.Optional;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package gov.cdc.nnddataexchangeservice.repository.msg.model;

import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.sql.Timestamp;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gov.cdc.nnddataexchangeservice.repository.msg.model;

import jakarta.persistence.*;
import lombok.*;
import lombok.Data;

@Entity
@Table(name = "TransportQ_out")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package gov.cdc.nnddataexchangeservice.repository.odse;

import gov.cdc.nnddataexchangeservice.repository.msg.model.TransportQOut;
import gov.cdc.nnddataexchangeservice.repository.odse.model.CNTransportQOut;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
Expand All @@ -23,7 +21,4 @@ Optional<Collection<CNTransportQOut>> findTransportByCreationTimeAndStatus (@Par



@Modifying
@Query("UPDATE CNTransportQOut a SET a.recordStatusCd = :statusCd, a.recordStatusTime = :statusTime WHERE a.cnTransportqOutUid = :uid")
void updateTransportStatusByUid(Long uid, String statusCd, Timestamp statusTime);
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package gov.cdc.nnddataexchangeservice.repository.odse.model;


import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.sql.Timestamp;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
import gov.cdc.nnddataexchangeservice.exception.DataExchangeSecurityException;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationManagerResolver;
import org.springframework.security.oauth2.server.resource.authentication.OpaqueTokenAuthenticationProvider;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ public List<CNTransportQOutDto> getTransportData(String statusCd, String statusT

List<CNTransportQOutDto> cnTransportQOutDtoList = new ArrayList<>();
try {
SimpleDateFormat formatter = new SimpleDateFormat(TIMESTAMP_FORMAT);
java.util.Date parsedDate = formatter.parse(statusTime);
Timestamp recordStatusTime = new Timestamp(parsedDate.getTime());

Optional<Collection<CNTransportQOut>> transportQOutResults;
if (statusTime.isEmpty()) {
transportQOutResults = cnTransportQOutRepository.findTransportByStatusCd(statusCd);
} else {
SimpleDateFormat formatter = new SimpleDateFormat(TIMESTAMP_FORMAT);
java.util.Date parsedDate = formatter.parse(statusTime);
Timestamp recordStatusTime = new Timestamp(parsedDate.getTime());
transportQOutResults = cnTransportQOutRepository.findTransportByCreationTimeAndStatus(recordStatusTime, statusCd);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,19 @@ public DataExchangeService(INetsstTransportService netsstTransportService,
this.cnTransportQOutService = icnTransportQOutService;
}

public DataExchangeModel getDataForOnPremExchanging(String cnStatusTime, String transportTime, String statusCd) throws DataExchangeException {
public DataExchangeModel getDataForOnPremExchanging(String cnStatusTime, String transportTime,String netssTime, String statusCd) throws DataExchangeException {
var dataExchange = new DataExchangeModel();
var cnTransportDatas = cnTransportQOutService.getTransportData(statusCd, cnStatusTime);
var transportDatas = transportQOutService.getTransportData(transportTime);
var netssDatas = netsstTransportService.getNetssTransportData(netssTime);

dataExchange.setCnTransportQOutDtoList(cnTransportDatas);
dataExchange.setTransportQOutDtoList(transportDatas);
dataExchange.setNetssTransportQOutDtoList(netssDatas);

dataExchange.setCountCnTransport(cnTransportDatas.size());
dataExchange.setCountTransport(transportDatas.size());
dataExchange.setCountNetssTransport(netssDatas.size());
return dataExchange;
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,56 @@
package gov.cdc.nnddataexchangeservice.service;

import gov.cdc.nnddataexchangeservice.exception.DataExchangeException;
import gov.cdc.nnddataexchangeservice.repository.msg.NETSSTransportQOutRepository;
import gov.cdc.nnddataexchangeservice.repository.msg.TransportQOutRepository;
import gov.cdc.nnddataexchangeservice.repository.msg.model.NETSSTransportQOut;
import gov.cdc.nnddataexchangeservice.service.interfaces.INetsstTransportService;
import gov.cdc.nnddataexchangeservice.service.model.dto.NETSSTransportQOutDto;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;

@Service
public class NetsstTransportService implements INetsstTransportService {
private final NETSSTransportQOutRepository netssTransportQOutRepository;
private static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";

public NetsstTransportService(NETSSTransportQOutRepository netssTransportQOutRepository) {
this.netssTransportQOutRepository = netssTransportQOutRepository;
}


public List<NETSSTransportQOutDto> getNetssTransportData(String statusTime) throws DataExchangeException {

List<NETSSTransportQOutDto> cnTransportQOutDtoList = new ArrayList<>();
try {

Optional<Collection<NETSSTransportQOut>> transportQOutResults;
if (statusTime.isEmpty()) {
transportQOutResults = netssTransportQOutRepository.findNetssTransport();
} else {
SimpleDateFormat formatter = new SimpleDateFormat(TIMESTAMP_FORMAT);
java.util.Date parsedDate = formatter.parse(statusTime);
Timestamp recordStatusTime = new Timestamp(parsedDate.getTime());
transportQOutResults = netssTransportQOutRepository.findNetssTransportByCreationTime(recordStatusTime);
}

if (transportQOutResults.isPresent()) {
for(var item : transportQOutResults.get()) {
NETSSTransportQOutDto transportQOutDto = new NETSSTransportQOutDto(item);
cnTransportQOutDtoList.add(transportQOutDto);
}
}

} catch (Exception e) {
throw new DataExchangeException(e.getMessage());
}


return cnTransportQOutDtoList;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
import gov.cdc.nnddataexchangeservice.exception.DataExchangeException;
import gov.cdc.nnddataexchangeservice.repository.msg.TransportQOutRepository;
import gov.cdc.nnddataexchangeservice.repository.msg.model.TransportQOut;
import gov.cdc.nnddataexchangeservice.repository.odse.model.CNTransportQOut;
import gov.cdc.nnddataexchangeservice.service.interfaces.ITransportQOutService;
import gov.cdc.nnddataexchangeservice.service.model.dto.CNTransportQOutDto;
import gov.cdc.nnddataexchangeservice.service.model.dto.TransportQOutDto;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
import gov.cdc.nnddataexchangeservice.service.model.DataExchangeModel;

public interface IDataExchangeService {
DataExchangeModel getDataForOnPremExchanging(String cnStatusTime, String transportStatusTime, String statusCd) throws DataExchangeException;
DataExchangeModel getDataForOnPremExchanging(String cnStatusTime, String transportStatusTime, String netssTime , String statusCd) throws DataExchangeException;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
package gov.cdc.nnddataexchangeservice.service.interfaces;

import gov.cdc.nnddataexchangeservice.exception.DataExchangeException;
import gov.cdc.nnddataexchangeservice.service.model.dto.NETSSTransportQOutDto;

import java.util.List;

public interface INetsstTransportService {
List<NETSSTransportQOutDto> getNetssTransportData(String statusTime) throws DataExchangeException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public class CNTransportQOutDto {
private Timestamp recordStatusTime;
private Integer versionCtrlNbr;

public CNTransportQOutDto() {

}
// Constructor to convert domain model to DTO
public CNTransportQOutDto(CNTransportQOut cnTransportQOut) {
this.cnTransportqOutUid = cnTransportQOut.getCnTransportqOutUid();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ public class NETSSTransportQOutDto {
private String payload;
private String recordStatusCd;

public NETSSTransportQOutDto() {

}

// Constructor to convert domain model to DTO
public NETSSTransportQOutDto(NETSSTransportQOut netssTransportQOut) {
this.netssTransportQOutUid = netssTransportQOut.getNetssTransportQOutUid();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public class TransportQOutDto {
private String responseMessageSignature;
private Integer priority;

public TransportQOutDto() {

}
// Constructor to convert domain model to DTO
public TransportQOutDto(TransportQOut transportQOut) {
this.recordId = transportQOut.getRecordId();
Expand Down
Loading

0 comments on commit a981b49

Please sign in to comment.