Browse Source

Merge commit '4a3756fc6cd2d768545453359dee7c1768d2fa8c' into feature/main/date-statistics

pull/1/head
lkd9125 1 year ago
parent
commit
631755b5ef
  1. 38
      pav-common/build.gradle
  2. 1
      pav-common/settings.gradle
  3. 13
      pav-common/src/main/java/com/palnet/common/CommonApplication.java
  4. 10
      pav-common/src/main/java/com/palnet/common/model/SampleDTO.java
  5. 1
      pav-common/src/main/resources/application.properties
  6. 13
      pav-common/src/test/java/com/palnet/common/CommonApplicationTests.java
  7. 33
      pav-server/build.gradle
  8. 9
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtRsModel.java
  9. 432
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtService.java
  10. 52
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtUserDetailsService.java
  11. 5
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrDtlRepository.java
  12. 15
      pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/controller/KacFlightPlanController.java
  13. 15
      pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/model/KacFlightPlanModel.java
  14. 15
      pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/service/KacFlightPlanService.java
  15. 2
      pav-socket/build.gradle
  16. 2
      pav-websocket/build.gradle
  17. 3
      settings.gradle

38
pav-common/build.gradle

@ -0,0 +1,38 @@
plugins {
id 'java'
id 'org.springframework.boot' version '2.5.1'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.palnet'
version = '0.0.1'
java {
sourceCompatibility = '11'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
tasks.withType(JavaCompile){
options.encoding = "UTF-8"
}

1
pav-common/settings.gradle

@ -0,0 +1 @@
rootProject.name = 'pav-common'

13
pav-common/src/main/java/com/palnet/common/CommonApplication.java

@ -0,0 +1,13 @@
package com.palnet.common;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CommonApplication {
public static void main(String[] args) {
SpringApplication.run(CommonApplication.class, args);
}
}

10
pav-common/src/main/java/com/palnet/common/model/SampleDTO.java

@ -0,0 +1,10 @@
package com.palnet.common.model;
import lombok.Data;
@Data
public class SampleDTO {
private String sample;
}

1
pav-common/src/main/resources/application.properties

@ -0,0 +1 @@

13
pav-common/src/test/java/com/palnet/common/CommonApplicationTests.java

@ -0,0 +1,13 @@
package com.palnet.common;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class CommonApplicationTests {
@Test
void contextLoads() {
}
}

33
pav-server/build.gradle

@ -14,14 +14,20 @@ java {
compileJava {
options.compilerArgs += [
'-Amapstruct.unmappedTargetPolicy=IGNORE',
'-Amapstruct.unmappedSourcePolicy=IGNORE'
'-Amapstruct.unmappedTargetPolicy=IGNORE',
'-Amapstruct.unmappedSourcePolicy=IGNORE'
]
}
repositories {
mavenCentral()
mavenCentral {
content {
excludeModule("javax.media", "jai_core")
}
}
maven { url "https://repo.osgeo.org/repository/release" }
}
jar {
@ -29,6 +35,7 @@ jar {
}
dependencies {
// implementation project(':pav-common')
// spring
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
@ -64,17 +71,27 @@ dependencies {
implementation 'io.jsonwebtoken:jjwt:0.9.1'
implementation 'io.netty:netty-all:4.1.9.Final'
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr353'
implementation 'org.apache.httpcomponents:httpclient'
implementation 'org.apache.commons:commons-lang3'
implementation 'commons-httpclient:commons-httpclient:3.1'
implementation 'com.googlecode.json-simple:json-simple:1.1.1'
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'com.esri.geometry:esri-geometry-api:2.2.4'
implementation 'org.locationtech.proj4j:proj4j:1.1.5'
implementation 'org.locationtech.jts:jts-core:1.18.0'
implementation 'org.json:json:20220320'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr353'
// implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
// implementation 'com.bedatadriven:jackson-datatype-jts:2.4'
// implementation 'de.grundid.opendatalab:geojson-jackson:1.14'
// geometry
implementation 'com.esri.geometry:esri-geometry-api:2.2.4'
implementation 'org.locationtech.proj4j:proj4j:1.3.0'
implementation 'org.locationtech.jts:jts-core:1.19.0'
implementation 'org.geotools:gt-geojson:29.2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testAnnotationProcessor "org.mapstruct:mapstruct-processor:1.5.5.Final"
@ -83,7 +100,7 @@ dependencies {
tasks.named('test') {
useJUnitPlatform()
}
tasks.withType(JavaCompile){
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}

9
pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtRsModel.java

@ -1,6 +1,7 @@
package com.palnet.biz.api.acnt.jwt.model;
import java.io.Serializable;
import java.time.Instant;
import lombok.Data;
@ -16,6 +17,10 @@ public class JwtRsModel implements Serializable {
private Integer cstmrSno;
private String auth;
private Instant brthdyDate;
private String clncd;
private String hpno;
private String email;
}

432
pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtService.java

@ -1,238 +1,238 @@
package com.palnet.biz.api.acnt.jwt.service;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import com.palnet.biz.api.acnt.cstmr.service.AcntCstmrService;
import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel;
import com.palnet.biz.api.acnt.jwt.model.JwtRqModel;
import com.palnet.biz.api.acnt.jwt.model.JwtRsModel;
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.biz.api.comn.response.SuccessResponse;
import com.palnet.biz.jpa.entity.CtrCntrlBas;
import com.palnet.biz.jpa.entity.PtyCstmrBas;
import com.palnet.biz.jpa.entity.PtyCstmrConectHist;
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrConectHistRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrDtlRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository;
import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.EncryptUtils;
import com.palnet.comn.utils.HttpUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lombok.extern.log4j.Log4j2;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@Slf4j
@RequiredArgsConstructor
@Service
@Log4j2
public class JwtService {
@Autowired
private PtyCstmrBasRepository ptyCstmrBasRepository;
@Autowired
private PtyCstmrConectHistRepository ptyCstmrConectHistRepository;
@Autowired
private JwtUserDetailsService userDetailsService;
@Autowired
private PtyCstmrQueryRepository query ;
@Autowired
private JwtTokenUtil jwtTokenUtil;
/**
* 로그인 처리
* @param rq
* @return
*/
public Map<String , Object> loginProcess(JwtRqModel rq) throws Exception{
int loginError = 1; // -100 : 아이디/비밀번호가 없습니다 , -101 : 계정정보를 찾을수 없습니다 , -102 : 비밀번호가 잘못 되었습니다 , -103 : 계정을 사용할수 없습니다.
Map<String , Object> resultMap = new HashMap<String , Object>();
//입력값 검증 처리
if(StringUtils.isEmpty(rq.getUserId()) || StringUtils.isEmpty(rq.getUserPswd())) {
loginError = -100;
}
JwtUserModel userDetails = (JwtUserModel)userDetailsService
.loadUserByUsername(rq.getUserId());
//계정이 없는경우
if(userDetails == null) {
loginError = -101;
}else{
String password = EncryptUtils.sha256Encrypt(rq.getUserPswd());
//비밀번호 검증 처리
if (!userDetails.getPassword().equals(password)) {
loginError = -102;
}
//계정 검증로직
if(!userDetails.isAccountNonLocked() || !userDetails.isAccountNonExpired() || !userDetails.isEnabled() || !userDetails.isCredentialsNonExpired()) {
loginError = -103;
}
}
if(loginError < 0) {
String errorMessage = "";
if(loginError == -100) {
errorMessage = "Please parameter Check";
}else if(loginError == -101) {
errorMessage = "Account not found";
}else if(loginError == -102) {
errorMessage = "Password does not match";
}else if(loginError == -103) {
errorMessage = "Account is unavailable";
}
//실패 이력 저장
//cstmrSno , String loginYn , String errorCode
if(userDetails != null) {
this.historySave(userDetails.getCstmrSno(), "N", loginError+"");
}
resultMap.put("loginError", loginError);
resultMap.put("errorMessage", errorMessage);
return resultMap;
}else {
String accessToken = jwtTokenUtil.generateToken(userDetails);
String refreshToken = jwtTokenUtil.generateRefreshToken(userDetails);
JwtRsModel result = new JwtRsModel();
result.setAccessToken(accessToken);
result.setRefreshToken(refreshToken);
result.setAuth(userDetails.getAuth());
result.setUserId(userDetails.getUserId());
result.setCstmrSno(userDetails.getCstmrSno());
//토큰 저장 처리
log.debug("========= refresh>>>>" + refreshToken);
this.refreshTokenSave(userDetails.getCstmrSno(), refreshToken);
//성공이력 저장
this.historySave(userDetails.getCstmrSno(), "Y", loginError+"");
resultMap.put("loginError", loginError);
resultMap.put("errorMessage", "");
resultMap.put("result", result);
return resultMap;
}
}
public PtyCstmrBas logoutProcess(int cstmrSno) throws Exception{
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno);
if (optional.isPresent()) {
PtyCstmrBas entity = optional.get();
entity.setRfrshToken("");
return ptyCstmrBasRepository.save(entity);
}else {
return null;
}
}
/**
* 로그인 이력 저장
* @param cstmrSno
* @param loginYn
* @param errorCode
* @return
* @throws Exception
*/
public PtyCstmrConectHist historySave(int cstmrSno , String loginYn , String errorCode) throws Exception{
String conectIp = HttpUtils.getRequestIp();
PtyCstmrConectHist entity = new PtyCstmrConectHist();
entity.setCstmrSno(cstmrSno);
entity.setConectSucesYn(loginYn);
entity.setConectErrorCd(errorCode);
entity.setConectIp(conectIp);
entity.setConectDt(Instant.now());
return ptyCstmrConectHistRepository.save(entity);
}
/**
* refresh Token 저장 처리
* @param cstmrSno
* @param refreshToken
* @return
* @throws Exception
*/
public PtyCstmrBas refreshTokenSave(int cstmrSno , String refreshToken) throws Exception{
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno);
if (!optional.isPresent()) {
throw new CustomException(ErrorCode.DATA_NOTFIND);
}
PtyCstmrBas entity = optional.get();
entity.setRfrshToken(refreshToken);
return ptyCstmrBasRepository.save(entity);
}
/**
* 프로필 조회
* @param cstmrSno
* @return
* @throws Exception
*/
public JwtProfileRsModel profile(int cstmrSno) throws Exception{
JwtProfileRsModel model = query.findUserProfile(cstmrSno);
private final PtyCstmrBasRepository ptyCstmrBasRepository;
private final PtyCstmrDtlRepository ptyCstmrDtlRepository;
private final PtyCstmrConectHistRepository ptyCstmrConectHistRepository;
private final JwtUserDetailsService userDetailsService;
private final PtyCstmrQueryRepository query;
private final JwtTokenUtil jwtTokenUtil;
/**
* 로그인 처리
*
* @param rq
* @return
*/
public Map<String, Object> loginProcess(JwtRqModel rq) throws Exception {
int loginError = 1; // -100 : 아이디/비밀번호가 없습니다 , -101 : 계정정보를 찾을수 없습니다 , -102 : 비밀번호가 잘못 되었습니다 , -103 : 계정을 사용할수 없습니다.
Map<String, Object> resultMap = new HashMap<String, Object>();
//입력값 검증 처리
if (StringUtils.isEmpty(rq.getUserId()) || StringUtils.isEmpty(rq.getUserPswd())) {
loginError = -100;
}
JwtUserModel userDetails = (JwtUserModel) userDetailsService
.loadUserByUsername(rq.getUserId());
//계정이 없는경우
if (userDetails == null) {
loginError = -101;
} else {
String password = EncryptUtils.sha256Encrypt(rq.getUserPswd());
//비밀번호 검증 처리
if (!userDetails.getPassword().equals(password)) {
loginError = -102;
}
//계정 검증로직
if (!userDetails.isAccountNonLocked() || !userDetails.isAccountNonExpired() || !userDetails.isEnabled() || !userDetails.isCredentialsNonExpired()) {
loginError = -103;
}
}
if (loginError < 0) {
String errorMessage = "";
if (loginError == -100) {
errorMessage = "Please parameter Check";
} else if (loginError == -101) {
errorMessage = "Account not found";
} else if (loginError == -102) {
errorMessage = "Password does not match";
} else if (loginError == -103) {
errorMessage = "Account is unavailable";
}
//실패 이력 저장
//cstmrSno , String loginYn , String errorCode
if (userDetails != null) {
this.historySave(userDetails.getCstmrSno(), "N", loginError + "");
}
resultMap.put("loginError", loginError);
resultMap.put("errorMessage", errorMessage);
return resultMap;
} else {
String accessToken = jwtTokenUtil.generateToken(userDetails);
String refreshToken = jwtTokenUtil.generateRefreshToken(userDetails);
JwtRsModel result = new JwtRsModel();
result.setAccessToken(accessToken);
result.setRefreshToken(refreshToken);
result.setAuth(userDetails.getAuth());
result.setUserId(userDetails.getUserId());
result.setCstmrSno(userDetails.getCstmrSno());
ptyCstmrDtlRepository.findById(userDetails.getCstmrSno()).ifPresent(ptyCstmrDtl -> {
result.setClncd(ptyCstmrDtl.getClncd());
result.setHpno(EncryptUtils.decrypt(ptyCstmrDtl.getHpno()));
result.setEmail(EncryptUtils.decrypt(ptyCstmrDtl.getEmail()));
result.setBrthdyDate(ptyCstmrDtl.getBrthdyDate());
});
//토큰 저장 처리
log.debug("========= refresh>>>>" + refreshToken);
this.refreshTokenSave(userDetails.getCstmrSno(), refreshToken);
//성공이력 저장
this.historySave(userDetails.getCstmrSno(), "Y", loginError + "");
resultMap.put("loginError", loginError);
resultMap.put("errorMessage", "");
resultMap.put("result", result);
return resultMap;
}
}
public PtyCstmrBas logoutProcess(int cstmrSno) throws Exception {
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno);
if (optional.isPresent()) {
PtyCstmrBas entity = optional.get();
entity.setRfrshToken("");
return ptyCstmrBasRepository.save(entity);
} else {
return null;
}
}
/**
* 로그인 이력 저장
*
* @param cstmrSno
* @param loginYn
* @param errorCode
* @return
* @throws Exception
*/
public PtyCstmrConectHist historySave(int cstmrSno, String loginYn, String errorCode) throws Exception {
String conectIp = HttpUtils.getRequestIp();
PtyCstmrConectHist entity = new PtyCstmrConectHist();
entity.setCstmrSno(cstmrSno);
entity.setConectSucesYn(loginYn);
entity.setConectErrorCd(errorCode);
entity.setConectIp(conectIp);
entity.setConectDt(Instant.now());
return ptyCstmrConectHistRepository.save(entity);
}
/**
* refresh Token 저장 처리
*
* @param cstmrSno
* @param refreshToken
* @return
* @throws Exception
*/
public PtyCstmrBas refreshTokenSave(int cstmrSno, String refreshToken) throws Exception {
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno);
if (!optional.isPresent()) {
throw new CustomException(ErrorCode.DATA_NOTFIND);
}
PtyCstmrBas entity = optional.get();
entity.setRfrshToken(refreshToken);
return ptyCstmrBasRepository.save(entity);
}
/**
* 프로필 조회
*
* @param cstmrSno
* @return
* @throws Exception
*/
public JwtProfileRsModel profile(int cstmrSno) throws Exception {
JwtProfileRsModel model = query.findUserProfile(cstmrSno);
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
return model;
}
/**
* token 만료시 refresh 토큰으로 재검색
* @param cstmrSno
* @param refreshToken
* @return
*/
public JwtRsModel findRefreshtoken(int cstmrSno , String refreshToken) {
JwtUserModel userDetails = query.findRefreshtoken(cstmrSno, refreshToken);
if(userDetails == null) {
return null;
}
String accessToken = jwtTokenUtil.generateToken(userDetails);
JwtRsModel result = new JwtRsModel();
result.setAccessToken(accessToken);
result.setRefreshToken(refreshToken);
result.setAuth(userDetails.getAuth());
result.setUserId(userDetails.getUserId());
result.setCstmrSno(userDetails.getCstmrSno());
return result;
}
return model;
}
/**
* token 만료시 refresh 토큰으로 재검색
*
* @param cstmrSno
* @param refreshToken
* @return
*/
public JwtRsModel findRefreshtoken(int cstmrSno, String refreshToken) {
JwtUserModel userDetails = query.findRefreshtoken(cstmrSno, refreshToken);
if (userDetails == null) {
return null;
}
String accessToken = jwtTokenUtil.generateToken(userDetails);
JwtRsModel result = new JwtRsModel();
result.setAccessToken(accessToken);
result.setRefreshToken(refreshToken);
result.setAuth(userDetails.getAuth());
result.setUserId(userDetails.getUserId());
result.setCstmrSno(userDetails.getCstmrSno());
return result;
}
}

52
pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtUserDetailsService.java

@ -1,41 +1,29 @@
package com.palnet.biz.api.acnt.jwt.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel;
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository;
import com.palnet.comn.utils.JsonUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@RequiredArgsConstructor
@Log4j2
public class JwtUserDetailsService implements UserDetailsService{
@Autowired
private PtyCstmrQueryRepository query ;
@Autowired
private PtyCstmrBasRepository repository;
@Override
public JwtUserModel loadUserByUsername(String username){
JwtUserModel model = query.findUserPassword(username);
// log.debug("jwtUser>>>>" + JsonUtils.toJson(model));
if(model == null) {
return null;
}else {
return model;
}
}
public class JwtUserDetailsService implements UserDetailsService {
private final PtyCstmrQueryRepository query;
@Override
public JwtUserModel loadUserByUsername(String username) {
JwtUserModel model = query.findUserPassword(username);
if (model == null) {
return null;
} else {
return model;
}
}
}

5
pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrDtlRepository.java

@ -1,12 +1,9 @@
package com.palnet.biz.jpa.repository.pty;
import com.palnet.biz.jpa.entity.PtyCstmrDtl;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.palnet.biz.jpa.entity.CtrCntrlBas;
import com.palnet.biz.jpa.entity.PtyCstmrDtl;
import com.palnet.biz.jpa.entity.PtyTermsBas;
@Repository
public interface PtyCstmrDtlRepository extends JpaRepository<PtyCstmrDtl, Integer>{

15
pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/controller/KacFlightPlanController.java

@ -1,15 +0,0 @@
package com.palnet.pav.kac.api.flight.plan.controller;
/**
* packageName : com.palnet.pav.kac.api.plan.controller
* fileName : KacPlanController
* author : dhji
* date : 2023-09-15(015)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-15(015) dhji 최초 생성
*/
public class KacFlightPlanController {
}

15
pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/model/KacFlightPlanModel.java

@ -1,15 +0,0 @@
package com.palnet.pav.kac.api.flight.plan.model;
/**
* packageName : com.palnet.pav.kac.api.flight.plan.model
* fileName : KacFlightPlanModel
* author : dhji
* date : 2023-09-15(015)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-15(015) dhji 최초 생성
*/
public class KacFlightPlanModel {
}

15
pav-server/src/main/java/com/palnet/pav/kac/api/flight/plan/service/KacFlightPlanService.java

@ -1,15 +0,0 @@
package com.palnet.pav.kac.api.flight.plan.service;
/**
* packageName : com.palnet.pav.kac.api.flight.plan.service
* fileName : KacFlightPlanService
* author : dhji
* date : 2023-09-15(015)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-09-15(015) dhji 최초 생성
*/
public class KacFlightPlanService {
}

2
pav-socket/build.gradle

@ -20,6 +20,8 @@ jar {
}
dependencies {
implementation project(':pav-common')
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-webflux'

2
pav-websocket/build.gradle

@ -20,6 +20,8 @@ jar {
}
dependencies {
implementation project(':pav-common')
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'io.netty:netty-all:4.1.63.Final'

3
settings.gradle

@ -1,5 +1,6 @@
rootProject.name = 'pav-be-kac'
include 'pav-common'
include 'pav-socket'
include 'pav-websocket'
include 'pav-server'
include 'pav-server'

Loading…
Cancel
Save