본문 바로가기

🌱JAVA/시나리오 개발

내 마음대로 API 개발하기

# 시나리오 작성

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 되는것을 확인 할 수 있다.

-  끝 -