Server๐Ÿงค/SpringBoot

[Spring] ์œ ์ € CRUD ๊ตฌํ˜„ํ•˜๊ธฐ

yujindonut 2022. 4. 28. 16:57
728x90

[DELETE]

UserController

@RestController
@RequestMapping("/users")
public class UserController {
    final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private final UserProvider userProvider;
    @Autowired
    private final UserService userService;
    @Autowired
    private final JwtService jwtService;




    public UserController(UserProvider userProvider, UserService userService, JwtService jwtService){
        this.userProvider = userProvider;
        this.userService = userService;
        this.jwtService = jwtService;
    }



    /**
     * ํšŒ์› ์กฐํšŒ API
     * [GET] /users
     * ์ด๋ฉ”์ผ ๊ฒ€์ƒ‰ ์กฐํšŒ API
     * [GET] /users? Email=
     * @return BaseResponse<GetUserRes>
     */
    //Query String
    @ResponseBody
    @GetMapping("") // (GET) 127.0.0.1:9000/users
    public BaseResponse<GetUserRes> getUsers(@RequestParam(required = true) String Email) {
        try{
            // TODO: email ๊ด€๋ จํ•œ ์งง์€ validation ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ ๋” ๋ถ€๊ฐ€์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”!
            if(Email.length()==0){
                return new BaseResponse<>(POST_USERS_EMPTY_EMAIL);
            }
            // ์ด๋ฉ”์ผ ์ •๊ทœํ‘œํ˜„
            if(!isRegexEmail(Email)){
                return new BaseResponse<>(POST_USERS_INVALID_EMAIL);
            }
            GetUserRes getUsersRes = userProvider.getUsersByEmail(Email);
            return new BaseResponse<>(getUsersRes);
        } catch(BaseException exception){
            return new BaseResponse<>((exception.getStatus()));
        }
    }

    @ResponseBody
    @GetMapping("/{userIdx}") // (GET) 127.0.0.1:9000/users/:userIdx
    public BaseResponse<GetUserRes> getUserByIdx(@PathVariable("userIdx")int userIdx) {
        try{

            GetUserRes getUsersRes = userProvider.getUsersByIdx(userIdx);
            return new BaseResponse<>(getUsersRes);
        } catch(BaseException exception){
            return new BaseResponse<>((exception.getStatus()));
        }
    }
    @ResponseBody
    @DeleteMapping("/delete/{userIdx}") // (GET) 127.0.0.1:9000/users/:userIdx
    public BaseResponse<Object> deleteUserByIdx(@PathVariable("userIdx")int userIdx) {
        try{
            if(userProvider.getUsersByIdx(userIdx) == null){
                return new BaseResponse<>(USERS_EMPTY_USER_ID);
            }
            userProvider.deleteUser(userIdx);
            return new BaseResponse<>(userProvider.deleteUser(userIdx));
        } catch (BaseException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * ํšŒ์›๊ฐ€์ž… API
     * [POST] /users
     * @return BaseResponse<PostUserRes>
     */
    // Body
    @ResponseBody
    @PostMapping("") // (POST) 127.0.0.1:9000/users
    public BaseResponse<PostUserRes> createUser(@RequestBody PostUserReq postUserReq) {
        // TODO: email ๊ด€๋ จํ•œ ์งง์€ validation ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ ๋” ๋ถ€๊ฐ€์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”!
        if(postUserReq.getEmail() == null){
            return new BaseResponse<>(POST_USERS_EMPTY_EMAIL);
        }
        // ์ด๋ฉ”์ผ ์ •๊ทœํ‘œํ˜„
        if(!isRegexEmail(postUserReq.getEmail())){
            return new BaseResponse<>(POST_USERS_INVALID_EMAIL);
        }
        try{
            PostUserRes postUserRes = userService.createUser(postUserReq);
            return new BaseResponse<>(postUserRes);
        } catch(BaseException exception){
            return new BaseResponse<>((exception.getStatus()));
        }
    }

    /**
     * ์œ ์ €์ •๋ณด๋ณ€๊ฒฝ API
     * [PATCH] /users/:userIdx
     * @return BaseResponse<String>
     */
    @ResponseBody
    @PatchMapping("/{userIdx}") // (PATCH) 127.0.0.1:9000/users/:userIdx
    public BaseResponse<String> modifyUserName(@PathVariable("userIdx") int userIdx, @RequestBody User user){
        try {
            /* TODO: jwt๋Š” ๋‹ค์Œ์ฃผ์ฐจ์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค!
            jwt์—์„œ idx ์ถ”์ถœ.
            int userIdxByJwt = jwtService.getUserIdx();
            userIdx์™€ ์ ‘๊ทผํ•œ ์œ ์ €๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธ
            if(userIdx != userIdxByJwt){
                return new BaseResponse<>(INVALID_USER_JWT);
            }
            */

            PatchUserReq patchUserReq = new PatchUserReq(userIdx,user.getNickName());
            userService.modifyUserName(patchUserReq);

            String result = "";
        return new BaseResponse<>(result);
        } catch (BaseException exception) {
            return new BaseResponse<>((exception.getStatus()));
        }
    }

}

UserDAO

@Repository
public class UserDao {

    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void setDataSource(DataSource dataSource){
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public List<GetUserRes> getUsers(){
        String getUsersQuery = "select userIdx,name,nickName,email from User";
        return this.jdbcTemplate.query(getUsersQuery,
                (rs,rowNum) -> new GetUserRes(
                        rs.getInt("userIdx"),
                        rs.getString("name"),
                        rs.getString("nickName"),
                        rs.getString("email")
                ));
    }

    public GetUserRes getUsersByEmail(String email){
        String getUsersByEmailQuery = "select userIdx,name,nickName,email from User where email=?";
        String getUsersByEmailParams = email;
        return this.jdbcTemplate.queryForObject(getUsersByEmailQuery,
                (rs, rowNum) -> new GetUserRes(
                        rs.getInt("userIdx"),
                        rs.getString("name"),
                        rs.getString("nickName"),
                        rs.getString("email")),
                getUsersByEmailParams);
    }


    public GetUserRes getUsersByIdx(int userIdx){
        String getUsersByIdxQuery = "select userIdx,name,nickName,email from User where userIdx=?";
        int getUsersByIdxParams = userIdx;
        return this.jdbcTemplate.queryForObject(getUsersByIdxQuery,
                (rs, rowNum) -> new GetUserRes(
                        rs.getInt("userIdx"),
                        rs.getString("name"),
                        rs.getString("nickName"),
                        rs.getString("email")),
                getUsersByIdxParams);
    }

    public int createUser(PostUserReq postUserReq){
        String createUserQuery = "insert into User (name, nickName, phone, email, password) VALUES (?,?,?,?,?)";
        Object[] createUserParams = new Object[]{postUserReq.getName(), postUserReq.getNickName(),postUserReq.getPhone(), postUserReq.getEmail(), postUserReq.getPassword()};
        this.jdbcTemplate.update(createUserQuery, createUserParams);

        String lastInserIdQuery = "select last_insert_id()";
        return this.jdbcTemplate.queryForObject(lastInserIdQuery,int.class);
    }

    public int checkEmail(String email){
        String checkEmailQuery = "select exists(select email from User where email = ?)";
        String checkEmailParams = email;
        return this.jdbcTemplate.queryForObject(checkEmailQuery,
                int.class,
                checkEmailParams);

    }

    public int modifyUserName(PatchUserReq patchUserReq){
        String modifyUserNameQuery = "update User set nickName = ? where userIdx = ? ";
        Object[] modifyUserNameParams = new Object[]{patchUserReq.getNickName(), patchUserReq.getUserIdx()};

        return this.jdbcTemplate.update(modifyUserNameQuery,modifyUserNameParams);
    }

    // Delete User
    public int deleteUser(int userId) {
        String deleteUserByIdQuery = "delete from User where userIdx = ?";
        int deleteUsersByIdParams = userId;
        return this.jdbcTemplate.update(deleteUserByIdQuery,deleteUsersByIdParams);
    }


}

UserProvider

//Provider : Read์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ
@Service
public class UserProvider {

    private final UserDao userDao;
    private final JwtService jwtService;


    final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    public UserProvider(UserDao userDao, JwtService jwtService) {
        this.userDao = userDao;
        this.jwtService = jwtService;
    }


    public GetUserRes getUsersByEmail(String email) throws BaseException{
        try{
            GetUserRes getUsersRes = userDao.getUsersByEmail(email);
            return getUsersRes;
        }
        catch (Exception exception) {
            throw new BaseException(DATABASE_ERROR);
        }
                    }


    public GetUserRes getUsersByIdx(int userIdx) throws BaseException{
        try{
            GetUserRes getUsersRes = userDao.getUsersByIdx(userIdx);
            return getUsersRes;
        }
        catch (Exception exception) {
            throw new BaseException(DATABASE_ERROR);
        }
    }


    public int checkEmail(String email) throws BaseException{
        try{
            return userDao.checkEmail(email);
        } catch (Exception exception){
            throw new BaseException(DATABASE_ERROR);
        }
    }

    public int deleteUser(int userIdx) throws BaseException{
        try{
            return userDao.deleteUser(userIdx);
        } catch (Exception exception){
            throw new BaseException(DATABASE_ERROR);
        }
    }

}

UserService

// Service Create, Update, Delete ์˜ ๋กœ์ง ์ฒ˜๋ฆฌ
@Service
public class UserService {
    final Logger logger = LoggerFactory.getLogger(this.getClass());

    private final UserDao userDao;
    private final UserProvider userProvider;
    private final JwtService jwtService;


    @Autowired
    public UserService(UserDao userDao, UserProvider userProvider, JwtService jwtService) {
        this.userDao = userDao;
        this.userProvider = userProvider;
        this.jwtService = jwtService;

    }


    public PostUserRes createUser(PostUserReq postUserReq) throws BaseException {
        // ์ด๋ฉ”์ผ ์ค‘๋ณต ํ™•์ธ
        if(userProvider.checkEmail(postUserReq.getEmail()) ==1){
            throw new BaseException(POST_USERS_EXISTS_EMAIL);
        }

        String pwd;
        try{
            //์•”ํ˜ธํ™”
            pwd = new SHA256().encrypt(postUserReq.getPassword());  postUserReq.setPassword(pwd);
        } catch (Exception ignored) {
            throw new BaseException(PASSWORD_ENCRYPTION_ERROR);
        }
        try{
            int userIdx = userDao.createUser(postUserReq);
            //jwt ๋ฐœ๊ธ‰.
            // TODO: jwt๋Š” ๋‹ค์Œ์ฃผ์ฐจ์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค!
            String jwt = jwtService.createJwt(userIdx);
            return new PostUserRes(jwt,userIdx);
        } catch (Exception exception) {
            throw new BaseException(DATABASE_ERROR);
        }
    }

    public void modifyUserName(PatchUserReq patchUserReq) throws BaseException {
        try{
            int result = userDao.modifyUserName(patchUserReq);
            if(result == 0){
                throw new BaseException(MODIFY_FAIL_USERNAME);
            }
        } catch(Exception exception){
            throw new BaseException(DATABASE_ERROR);
        }
    }
    public void deleteUser(int userIdx) {
        userDao.deleteUser(userIdx);
    }
}

 

ํ™•์ธํ•˜๊ธฐ

- Post Man์—์„œ@DeleteMapping ์‚ฌ์šฉ์‹œ ์˜†์— ์™ผ์ชฝ์„ delete๋กœ ๋ณ€๊ฒฝ

๋ฐ์ดํ„ฐ ๊ทธ๋ฆฝ์—์„œ ์ž˜ ์‚ญ์ œ๋˜์–ด ์žˆ๋‹ค!

๋งŒ์•ฝ url์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด

728x90