DELETE 메서드로 사용자 삭제하기

Soo·2024년 3월 24일
post-thumbnail

사용자를 삭제하기 위해서 먼저 삭제 기능을 만들겠습니다.

UserDaoService

  • deleteById()
package study.rest.webservices.restfulwebservices.user;

import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

@Component
public class UserDaoService {

    private static List<User> users = new ArrayList<>();

    private static Integer usersCount = 0;

    static {
        users.add(new User(++usersCount, "김철수", LocalDate.now().minusYears(30)));
        users.add(new User(++usersCount, "문상훈", LocalDate.now().minusYears(25)));
        users.add(new User(++usersCount, "선우소희", LocalDate.now().minusYears(20)));
    }

    public List<User> findAll() {
        return users;
    }

    public User save(User user) {
        user.setId(++usersCount);
        users.add(user);
        return user;
    }

    public User findOne(int id) {
        Predicate<? super User> predicate = user -> user.getId().equals(id);
        return users.stream().filter(predicate).findFirst().orElse(null);
    }

    public void deleteById(int id) {
        Predicate<? super User> predicate = user -> user.getId().equals(id);
        users.removeIf(predicate);
    }
}

removeIf: 컬렉션 클래스들에서 제공되는 메서드로, 주어진 조건에 해당하는 요소들을 컬렉션에서 제거하는 기능을 합니다.

UserResource에서 삭제기능을 담당하는 메서드를 생성합니다.

UserResource

  • deleteUser()
package study.rest.webservices.restfulwebservices.user;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.net.URI;
import java.util.List;

@RestController
public class UserResource {

    private UserDaoService service;

    public UserResource(UserDaoService service) {
        this.service = service;
    }

    //GET /users
    @GetMapping("/users")
    public List<User> retrieveAllUsers() {
        return service.findAll();
    }

    //GET /users/{id}
    @GetMapping("/users/{id}")
    public User retrieveUser(@PathVariable int id) {
        User user = service.findOne(id);

        if (user == null) {
            throw new UserNotFoundException("id:" + id);
        }

        return user;
    }

    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable int id) {
        service.deleteById(id);
    }

    //POST /users
    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User savedUser = service.save(user);
        // users/4 => users/{id},  user.getID
        URI location = ServletUriComponentsBuilder.fromCurrentRequest()
                .path("{id}")
                .buildAndExpand(savedUser.getId())
                .toUri();
        return ResponseEntity.created(location).build();
    }
}

UserDaoService에서 만들어 놓은 deleteById()를 사용해서 @PathVariable로 받아온 id를 조회한 후 삭제 합니다.

실행

  • id=1인 유저를 삭제하겠습니다.
  • id=1인 유저가 정상적으로 삭제되었습니다.

0개의 댓글