[Practice] 관리자 API 만들기 (3)

2021. 4. 15. 13:33Spring/Practice

1. 문제

  • 사용자 목록 조회에 대한 검색을 반환하는 API
  • 이메일, 이름, 전화번호에 대한 검색결과를 리턴 (각 항목은 or 조건)

 

 

2. 풀이

- UserSearch.java

package com.example.jpa.sample.user.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class UserSearch {

    private String email;
    private String name;
    private String phone;
}

- ApiAdminUserController.java

package com.example.jpa.sample.user.controller;

import com.example.jpa.sample.user.entity.User;
import com.example.jpa.sample.user.model.ResponseMessage;
import com.example.jpa.sample.user.model.UserSearch;
import com.example.jpa.sample.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Optional;

@RequiredArgsConstructor
@RestController
public class ApiAdminUserController {

    private final UserRepository userRepository;

    /*
    // 문제 1
    @GetMapping("/api/admin/user")
    public ResponseMessage userList() {

        Long totalUserCount = userRepository.count();
        List<User> userList = userRepository.findAll();

        return ResponseMessage.builder()
                .totalCount(totalUserCount)
                .data(userList)
                .build();
    }
     */

    // 문제 2
    @GetMapping("/api/admin/user/{id}")
    public ResponseEntity<?> userDetail(@PathVariable Long id) {

        Optional<User> user = userRepository.findById(id);
        if(!user.isPresent()) {
            return new ResponseEntity<>(ResponseMessage.fail("사용자 정보가 존재하지 않습니다."), HttpStatus.BAD_REQUEST);
        }

        return ResponseEntity.ok().body(ResponseMessage.success(user));
    }

    // 문제 3
    @GetMapping("/api/admin/user/search")
    public ResponseEntity<?> findUser(@RequestBody UserSearch userSearch) {
        List<User> userList = userRepository.findByEmailContainsOrPhoneContainsOrNameContains(userSearch.getEmail(), userSearch.getPhone(), userSearch.getName());

        return ResponseEntity.ok().body(ResponseMessage.success(userList));
    }

}
728x90