유저 컨트롤러
package shop.mtcoding.blog.user;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import shop.mtcoding.blog._core.utils.ApiUtil;
@RequiredArgsConstructor
@RestController
public class UserController {
private final UserService userService;
private final HttpSession session;
@GetMapping("/api/users/{id}")
public ResponseEntity<?> userinfo(@PathVariable Integer id) {
User user = userService.findById(id);
return ResponseEntity.ok(new ApiUtil(user));
}
// 아이디를 언제 받아와야 하는가 관리자가 로그인 해서 바꿀 수 있게 하려면 필요하다.
// 하지만 프론트엔드 입장에서는 주소를 이렇게 적는편이 알기 쉽고 좋다.
@PutMapping("/api/users/{id}")
public ResponseEntity<?> update(@PathVariable Integer id, @RequestBody UserRequest.UpdateDTO requestDTO) {
User sessionUser = (User) session.getAttribute("sessionUser");
userService.update(sessionUser.getId(), requestDTO);
session.setAttribute("sessionUser", sessionUser);
return ResponseEntity.ok(new ApiUtil(sessionUser));
}
@PostMapping("/join")
public ResponseEntity<?> join(@RequestBody UserRequest.JoinDTO requestDTO) {
User user = userService.join(requestDTO);
return ResponseEntity.ok(new ApiUtil(user));
}
@GetMapping("/logout")
public ResponseEntity<?> logout() {
session.invalidate();
return ResponseEntity.ok(new ApiUtil(null));
}
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody UserRequest.LoginDTO requestDTO) {
User sessionUser = userService.login(requestDTO);
session.setAttribute("sessionUser", sessionUser);
return ResponseEntity.ok(new ApiUtil(null));
}
}
보더 컨트롤러
package shop.mtcoding.blog.board;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import shop.mtcoding.blog._core.utils.ApiUtil;
import shop.mtcoding.blog.user.User;
import java.util.List;
@RequiredArgsConstructor
@RestController
public class BoardController {
private final BoardService boardService;
private final HttpSession session;
@GetMapping("/")
public ResponseEntity<?> main() {
List<Board> boardList = boardService.findAll();
return ResponseEntity.ok(new ApiUtil(boardList));
}
@GetMapping("/api/boards/{id}")
public ResponseEntity<?> findOne(@PathVariable Integer id) {
Board board = boardService.updateForm(id);
return ResponseEntity.ok(new ApiUtil(board));
}
@GetMapping("/api/boards/{id}/detail")
public ResponseEntity<?> detail(@PathVariable Integer id) {
User sessionUser = (User) session.getAttribute("sessionUser");
Board board = boardService.findByJoinUser(id, sessionUser);
return ResponseEntity.ok(new ApiUtil(board));
}
@PostMapping("/api/boards")
public ResponseEntity<?> save(@RequestBody BoardRequest.SaveDTO requestDTO) {
User sessionUser = (User) session.getAttribute("sessionUser");
Board board = boardService.save(requestDTO, sessionUser);
return ResponseEntity.ok(new ApiUtil(board));
}
@PutMapping("/api/boards/{id}")
public ResponseEntity<?> findById(@PathVariable Integer id, @RequestBody BoardRequest.UpdateDTO requestDTO) {
User sessionUser = (User) session.getAttribute("sessionUser");
Board board = boardService.update(id, sessionUser.getId(), requestDTO);
return ResponseEntity.ok(new ApiUtil(board));
}
// SSR(서버 사이드 렌더링)은 DTO 를 만들지 않아도 된다. 필요한 데이터만 렌더링해서 클라이언트에게
// 전달할 것이니까.
@DeleteMapping("/api/boards/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
User sessionUser = (User) session.getAttribute("sessionUser");
boardService.delete(id, sessionUser.getId());
return ResponseEntity.ok(new ApiUtil(null));
}
}