From 315254bdd92f608bea9876b0070beebb11d2cf42 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 26 Nov 2025 10:48:26 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=EC=97=90=EB=9F=AC=EB=A1=9C=EA=B7=B8=20stac?= =?UTF-8?q?ktrace=20=EC=BB=AC=EB=9F=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/kamcoback/config/GlobalExceptionHandler.java | 9 +++------ .../cd/kamcoback/postgres/entity/ErrorLogEntity.java | 5 ++++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java index 9f3c3957..aea1d9b5 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java @@ -288,14 +288,11 @@ public class GlobalExceptionHandler { // TODO : 로그인 개발되면 이것도 연결해야 함 Long userid = Long.valueOf(Optional.ofNullable(ApiLogFunction.getUserId(request)).orElse("1")); - // TODO : stackTrace limit 20줄? 확인 필요 String stackTraceStr = Arrays.stream(stackTrace) - // .limit(20) - .map(StackTraceElement::toString) - .collect(Collectors.joining("\n")) - .substring(0, Math.min(stackTrace.length, 255)); - ; + .map(StackTraceElement::toString) + .collect(Collectors.joining("\n")) + .substring(0, Math.min(stackTrace.length, 255)); ErrorLogEntity errorLogEntity = new ErrorLogEntity( diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java index 2889c237..429150e9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java @@ -5,6 +5,8 @@ import com.kamco.cd.kamcoback.log.dto.EventType; import com.kamco.cd.kamcoback.postgres.CommonCreateEntity; import jakarta.persistence.*; import java.time.ZonedDateTime; + +import jakarta.validation.constraints.Size; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -32,7 +34,8 @@ public class ErrorLogEntity extends CommonCreateEntity { private String errorCode; private String errorMessage; - @Column(columnDefinition = "TEXT") + @Size(max = 255) + @Column(name = "stack_trace") private String stackTrace; private Long handlerUid; From 9119dead0b26bd542e9235d852247f4f839b562f Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 26 Nov 2025 11:22:59 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=EC=83=81=ED=83=9C=EB=AA=85=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=EB=A1=9C=20=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B0=20fn?= =?UTF-8?q?=5Fcodenm=5Fto=5Fmisc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/model/ModelMngRepositoryImpl.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java index 80f69151..41fdc6d8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java @@ -52,11 +52,11 @@ public class ModelMngRepositoryImpl extends QuerydslRepositorySupport modelMngEntity.modelCate, modelVerEntity.id.as("modelVerUid"), modelVerEntity.modelVer, - modelVerEntity.usedState, - modelVerEntity.modelState, + Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.usedState), //사용여부 한글 명칭 + Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.modelState), //모델상태 한글 명칭 modelVerEntity.qualityProb, - modelVerEntity.deployState, - modelVerEntity.modelPath)) + Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 52, modelVerEntity.deployState), //배포상태 한글 명칭 + modelVerEntity.modelPath)) .from(modelMngEntity) .innerJoin(modelVerEntity) .on(modelMngEntity.id.eq(modelVerEntity.modelUid)) @@ -82,9 +82,9 @@ public class ModelMngRepositoryImpl extends QuerydslRepositorySupport Expressions.stringTemplate( "to_char({0}, 'YYYY-MM-DD')", modelVerEntity.createdDate) .as("createdDttm"), - modelVerEntity.usedState, - modelVerEntity.deployState, - Expressions.stringTemplate( + Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.usedState), //사용여부 한글 명칭 + Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 52, modelVerEntity.deployState), //배포상태 한글 명칭 + Expressions.stringTemplate( "to_char({0}, 'YYYY-MM-DD')", modelDeployHstEntity.deployDttm) .as("deployDttm"))) .from(modelMngEntity) From b64dbeb7395ed3b510a0f99632e2664e8bdd581f Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 26 Nov 2025 11:40:18 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=EB=AA=A8=EB=8D=B8=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=20=EC=B6=94=EA=B0=80=EB=90=9C=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20=EC=97=94=ED=8B=B0=ED=8B=B0=EC=97=90=20=EC=84=A0?= =?UTF-8?q?=EC=96=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postgres/entity/ModelMngEntity.java | 3 ++ .../postgres/entity/ModelVerEntity.java | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java index 40cb1d97..98bef0ea 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java @@ -47,6 +47,9 @@ public class ModelMngEntity extends CommonDateEntity { @Column(name = "model_cntnt", columnDefinition = "TEXT") private String modelCntnt; + @Column(name = "bbone_ver") + private String bboneVer; + public ModelMngEntity( String modelNm, String modelCate, diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java index 153db221..59756568 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java @@ -9,6 +9,10 @@ import jakarta.validation.constraints.Size; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import java.util.Map; @Getter @Setter @@ -63,8 +67,34 @@ public class ModelVerEntity extends CommonDateEntity { @Column(name = "updated_uid") private Long updatedUid; + @Column(name = "deleted") private Boolean deleted = false; + @Column(name = "leaning_rate", columnDefinition = "float8[]") + private Double[] leaningRate; + + @Column(name = "batch_size", columnDefinition = "float8[]") + private Double[] batchSize; + + @Column(name = "dropout_rate", columnDefinition = "float8[]") + private Double[] dropoutRate; + + @Column(name = "number_of_filters", columnDefinition = "float8[]") + private Double[] numberOfFilters; + + @Column(name = "best_state") + private String bestState; + + @Column(name = "copy_state") + private String copyState; + + @Column(name = "hyper_params") + @JdbcTypeCode(SqlTypes.JSON) + private Map hyperParams; + + @Column(name = "ver_cntnt", columnDefinition = "TEXT") + private String verCntnt; + public ModelVerEntity( Long id, Long modelUid, From 2641b48460a080a65b84c13a1a96b88c0c28595a Mon Sep 17 00:00:00 2001 From: teddy Date: Wed, 26 Nov 2025 12:22:33 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=EC=9C=A0=EC=A0=80=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 + .../cd/kamcoback/auth/AuthApiController.java | 15 ++++ .../kamco/cd/kamcoback/auth/dto/AuthDto.java | 35 +++++++++ .../cd/kamcoback/config/PasswordConfig.java | 15 ++++ .../kamcoback/postgres/QuerydslOrderUtil.java | 6 +- .../kamcoback/postgres/entity/UserEntity.java | 76 +++++++++++++++---- .../InferenceResultRepositoryImpl.java | 3 +- .../repository/auth/AuthRepository.java | 8 ++ .../repository/auth/AuthRepositoryCustom.java | 9 +++ .../repository/auth/AuthRepositoryImpl.java | 20 +++++ .../code/CommonCodeRepositoryImpl.java | 13 ++-- 11 files changed, 176 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/config/PasswordConfig.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java diff --git a/build.gradle b/build.gradle index 9ef6ee3a..10b5c9a1 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,9 @@ dependencies { // Apache Commons Compress for archive handling implementation 'org.apache.commons:commons-compress:1.26.0' + + // crypto + implementation 'org.springframework.security:spring-security-crypto' } tasks.named('test') { diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java b/src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java new file mode 100644 index 00000000..026063f2 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java @@ -0,0 +1,15 @@ +package com.kamco.cd.kamcoback.auth; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/auth") +public class AuthApiController { + + @PostMapping("/signup") + public void signup() { + + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java b/src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java new file mode 100644 index 00000000..cb0b4870 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java @@ -0,0 +1,35 @@ +package com.kamco.cd.kamcoback.auth.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +public class AuthDto { + + @Getter + public static class Signup { + private String userAuth; + private String userNm; + private String userId; + private String userPw; + private String empId; + private String userEmail; + + public Signup( + String userAuth, + String userNm, + String userId, + String userPw, + String empId, + String userEmail + ) { + this.userAuth = userAuth; + this.userNm = userNm; + this.userId = userId; + this.userPw = userPw; + this.empId = empId; + this.userEmail = userEmail; + } + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/config/PasswordConfig.java b/src/main/java/com/kamco/cd/kamcoback/config/PasswordConfig.java new file mode 100644 index 00000000..6805d5b7 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/config/PasswordConfig.java @@ -0,0 +1,15 @@ +package com.kamco.cd.kamcoback.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +public class PasswordConfig { + @Bean + public PasswordEncoder passwordEncoder() { + // strength 기본값 10, 필요하면 조절 가능 + return new BCryptPasswordEncoder(); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java b/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java index ecd0ad2e..371fef39 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java @@ -22,8 +22,12 @@ public class QuerydslOrderUtil { sort -> { Order order = sort.isAscending() ? Order.ASC : Order.DESC; // PathBuilder.get()는 컬럼명(String)을 동적 Path로 반환 - return new OrderSpecifier<>(order, entityPath.get(sort.getProperty(), String.class)); + return new OrderSpecifier<>(order, entityPath.get(sort.getProperty(), Comparable.class)); }) .toArray(OrderSpecifier[]::new); } + + + + } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java index 747f0d27..9f225ac5 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java @@ -1,37 +1,81 @@ package com.kamco.cd.kamcoback.postgres.entity; -import com.kamco.cd.kamcoback.postgres.CommonDateEntity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import java.time.ZonedDateTime; -import lombok.AccessLevel; import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.ColumnDefault; -@Entity @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Setter +@Entity @Table(name = "tb_user") -public class UserEntity extends CommonDateEntity { +public class UserEntity { + @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_uid") + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_user_id_gen") + @SequenceGenerator(name = "tb_user_id_gen", sequenceName = "tb_user_user_uid_seq", allocationSize = 1) + @Column(name = "user_uid", nullable = false) private Long id; - @Column(name = "user_nm") + @Size(max = 255) + @NotNull + @Column(name = "user_nm", nullable = false) private String userNm; - @Column(name = "user_id") + @Size(max = 255) + @NotNull + @Column(name = "user_id", nullable = false) private String userId; - @Column(name = "pswd") - private String pswd; // TODO: 암호화 + @Size(max = 255) + @NotNull + @Column(name = "user_pw", nullable = false) + private String userPw; - // @Enumerated(EnumType.STRING) - private String state; // TODO: 추후 enum -> ACTIVE : 정상, LOCKED : 잠김, EXPIRED : 만료, WITHDRAWAL : 탈퇴 + @Size(max = 255) + @NotNull + @ColumnDefault("'ACTIVE'") + @Column(name = "state", nullable = false) + private String state; + @Column(name = "date_withdrawal") private ZonedDateTime dateWithdrawal; - private String userEmail; + @ColumnDefault("now()") + @Column(name = "created_dttm") + private ZonedDateTime createdDttm; + + @ColumnDefault("now()") + @Column(name = "updated_dttm") + private ZonedDateTime updatedDttm; + + @Column(name = "created_uid") private Long createdUid; + + @Column(name = "updated_uid") private Long updatedUid; + + @Size(max = 255) + @Column(name = "user_email") + private String userEmail; + + @Size(max = 20) + @NotNull + @Column(name = "user_auth", nullable = false, length = 20) + private String userAuth; + + @Size(max = 255) + @NotNull + @Column(name = "emp_id", nullable = false) + private String empId; + } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java index 4b6914a4..87743ca2 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java @@ -43,9 +43,8 @@ public class InferenceResultRepositoryImpl implements InferenceResultRepositoryC */ @Override public Page getInferenceResultList( - InferenceResultDto.SearchReq searchReq) { + InferenceResultDto.SearchReq searchReq) { Pageable pageable = searchReq.toPageable(); - // "0000" 전체조회 BooleanBuilder builder = new BooleanBuilder(); if (searchReq.getStatCode() != null && !"0000".equals(searchReq.getStatCode())) { diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java new file mode 100644 index 00000000..8f24e37e --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java @@ -0,0 +1,8 @@ +package com.kamco.cd.kamcoback.postgres.repository.auth; + +import com.kamco.cd.kamcoback.postgres.entity.UserEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface AuthRepository extends JpaRepository, AuthRepositoryCustom { + +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java new file mode 100644 index 00000000..a653e78a --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java @@ -0,0 +1,9 @@ +package com.kamco.cd.kamcoback.postgres.repository.auth; + +import com.kamco.cd.kamcoback.auth.dto.AuthDto; +import com.kamco.cd.kamcoback.postgres.entity.UserEntity; +import java.util.Optional; + +public interface AuthRepositoryCustom { + Optional signup(AuthDto.Signup signup); +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java new file mode 100644 index 00000000..1b450d71 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java @@ -0,0 +1,20 @@ +package com.kamco.cd.kamcoback.postgres.repository.auth; + +import com.kamco.cd.kamcoback.auth.dto.AuthDto; +import com.kamco.cd.kamcoback.postgres.entity.UserEntity; +import com.querydsl.jpa.impl.JPAQueryFactory; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class AuthRepositoryImpl implements AuthRepositoryCustom { + private final JPAQueryFactory queryFactory; + + @Override + public Optional signup(AuthDto.Signup signup) { +// queryFactory.insert() + return Optional.empty(); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/code/CommonCodeRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/code/CommonCodeRepositoryImpl.java index ad0b84c5..560f64c4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/code/CommonCodeRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/code/CommonCodeRepositoryImpl.java @@ -12,18 +12,15 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; -public class CommonCodeRepositoryImpl extends QuerydslRepositorySupport - implements CommonCodeRepositoryCustom { +@Repository +@RequiredArgsConstructor +public class CommonCodeRepositoryImpl implements CommonCodeRepositoryCustom { private final JPAQueryFactory queryFactory; - public CommonCodeRepositoryImpl(JPAQueryFactory queryFactory) { - super(CommonCodeEntity.class); - this.queryFactory = queryFactory; - } - @Override public Optional findByCodeId(Long id) { QCommonCodeEntity child = new QCommonCodeEntity("child"); From 704173840f854770c6afa7491daa597e484963f6 Mon Sep 17 00:00:00 2001 From: teddy Date: Wed, 26 Nov 2025 17:07:08 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80,=20=EC=B6=94=EB=A1=A0=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20dashboard=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/kamcoback/auth/AuthApiController.java | 44 +++++++++++- .../kamco/cd/kamcoback/auth/dto/AuthDto.java | 68 ++++++++++++++++--- .../kamcoback/auth/service/AuthService.java | 28 ++++++++ .../config/GlobalExceptionHandler.java | 6 +- .../InferenceResultApiController.java | 19 +----- .../inference/dto/InferenceResultDto.java | 4 +- .../service/InferenceResultService.java | 18 +++++ .../kamcoback/postgres/QuerydslOrderUtil.java | 7 +- .../postgres/core/AuthCoreService.java | 26 +++++++ .../postgres/entity/ErrorLogEntity.java | 3 +- .../postgres/entity/ModelVerEntity.java | 3 +- .../kamcoback/postgres/entity/UserEntity.java | 11 ++- .../InferenceResultRepositoryImpl.java | 2 +- .../repository/auth/AuthRepository.java | 4 +- .../repository/auth/AuthRepositoryCustom.java | 4 +- .../repository/auth/AuthRepositoryImpl.java | 41 ++++++++++- .../model/ModelMngRepositoryImpl.java | 20 ++++-- 17 files changed, 246 insertions(+), 62 deletions(-) create mode 100644 src/main/java/com/kamco/cd/kamcoback/auth/service/AuthService.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/core/AuthCoreService.java diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java b/src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java index 026063f2..760866d8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/AuthApiController.java @@ -1,15 +1,55 @@ package com.kamco.cd.kamcoback.auth; +import com.kamco.cd.kamcoback.auth.dto.AuthDto; +import com.kamco.cd.kamcoback.auth.service.AuthService; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +@Tag(name = "사용자 관리", description = "사용자 관리 API") @RestController +@RequiredArgsConstructor @RequestMapping("/api/auth") public class AuthApiController { - @PostMapping("/signup") - public void signup() { + private final AuthService authService; + @Operation(summary = "사용자 등록", description = "사용자를 등록 합니다.") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "201", + description = "사용자 등록 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Long.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping("/signup") + public ApiResponseDto signup( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "사용자 정보", + required = true, + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = AuthDto.Signup.class))) + @RequestBody + @Valid + AuthDto.Signup signup) { + return ApiResponseDto.createOK(authService.signup(signup)); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java b/src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java index cb0b4870..c1109498 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/dto/AuthDto.java @@ -1,29 +1,69 @@ package com.kamco.cd.kamcoback.auth.dto; -import lombok.AllArgsConstructor; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.Setter; +@RequiredArgsConstructor public class AuthDto { @Getter - public static class Signup { + @Setter + public static class Basic { + private String userAuth; private String userNm; private String userId; - private String userPw; private String empId; private String userEmail; + public Basic(String userAuth, String userNm, String userId, String empId, String userEmail) { + this.userAuth = userAuth; + this.userNm = userNm; + this.userId = userId; + this.empId = empId; + this.userEmail = userEmail; + } + } + + @Schema(name = "Signup", description = "사용자 등록 정보") + @Getter + @Setter + public static class Signup { + + @Schema(description = "구분", example = "관리자/라벨러/검수자 중 하나") + @NotBlank + private String userAuth; + + @NotBlank + @Schema(description = "이름", example = "홍길동") + private String userNm; + + @Schema(description = "ID", example = "gildong") + @NotBlank + private String userId; + + @Schema(description = "PW", example = "password") + @NotBlank + private String userPw; + + @Schema(description = "사번", example = "사번") + @NotBlank + private String empId; + + @Schema(description = "이메일", example = "gildong@naver.com") + @NotBlank + private String userEmail; + public Signup( - String userAuth, - String userNm, - String userId, - String userPw, - String empId, - String userEmail - ) { + String userAuth, + String userNm, + String userId, + String userPw, + String empId, + String userEmail) { this.userAuth = userAuth; this.userNm = userNm; this.userId = userId; @@ -32,4 +72,10 @@ public class AuthDto { this.userEmail = userEmail; } } + + @Getter + public static class User { + String userId; + String userPw; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/service/AuthService.java b/src/main/java/com/kamco/cd/kamcoback/auth/service/AuthService.java new file mode 100644 index 00000000..2828bb74 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/auth/service/AuthService.java @@ -0,0 +1,28 @@ +package com.kamco.cd.kamcoback.auth.service; + +import com.kamco.cd.kamcoback.auth.dto.AuthDto; +import com.kamco.cd.kamcoback.postgres.core.AuthCoreService; +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class AuthService { + private final AuthCoreService authCoreService; + private final PasswordEncoder passwordEncoder; + + /** + * 사용자 등록 + * + * @param signup + * @return + */ + @Transactional + public Long signup(AuthDto.Signup signup) { + signup.setUserPw(passwordEncoder.encode(signup.getUserPw())); + return authCoreService.signup(signup); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java index aea1d9b5..dfe79551 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java @@ -290,9 +290,9 @@ public class GlobalExceptionHandler { String stackTraceStr = Arrays.stream(stackTrace) - .map(StackTraceElement::toString) - .collect(Collectors.joining("\n")) - .substring(0, Math.min(stackTrace.length, 255)); + .map(StackTraceElement::toString) + .collect(Collectors.joining("\n")) + .substring(0, Math.min(stackTrace.length, 255)); ErrorLogEntity errorLogEntity = new ErrorLogEntity( diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java index b7f8900b..2e1988a7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java @@ -2,8 +2,6 @@ package com.kamco.cd.kamcoback.inference; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; -import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Dashboard; -import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Detail; import com.kamco.cd.kamcoback.inference.service.InferenceResultService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -96,12 +94,7 @@ public class InferenceResultApiController { @GetMapping("/detail") public ApiResponseDto getInferenceDetail( @Parameter(description = "목록 id", example = "1") @RequestParam Long id) { - // summary - InferenceResultDto.AnalResSummary summary = - inferenceResultService.getInferenceResultSummary(id); - // dashBoard - List dashboardList = this.getInferenceResultDashboard(id); - return ApiResponseDto.ok(new Detail(summary, dashboardList)); + return ApiResponseDto.ok(inferenceResultService.getDetail(id)); } @Operation(summary = "추론관리 분석결과 상세 목록", description = "추론관리 분석결과 상세 목록 geojson 데이터 조회") @@ -139,14 +132,4 @@ public class InferenceResultApiController { inferenceResultService.getInferenceResultGeomList(searchGeoReq); return ApiResponseDto.ok(geomList); } - - /** - * 분석결과 상세 대시보드 조회 - * - * @param id - * @return - */ - private List getInferenceResultDashboard(Long id) { - return inferenceResultService.getInferenceResultBasic(id); - } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index 439bb489..5e9fee96 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -188,10 +188,12 @@ public class InferenceResultDto { public static class Detail { AnalResSummary summary; List dashboard; + Long totalCnt; - public Detail(AnalResSummary summary, List dashboard) { + public Detail(AnalResSummary summary, List dashboard, Long totalCnt) { this.summary = summary; this.dashboard = dashboard; + this.totalCnt = totalCnt; } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index 4912bc19..fec7e466 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -2,6 +2,7 @@ package com.kamco.cd.kamcoback.inference.service; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Dashboard; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Detail; import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; import java.util.List; import lombok.RequiredArgsConstructor; @@ -57,4 +58,21 @@ public class InferenceResultService { InferenceResultDto.SearchGeoReq searchGeoReq) { return inferenceResultCoreService.getInferenceResultGeomList(searchGeoReq); } + + /** + * 분석결과 상제 정보 Summary, DashBoard + * + * @param id + * @return + */ + public Detail getDetail(Long id) { + // summary + InferenceResultDto.AnalResSummary summary = this.getInferenceResultSummary(id); + // 탐지건수 dashBoard + List dashboardList = this.getInferenceResultBasic(id); + // 전체 탐지건수 + Long totalCnt = dashboardList.stream().mapToLong(Dashboard::getClassAfterCnt).sum(); + + return new Detail(summary, dashboardList, totalCnt); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java b/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java index 371fef39..2eabf5f4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/QuerydslOrderUtil.java @@ -22,12 +22,9 @@ public class QuerydslOrderUtil { sort -> { Order order = sort.isAscending() ? Order.ASC : Order.DESC; // PathBuilder.get()는 컬럼명(String)을 동적 Path로 반환 - return new OrderSpecifier<>(order, entityPath.get(sort.getProperty(), Comparable.class)); + return new OrderSpecifier<>( + order, entityPath.get(sort.getProperty(), Comparable.class)); }) .toArray(OrderSpecifier[]::new); } - - - - } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/AuthCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/AuthCoreService.java new file mode 100644 index 00000000..35651c31 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/AuthCoreService.java @@ -0,0 +1,26 @@ +package com.kamco.cd.kamcoback.postgres.core; + +import com.kamco.cd.kamcoback.auth.dto.AuthDto; +import com.kamco.cd.kamcoback.postgres.repository.auth.AuthRepository; +import jakarta.persistence.EntityNotFoundException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class AuthCoreService { + private final AuthRepository authRepository; + + /** + * 사용자 등록 + * + * @param signup + * @return + */ + public Long signup(AuthDto.Signup signup) { + if (authRepository.findByUserId(signup.getUserId()).isPresent()) { + new EntityNotFoundException("중복된 아이디가 있습니다. " + signup.getUserId()); + } + return authRepository.signup(signup); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java index 429150e9..4cdc91e0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ErrorLogEntity.java @@ -4,9 +4,8 @@ import com.kamco.cd.kamcoback.log.dto.ErrorLogDto; import com.kamco.cd.kamcoback.log.dto.EventType; import com.kamco.cd.kamcoback.postgres.CommonCreateEntity; import jakarta.persistence.*; -import java.time.ZonedDateTime; - import jakarta.validation.constraints.Size; +import java.time.ZonedDateTime; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java index 59756568..ee0618ab 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelVerEntity.java @@ -6,14 +6,13 @@ import com.kamco.cd.kamcoback.postgres.CommonDateEntity; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; +import java.util.Map; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; -import java.util.Map; - @Getter @Setter @Entity diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java index 9f225ac5..45a2baf7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/UserEntity.java @@ -7,6 +7,7 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.SequenceGenerator; import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import java.time.ZonedDateTime; @@ -17,12 +18,17 @@ import org.hibernate.annotations.ColumnDefault; @Getter @Setter @Entity -@Table(name = "tb_user") +@Table( + name = "tb_user", + uniqueConstraints = {@UniqueConstraint(name = "ux_tb_user_user_id", columnNames = "user_id")}) public class UserEntity { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_user_id_gen") - @SequenceGenerator(name = "tb_user_id_gen", sequenceName = "tb_user_user_uid_seq", allocationSize = 1) + @SequenceGenerator( + name = "tb_user_id_gen", + sequenceName = "tb_user_user_uid_seq", + allocationSize = 1) @Column(name = "user_uid", nullable = false) private Long id; @@ -77,5 +83,4 @@ public class UserEntity { @NotNull @Column(name = "emp_id", nullable = false) private String empId; - } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java index 87743ca2..24a6b3cc 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java @@ -43,7 +43,7 @@ public class InferenceResultRepositoryImpl implements InferenceResultRepositoryC */ @Override public Page getInferenceResultList( - InferenceResultDto.SearchReq searchReq) { + InferenceResultDto.SearchReq searchReq) { Pageable pageable = searchReq.toPageable(); // "0000" 전체조회 BooleanBuilder builder = new BooleanBuilder(); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java index 8f24e37e..14efe43e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepository.java @@ -3,6 +3,4 @@ package com.kamco.cd.kamcoback.postgres.repository.auth; import com.kamco.cd.kamcoback.postgres.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; -public interface AuthRepository extends JpaRepository, AuthRepositoryCustom { - -} +public interface AuthRepository extends JpaRepository, AuthRepositoryCustom {} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java index a653e78a..7dffe31a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryCustom.java @@ -5,5 +5,7 @@ import com.kamco.cd.kamcoback.postgres.entity.UserEntity; import java.util.Optional; public interface AuthRepositoryCustom { - Optional signup(AuthDto.Signup signup); + Long signup(AuthDto.Signup signup); + + Optional findByUserId(String userId); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java index 1b450d71..e27a61d5 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/auth/AuthRepositoryImpl.java @@ -1,6 +1,7 @@ package com.kamco.cd.kamcoback.postgres.repository.auth; import com.kamco.cd.kamcoback.auth.dto.AuthDto; +import com.kamco.cd.kamcoback.postgres.entity.QUserEntity; import com.kamco.cd.kamcoback.postgres.entity.UserEntity; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.Optional; @@ -11,10 +12,44 @@ import org.springframework.stereotype.Repository; @RequiredArgsConstructor public class AuthRepositoryImpl implements AuthRepositoryCustom { private final JPAQueryFactory queryFactory; + private final QUserEntity userEntity = QUserEntity.userEntity; + /** + * 사용자 등록 + * + * @param signup + * @return + */ @Override - public Optional signup(AuthDto.Signup signup) { -// queryFactory.insert() - return Optional.empty(); + public Long signup(AuthDto.Signup signup) { + return queryFactory + .insert(userEntity) + .columns( + userEntity.userAuth, + userEntity.userId, + userEntity.userNm, + userEntity.userPw, + userEntity.userEmail, + userEntity.empId) + .values( + signup.getUserAuth(), + signup.getUserId(), + signup.getUserNm(), + signup.getUserPw(), + signup.getUserEmail(), + signup.getEmpId()) + .execute(); + } + + /** + * 유저 아이디 조회 + * + * @param userId + * @return + */ + @Override + public Optional findByUserId(String userId) { + return Optional.ofNullable( + queryFactory.selectFrom(userEntity).where(userEntity.userId.eq(userId)).fetchOne()); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java index 41fdc6d8..fddc3a37 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java @@ -52,11 +52,14 @@ public class ModelMngRepositoryImpl extends QuerydslRepositorySupport modelMngEntity.modelCate, modelVerEntity.id.as("modelVerUid"), modelVerEntity.modelVer, - Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.usedState), //사용여부 한글 명칭 - Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.modelState), //모델상태 한글 명칭 + Expressions.stringTemplate( + "fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.usedState), // 사용여부 한글 명칭 + Expressions.stringTemplate( + "fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.modelState), // 모델상태 한글 명칭 modelVerEntity.qualityProb, - Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 52, modelVerEntity.deployState), //배포상태 한글 명칭 - modelVerEntity.modelPath)) + Expressions.stringTemplate( + "fn_codenm_to_misc({0}, {1})", 52, modelVerEntity.deployState), // 배포상태 한글 명칭 + modelVerEntity.modelPath)) .from(modelMngEntity) .innerJoin(modelVerEntity) .on(modelMngEntity.id.eq(modelVerEntity.modelUid)) @@ -82,9 +85,12 @@ public class ModelMngRepositoryImpl extends QuerydslRepositorySupport Expressions.stringTemplate( "to_char({0}, 'YYYY-MM-DD')", modelVerEntity.createdDate) .as("createdDttm"), - Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.usedState), //사용여부 한글 명칭 - Expressions.stringTemplate("fn_codenm_to_misc({0}, {1})", 52, modelVerEntity.deployState), //배포상태 한글 명칭 - Expressions.stringTemplate( + Expressions.stringTemplate( + "fn_codenm_to_misc({0}, {1})", 51, modelVerEntity.usedState), // 사용여부 한글 명칭 + Expressions.stringTemplate( + "fn_codenm_to_misc({0}, {1})", + 52, modelVerEntity.deployState), // 배포상태 한글 명칭 + Expressions.stringTemplate( "to_char({0}, 'YYYY-MM-DD')", modelDeployHstEntity.deployDttm) .as("deployDttm"))) .from(modelMngEntity)