유저테이블 변경

This commit is contained in:
2025-11-26 12:22:33 +09:00
parent 315254bdd9
commit 2641b48460
11 changed files with 176 additions and 27 deletions

View File

@@ -57,6 +57,9 @@ dependencies {
// Apache Commons Compress for archive handling // Apache Commons Compress for archive handling
implementation 'org.apache.commons:commons-compress:1.26.0' implementation 'org.apache.commons:commons-compress:1.26.0'
// crypto
implementation 'org.springframework.security:spring-security-crypto'
} }
tasks.named('test') { tasks.named('test') {

View File

@@ -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() {
}
}

View File

@@ -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;
}
}
}

View File

@@ -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();
}
}

View File

@@ -22,8 +22,12 @@ public class QuerydslOrderUtil {
sort -> { sort -> {
Order order = sort.isAscending() ? Order.ASC : Order.DESC; Order order = sort.isAscending() ? Order.ASC : Order.DESC;
// PathBuilder.get()는 컬럼명(String)을 동적 Path로 반환 // 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); .toArray(OrderSpecifier[]::new);
} }
} }

View File

@@ -1,37 +1,81 @@
package com.kamco.cd.kamcoback.postgres.entity; package com.kamco.cd.kamcoback.postgres.entity;
import com.kamco.cd.kamcoback.postgres.CommonDateEntity; import jakarta.persistence.Column;
import jakarta.persistence.*; 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 java.time.ZonedDateTime;
import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
@Entity
@Getter @Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED) @Setter
@Entity
@Table(name = "tb_user") @Table(name = "tb_user")
public class UserEntity extends CommonDateEntity { public class UserEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tb_user_id_gen")
@Column(name = "user_uid") @SequenceGenerator(name = "tb_user_id_gen", sequenceName = "tb_user_user_uid_seq", allocationSize = 1)
@Column(name = "user_uid", nullable = false)
private Long id; private Long id;
@Column(name = "user_nm") @Size(max = 255)
@NotNull
@Column(name = "user_nm", nullable = false)
private String userNm; private String userNm;
@Column(name = "user_id") @Size(max = 255)
@NotNull
@Column(name = "user_id", nullable = false)
private String userId; private String userId;
@Column(name = "pswd") @Size(max = 255)
private String pswd; // TODO: 암호화 @NotNull
@Column(name = "user_pw", nullable = false)
private String userPw;
// @Enumerated(EnumType.STRING) @Size(max = 255)
private String state; // TODO: 추후 enum -> ACTIVE : 정상, LOCKED : 잠김, EXPIRED : 만료, WITHDRAWAL : 탈퇴 @NotNull
@ColumnDefault("'ACTIVE'")
@Column(name = "state", nullable = false)
private String state;
@Column(name = "date_withdrawal")
private ZonedDateTime dateWithdrawal; 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; private Long createdUid;
@Column(name = "updated_uid")
private Long updatedUid; 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;
} }

View File

@@ -45,7 +45,6 @@ public class InferenceResultRepositoryImpl implements InferenceResultRepositoryC
public Page<InferenceResultDto.AnalResList> getInferenceResultList( public Page<InferenceResultDto.AnalResList> getInferenceResultList(
InferenceResultDto.SearchReq searchReq) { InferenceResultDto.SearchReq searchReq) {
Pageable pageable = searchReq.toPageable(); Pageable pageable = searchReq.toPageable();
// "0000" 전체조회 // "0000" 전체조회
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
if (searchReq.getStatCode() != null && !"0000".equals(searchReq.getStatCode())) { if (searchReq.getStatCode() != null && !"0000".equals(searchReq.getStatCode())) {

View File

@@ -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<UserEntity, Long>, AuthRepositoryCustom {
}

View File

@@ -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<UserEntity> signup(AuthDto.Signup signup);
}

View File

@@ -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<UserEntity> signup(AuthDto.Signup signup) {
// queryFactory.insert()
return Optional.empty();
}
}

View File

@@ -12,18 +12,15 @@ import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; 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 @Repository
implements CommonCodeRepositoryCustom { @RequiredArgsConstructor
public class CommonCodeRepositoryImpl implements CommonCodeRepositoryCustom {
private final JPAQueryFactory queryFactory; private final JPAQueryFactory queryFactory;
public CommonCodeRepositoryImpl(JPAQueryFactory queryFactory) {
super(CommonCodeEntity.class);
this.queryFactory = queryFactory;
}
@Override @Override
public Optional<CommonCodeEntity> findByCodeId(Long id) { public Optional<CommonCodeEntity> findByCodeId(Long id) {
QCommonCodeEntity child = new QCommonCodeEntity("child"); QCommonCodeEntity child = new QCommonCodeEntity("child");