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

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

1. 문제

  • 사용자 상세 조회를 조회하는 API
  • ResponseMessage 클래스로 추상화해서 전송
{
    "header": {
        result: true|false,
        resultCode: string,
        message: error message or alert message,
        status: http result code
    },
    "body": 내려야 할 데이터가 있는 경우 Body를 통해 전송
}

 

 

 

2. 풀이

- ResponseMessageHeader.java

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

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

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

    private Boolean result;
    private String resultCode;
    private String message;
    private int status;
}

- ResponseMessage.java

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

import com.example.jpa.sample.user.entity.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import java.util.Optional;

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

    ResponseMessageHeader header;
    Object data;

    public static ResponseMessage fail(String message) {
        return ResponseMessage.builder()
                .header(ResponseMessageHeader.builder()
                    .result(false)
                        .resultCode("")
                        .message(message)
                        .status(HttpStatus.BAD_REQUEST.value())
                        .build())
                .data(null)
                .build();
    }

    public static ResponseMessage success(Object data) {
        return ResponseMessage.builder()
                .header(ResponseMessageHeader.builder()
                        .result(true)
                        .resultCode("")
                        .message("")
                        .status(HttpStatus.OK.value())
                        .build())
                .data(data)
                .build();
    }

//    private Long totalCount;
//    private List<User> data;
}

- 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.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.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));
    }
}
728x90