Browse Source

feat: Flt모듈 - tsQR 검증되어있는지 확인기능 추가

pull/9/head
lkd9125(이경도) 7 months ago
parent
commit
c23924cfa1
  1. 8
      common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseErrorCode.java
  2. 2
      data/com/src/main/java/kr/co/palnet/kac/data/com/domain/ComConfirmBas.java
  3. 4
      data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComConfirmBasRepository.java
  4. 10
      data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComConfirmDomainService.java
  5. 2
      web/api-flight/src/main/java/kr/co/palnet/kac/api/external/model/TsQRcodeRQ.java
  6. 12
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java
  7. 1
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/ComConfirmBasDTO.java
  8. 51
      web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java

8
common/core/src/main/java/kr/co/palnet/kac/core/exception/BaseErrorCode.java

@ -25,7 +25,13 @@ public enum BaseErrorCode {
WEB_NOT_FOUND("WB404", HttpStatus.INTERNAL_SERVER_ERROR, "찾을수 없는 페이지"),
WEB_API_ERROR("WB500", HttpStatus.INTERNAL_SERVER_ERROR, "외부 연동 에러"),
DATA_ALREADY_EXISTS("DT001", HttpStatus.INTERNAL_SERVER_ERROR, "이미 등록된 데이터"),
DATA_EMPTY("DT002", HttpStatus.INTERNAL_SERVER_ERROR, "데이터 없음");
DATA_EMPTY("DT002", HttpStatus.INTERNAL_SERVER_ERROR, "데이터 없음"),
QR_EXPIRED("QR001", HttpStatus.BAD_REQUEST ,"QR코드 유효기간이 만료되었습니다")
;
private final String code;

2
data/com/src/main/java/kr/co/palnet/kac/data/com/domain/ComConfirmBas.java

@ -34,7 +34,7 @@ public class ComConfirmBas {
// 상태
@Column(name = "STATUS", length = 20, nullable = false)
private String status; // GENERATED, RECEIVED, CHECKED, FAILED, EXPIRED
private String status; // `GENERATED`, `RECEIVED`, CHECKED, FAILED, EXPIRED
// 대상구분
@Column(name = "TARGET_TYPE", length = 100)

4
data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComConfirmBasRepository.java

@ -3,6 +3,10 @@ package kr.co.palnet.kac.data.com.repository;
import kr.co.palnet.kac.data.com.domain.ComConfirmBas;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface ComConfirmBasRepository extends JpaRepository<ComConfirmBas, Integer> {
Optional<ComConfirmBas> findFirstByConfirmKeyOrderByCreateDtDesc(String confirmKey);
}

10
data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComConfirmDomainService.java

@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
@Slf4j
@RequiredArgsConstructor
@ -17,4 +19,12 @@ public class ComConfirmDomainService {
return comConfirmBasRepository.save(entity);
}
public Optional<ComConfirmBas> findFirstByConfirmKeyOrderByCreateDtDesc(String confirmKey){
return comConfirmBasRepository.findFirstByConfirmKeyOrderByCreateDtDesc(confirmKey);
}
public void flush(){
comConfirmBasRepository.flush();
}
}

2
web/api-flight/src/main/java/kr/co/palnet/kac/api/external/model/TsQRcodeRQ.java vendored

@ -1,9 +1,7 @@
package kr.co.palnet.kac.api.external.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
public class TsQRcodeRQ {

12
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java

@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreateLaancPlanRQ;
import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreateLaancPlanRS;
import kr.co.palnet.kac.api.v1.flight.laanc.model.pliotvalid.PilotValidRs;
import kr.co.palnet.kac.api.v1.flight.laanc.model.tsqr.LaancTsQRcodeRQ;
import kr.co.palnet.kac.api.v1.flight.laanc.model.tsqr.LaancTsQRcodeRS;
import kr.co.palnet.kac.api.v1.flight.laanc.service.FlightLaancService;
@ -40,5 +41,16 @@ public class FlightLaancController {
return ResponseEntity.status(HttpStatus.CREATED).body(result);
}
@GetMapping("/ts/qr/{confirmKey}")
@Operation(summary = "TS QR 코드 확인", description = "조종사 자격증명 및 기체 보험 여부 등 데이터를 받고 검증된 데이터인지 확인")
public ResponseEntity<PilotValidRs> checkQrcode(@PathVariable("confirmKey") String confirmKey) {
PilotValidRs result = flightLaancService.checkQrcode(confirmKey);
return ResponseEntity.ok().body(result);
}
}

1
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/ComConfirmBasDTO.java

@ -1,6 +1,5 @@
package kr.co.palnet.kac.api.v1.flight.laanc.model;
import jakarta.persistence.*;
import lombok.Data;
import java.time.LocalDateTime;

51
web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java

@ -1,5 +1,7 @@
package kr.co.palnet.kac.api.v1.flight.laanc.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import kr.co.palnet.kac.api.external.model.TsQRcodeRQ;
import kr.co.palnet.kac.api.external.service.CtrTrnsLctnService;
import kr.co.palnet.kac.api.external.service.TsService;
@ -33,6 +35,7 @@ import kr.co.palnet.kac.api.util.FileUtils;
import kr.co.palnet.kac.api.util.HttpUtils;
import kr.co.palnet.kac.api.util.model.LaancPdfModel;
import kr.co.palnet.kac.util.EncryptUtil;
import kr.co.palnet.kac.util.ObjectMapperUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@ -44,10 +47,10 @@ import org.springframework.web.util.UriComponentsBuilder;
import com.google.zxing.WriterException;
import java.io.IOException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.time.temporal.ChronoUnit;
import java.util.*;
@Service
@Slf4j
@ -64,7 +67,7 @@ public class FlightLaancService {
private final ComFileDomainService comFileDomainService;
private final ComConfirmDomainService confirmDomainService;
private final ComConfirmDomainService comConfirmDomainService;
private final OtherDomainService otherDomainService;
@ -370,7 +373,7 @@ public class FlightLaancService {
.updateDt(LocalDateTime.now())
.build();
confirmDomainService.saveComConfirmBas(comConfirmBas);
comConfirmDomainService.saveComConfirmBas(comConfirmBas);
log.info(">>> confirmKey [GENERATED] ", confirmKey);
return LaancTsQRcodeRS.builder()
@ -378,4 +381,42 @@ public class FlightLaancService {
.confirmKey(confirmKey)
.build();
}
public PilotValidRs checkQrcode(String confirmKey) {
log.info(">>> confirmKey : {}", confirmKey);
String userId = SessionHelper.getUserId();
Optional<ComConfirmBas> entityData = comConfirmDomainService.findFirstByConfirmKeyOrderByCreateDtDesc(confirmKey);
if(entityData.isEmpty()) throw new BaseException(BaseErrorCode.DATA_EMPTY, "QR코드 조회 실패");
ComConfirmBas entity = entityData.get();
if (!"RECEIVED".equals(entity.getStatus())){
Map<String, String> errorParam = new HashMap<>();
errorParam.put("status", entity.getStatus());
throw new BaseException(BaseErrorCode.DATA_EMPTY, errorParam.toString());
}
// TODO 일자 검증 - 3분 초과
LocalDateTime createDt = entity.getCreateDt().plusMinutes(3);
boolean flag = !createDt.isBefore(LocalDateTime.now());
if (!flag) {
entity.setStatus("EXPIRED");
entity.setUpdateUserId(userId);
comConfirmDomainService.saveComConfirmBas(entity);
comConfirmDomainService.flush();
throw new BaseException(BaseErrorCode.QR_EXPIRED, "QR 기간 만료");
}
PilotValidRs rs = null;
String rsData = entity.getRsData();
if(rsData != null && !rsData.isEmpty()){
try{
rs = ObjectMapperUtils.getObjectMapper().readValue(rsData, PilotValidRs.class);
} catch (JsonProcessingException e){
log.error("",e);
}
}
return rs;
}
}

Loading…
Cancel
Save