[Practice] 관리자 API 만들기 (5)
2021. 4. 15. 14:28ㆍSpring/Practice
1. 문제
- 사용자 정보를 삭제하는 API
- 작성된 게시글이 있을 경우 예외 발생
2. 풀이
- NoticeRepository.java
package com.example.jpa.sample.notice.repository;
import com.example.jpa.sample.notice.entity.Notice;
import com.example.jpa.sample.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@Repository
public interface NoticeRepository extends JpaRepository<Notice, Long> {
Optional<List<Notice>> findByIdIn(List<Long> idList);
Optional<List<Notice>> findByTitleAndContentsAndRegDateIsGreaterThanEqual(String title, String contents, LocalDateTime regDate);
int countByTitleAndContentsAndRegDateIsGreaterThanEqual(String title, String contents, LocalDateTime regDate);
List<Notice> findByUser(User user);
long coundByUser(User user);
}
- ApiAdminUserController.java
package com.example.jpa.sample.user.controller;
import com.example.jpa.sample.notice.repository.NoticeRepository;
import com.example.jpa.sample.user.entity.User;
import com.example.jpa.sample.user.exception.UserNotFoundException;
import com.example.jpa.sample.user.model.ResponseMessage;
import com.example.jpa.sample.user.model.UserSearch;
import com.example.jpa.sample.user.model.UserStatusInput;
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.*;
import java.util.List;
import java.util.Optional;
@RequiredArgsConstructor
@RestController
public class ApiAdminUserController {
private final UserRepository userRepository;
private final NoticeRepository noticeRepository;
/*
// 문제 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));
}
// 문제 4
@PatchMapping("/api/admin/user/{id}/status")
public ResponseEntity<?> userStatus(@PathVariable Long id, @RequestBody UserStatusInput userStatusInput) {
Optional<User> optionalUser = userRepository.findById(id);
if(!optionalUser.isPresent()) {
return new ResponseEntity<>(ResponseMessage.fail("사용자 정보가 존재하지 않습니다."), HttpStatus.BAD_REQUEST);
}
User user = optionalUser.get();
user.setStatus(userStatusInput.getStatus());
userRepository.save(user);
return ResponseEntity.ok().build();
}
// 문제 5
@DeleteMapping("/api/admin/user/{id}")
public ResponseEntity<?> deleteUser(@PathVariable Long id) {
Optional<User> optionalUser = userRepository.findById(id);
if(!optionalUser.isPresent()) {
return new ResponseEntity<>(ResponseMessage.fail("사용자 정보가 존재하지 않습니다."), HttpStatus.BAD_REQUEST);
}
User user = optionalUser.get();
if(noticeRepository.coundByUser(user) > 0) {
return new ResponseEntity<>(ResponseMessage.fail("사용자가 작성한 공지사항이 있습니다."), HttpStatus.BAD_REQUEST);
}
userRepository.delete(user);
return ResponseEntity.ok().build();
}
}
728x90
'Spring > Practice' 카테고리의 다른 글
[Practice] 관리자 API 만들기 (7) (0) | 2021.04.15 |
---|---|
[Practice] 관리자 API 만들기 (6) (0) | 2021.04.15 |
[Practice] 관리자 API 만들기 (4) (0) | 2021.04.15 |
[Practice] 관리자 API 만들기 (3) (0) | 2021.04.15 |