# 시나리오 작성
1. 사용자가 가입을 하면 random 함수 1백만개의 숫자중 1개의 고유한 값을 user테이블에 insert 한다.
2. userid와 1백만개의 숫자를 조합하여 인증 테이블에 insert 한다.
- 시나리오를 억지러 만드니까 산으로 가는 느낌은 있는데 해보자. ㅋㅋ
1. 사용자가 가입을 하면 random함수 백만개중 1개의 고유값을 user테이블 fixed_value값에 insert 한다.
- 컨트롤러는 변경이 없다.
/**
* 시나리오
* 1. userid 값이 하나씩 증가하면서 입력 될때, 1백만개의 숫자중 1개의 값을 fixed_value 라는 컬럼에 자동으로 입력되도록 한다.
* 2. userid와 1백만개의 숫자를 조합하여 인증 테이블에 insert 한다.
*/
@PostMapping("/fixed_value_insert")
public GeneralResponse<?> fixed_value_insert(@RequestParam(value = "userid") Long userid,
@RequestParam(value = "published") Boolean published,
@RequestParam(value = "user_description") String user_description,
@RequestParam(value = "username") String username) {
return userService.fixed_value_insert(userid, published, user_description, username);
}
2. 서비스
- 서비스에서는 일단 pk + 1 씩 해주고~
- 자바 유틸 클래스를 임포트 및 객체를 생성
import java.util.Random; // 클래스 import
@Slf4j
@RequiredArgsConstructor
@Service
public class UserService {
Random rand = new Random(); // 객체 생성
- fixed_value라는 변수로 1백만개중 1개의 값을 랜덤으로 받아온다.
public GeneralResponse<?> fixed_value_insert(Long userid, Boolean published, String user_description, String username) {
int user_id_plus = userRepository.user_id_plus1();
int user_id_plus1 = user_id_plus + 1;
int fixed_value = rand.nextInt(100000000); // 랜덤 값 받아옴
int optionalUserEntityInsert = userRepository.fixed_value_insert(user_id_plus1, published, user_description, username, fixed_value);
System.out.println("스트링 값 조회: " + optionalUserEntityInsert);
return GeneralResponse.builder()
.status(true)
.message("get user_list")
.dataString(optionalUserEntityInsert)
.data(optionalUserEntityInsert)
.build();
}
3. Repository
// 고유 id + 1씩 증가
@Transactional
@Query(value = "select userid from user_table ORDER by userid DESC limit 1", nativeQuery = true)
int user_id_plus1();
// fixed_value 값을 insert
@Transactional
@Modifying
@Query(value = "insert into user_table " +
"(userid, published, user_description, username, fixed_value) " +
"VALUES(:user_id_plus1, :published, :user_description, :username, :fixed_value)", nativeQuery = true)
int fixed_value_insert(@Param("user_id_plus1") int user_id_plus1,
@Param("published") Boolean published,
@Param("user_description") String user_description,
@Param("username") String username,
@Param("fixed_value") int fixed_value);
4. 여기까지 작업 확인 및 DB 조회
5. 새로운 테이블을 생성하고 user_table에 입력할때 일부 값을 auth_table에 입력
- 위에서는 fixedvalue값을 user_table의 fixed_value컬럼에 Insert를 수행 했다.
- 이제 auth_table을 생성하고 user_table에서 입력되는 값을 일부 가공하여 auth_table에 Insert하는 작업을 수행한다.
- auth_table Entity 생성
@Getter
@Setter
@ToString
@RequiredArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "Auth_table")
@Table(name = "Auth_table")
public class AuthEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String userid;
@Column(name = "fixed_value")
private int fixed_value;
@Column(name = "userid_fixed_value")
private String userid_fixed_value;
@Column(name = "description")
private String description;
}
6. Controller
/**
* 시나리오
* 1. userid 값이 하나씩 증가하면서 입력 될때, 1백만개의 숫자중 1개의 값을 fixed_value 라는 컬럼에 자동으로 입력되도록 한다.
* 2. userid 와 fixed_value 값을 연결하고 해당 값을 auth_table 에 Insert 수행한다.
*/
@PostMapping("/fixed_value_with_username")
public GeneralResponse<?> fixed_value_with_userid(@RequestParam(value = "userid") Long userid,
@RequestParam(value = "published") Boolean published,
@RequestParam(value = "user_description") String user_description,
@RequestParam(value = "username") String username) {
return userService.fixed_value_with_username(userid, published, user_description, username);
}
7. Service
public GeneralResponse<?> fixed_value_with_username(Long userid, Boolean published, String user_description, String username) {
int user_id_plus = userRepository.user_id_plus1();
int user_id_plus1 = user_id_plus + 1;
int fixed_value = rand.nextInt(100000000);
int optionalUserEntityInsert = userRepository.fixed_value_insert(user_id_plus1, published, user_description, username, fixed_value);
String insert_value_userid_fixed_value = username + "::::" + fixed_value; // 중간 구분자 추가
System.out.println("change_Value: " + username + ":::::" + "insert_value_userid_fixed_value" + insert_value_userid_fixed_value );
int insert_auth_table_userid_fixed_value = userRepository.insert_auth_table_username_fixed_value(user_id_plus1, user_description, fixed_value, insert_value_userid_fixed_value);
System.out.println("스트링 값 조회: " + insert_auth_table_userid_fixed_value);
return GeneralResponse.builder()
.status(true)
.message("get user_list")
.dataString(optionalUserEntityInsert)
.data(optionalUserEntityInsert)
.dataUser(insert_auth_table_userid_fixed_value)
.build();
}
8. Repository
@Transactional
@Query(value = "select userid from user_table ORDER by userid DESC limit 1", nativeQuery = true)
int user_id_plus1();
@Transactional
@Modifying
@Query(value = "insert into user_table " +
"(userid, published, user_description, username, fixed_value) " +
"VALUES(:user_id_plus1, :published, :user_description, :username, :fixed_value)", nativeQuery = true)
int fixed_value_insert(@Param("user_id_plus1") int user_id_plus1,
@Param("published") Boolean published,
@Param("user_description") String user_description,
@Param("username") String username,
@Param("fixed_value") int fixed_value);
@Transactional
@Modifying
@Query(value = "insert into auth_table " +
"(userid, description, fixed_value, userid_fixed_value) " +
"VALUES(:user_id_plus1, :user_description, :fixed_value, :insert_value_userid_fixed_value)", nativeQuery = true)
int insert_auth_table_username_fixed_value(@Param("user_id_plus1") int user_id_plus1,
@Param("user_description") String user_description,
@Param("fixed_value") int fixed_value,
@Param("insert_value_userid_fixed_value") String insert_value_userid_fixed_value);
9. 최종 결과 확인
- 아래의 최종 결과를 보면 user_table에 Postman에서 입력하는 값이 입력됨과 동시에 auth_table에서도 user_table에 입력되는 값들중 일부 값을 가공하여 Insert 되는것을 확인 할 수 있다.
- 끝 -
'🌱JAVA > 시나리오 개발' 카테고리의 다른 글
<SpringBoot> 게시판에 검색 기능 구현하기 (0) | 2023.04.28 |
---|---|
<SpringBoot> Swagger 적용해보기 (0) | 2023.04.27 |
<SpringBoot> insert2개 수행, 1개는 그냥 insert, 1개는 Admin 붙여서 insert (0) | 2023.04.27 |
<SpringBoot> 댓글이 있는 게시글 삭제 시 오류 메세지 출력 및 게시글 삭제하기 (0) | 2023.04.27 |
Insert 시 PK 값을 자동으로 늘려주는 API (0) | 2022.09.05 |