[Practice] 사용자 관련 API 만들기 (4)
2021. 4. 17. 17:08ㆍSpring/Practice
1. 문제
- 내가 작성한 게시글의 코멘트 목록을 리턴하는 API
2. 풀이
- schema.sql
DROP TABLE IF EXISTS USER;
DROP TABLE IF EXISTS NOTICE;
create table USER (
ID BIGINT auto_increment primary key,
EMAIL VARCHAR(255),
NAME VARCHAR(255),
PASSWORD VARCHAR(255),
PHONE VARCHAR(255),
REG_DATE TIMESTAMP,
UPDATE_DATE TIMESTAMP,
STATUS INTEGER,
LOCK_YN BOOLEAN DEFAULT FALSE
);
create table NOTICE (
ID BIGINT auto_increment primary key,
TITLE VARCHAR(255),
CONTENTS VARCHAR(255),
HITS INTEGER,
LIKES INTEGER,
REG_DATE TIMESTAMP,
UPDATE_DATE TIMESTAMP,
DELETED BOOLEAN DEFAULT FALSE,
DELETED_DATE TIMESTAMP,
USER_ID BIGINT,
constraint FK_NOTICE_USER_ID foreign key(USER_ID) references USER(ID)
);
create table NOTICE_LIKE (
ID BIGINT auto_increment primary key,
NOTICE_ID BIGINT,
constraint FK_NOTICE_LIKE_NOTICE_ID foreign key(NOTICE_ID) references NOTICE(ID),
USER_ID BIGINT,
constraint FK_NOTICE_LIKE_USER_ID foreign key(USER_ID) references USER(ID)
);
create table USER_LOGIN_HISTORY (
ID BIGINT auto_increment primary key,
USER_ID BIGINT,
EMAIL VARCHAR(255),
NAME VARCHAR(255),
LOGIN_DATE TIMESTAMP,
IP_ADDR VARCHAR(255)
);
create table BOARD_TYPE (
ID BIGINT auto_increment primary key,
BOARD_NAME VARCHAR(255),
REG_DATE TIMESTAMP,
UPDATE_DATE TIMESTAMP,
USING_YN BOOLEAN DEFAULT FALSE
);
-- auto-generated definition
create table BOARD
(
ID BIGINT auto_increment primary key,
CONTENTS VARCHAR(255),
REG_DATE TIMESTAMP,
TITLE VARCHAR(255),
BOARD_TYPE_ID BIGINT,
USER_ID BIGINT,
TOP_YN BOOLEAN DEFAULT FALSE,
PUBLISH_START_DATE DATE,
PUBLISH_END_DATE DATE,
constraint FK_BOARD_BOARD_TYPE_ID foreign key (BOARD_TYPE_ID) references BOARD_TYPE (ID),
constraint FK_BOARD_USER_ID foreign key (USER_ID) references USER (ID)
);
-- auto-generated definition
create table BOARD_HITS
(
ID BIGINT auto_increment primary key,
REG_DATE TIMESTAMP,
BOARD_ID BIGINT,
USER_ID BIGINT,
constraint FK_BOARD_HITS_BOARD_ID foreign key (BOARD_ID) references BOARD (ID),
constraint FK_BOARD_HITS_USER_ID foreign key (USER_ID) references USER (ID)
);
create table BOARD_LIKE
(
ID BIGINT auto_increment primary key,
REG_DATE TIMESTAMP,
BOARD_ID BIGINT,
USER_ID BIGINT,
constraint FK_BOARD_LIKE_BOARD_ID foreign key (BOARD_ID) references BOARD (ID),
constraint FK_BOARD_LIKE_USER_ID foreign key (USER_ID) references USER (ID)
);
-- auto-generated definition
create table BOARD_BAD_REPORT
(
ID BIGINT auto_increment primary key,
BOARD_CONTENTS VARCHAR(255),
BOARD_ID BIGINT,
BOARD_REG_DATE TIMESTAMP,
BOARD_TITLE VARCHAR(255),
BOARD_USER_ID BIGINT,
COMMENTS VARCHAR(255),
USER_EMAIL VARCHAR(255),
USER_ID BIGINT,
USER_NAME VARCHAR(255)
);
-- auto-generated definition
create table BOARD_SCRAP
(
ID BIGINT auto_increment primary key,
BOARD_CONTENTS VARCHAR(255),
BOARD_ID BIGINT,
BOARD_REG_DATE TIMESTAMP,
BOARD_TITLE VARCHAR(255),
BOARD_TYPE_ID BIGINT,
BOARD_USER_ID BIGINT,
REG_DATE TIMESTAMP,
USER_ID BIGINT,
constraint FK_BOARD_SCRAP_USER_ID foreign key (USER_ID) references USER (ID)
);
-- auto-generated definition
create table BOARD_BOOKMARK
(
ID BIGINT auto_increment primary key,
BOARD_ID BIGINT,
BOARD_TITLE VARCHAR(255),
BOARD_TYPE_ID BIGINT,
BOARD_URL VARCHAR(255),
REG_DATE TIMESTAMP,
USER_ID BIGINT,
constraint FK_BOARD_BOOKMARK_USER_ID foreign key (USER_ID) references USER (ID)
);
create table USER_INTEREST (
ID BIGINT auto_increment primary key,
USER_ID BIGINT,
INTEREST_USER_ID BIGINT,
REG_DATE TIMESTAMP,
constraint FK_USER_INTEREST_USER_ID foreign key (USER_ID) references USER (ID),
constraint FK_USER_INTEREST_INTEREST_USER_ID foreign key (INTEREST_USER_ID) references USER (ID)
);
-- auto-generated definition
create table BOARD_COMMENT
(
ID BIGINT auto_increment primary key,
COMMENTS VARCHAR(255),
REG_DATE TIMESTAMP,
BOARD_ID BIGINT,
USER_ID BIGINT,
constraint FK_BOARD_COMMENT_USER_ID foreign key (USER_ID) references USER (ID),
constraint FK_BOARD_COMMENT_BOARD_ID foreign key (BOARD_ID) references BOARD (ID)
);
- data.sql
INSERT INTO USER(ID, EMAIL, PASSWORD, PHONE, REG_DATE, UPDATE_DATE, NAME, STATUS, LOCK_YN) VALUES(1, 'test1@naver.com', '1111', '010-1111-1111', '2021-01-01 01:01:01.000000', null, '테스트1', 1, 0);
INSERT INTO USER(ID, EMAIL, PASSWORD, PHONE, REG_DATE, UPDATE_DATE, NAME, STATUS, LOCK_YN) VALUES(2, 'test2@naver.com', '2222', '010-2222-2222', '2021-01-02 02:02:02.000000', null, '테스트2', 1, 0);
INSERT INTO USER(ID, EMAIL, PASSWORD, PHONE, REG_DATE, UPDATE_DATE, NAME, STATUS, LOCK_YN) VALUES(3, 'test3@naver.com', '3333', '010-3333-3333', '2021-01-03 03:03:03.000000', null, '테스트3', 2, 0);
INSERT INTO NOTICE(ID, CONTENTS, HITS, LIKES, REG_DATE, TITLE, USER_ID) VALUES(1, '내용1', 0, 0, '2021-01-01 01:01:01.000000', '제목1', 1);
INSERT INTO NOTICE(ID, CONTENTS, HITS, LIKES, REG_DATE, TITLE, USER_ID) VALUES(2, '내용2', 0, 0, '2021-01-02 02:02:02.000000', '제목2', 1);
INSERT INTO NOTICE(ID, CONTENTS, HITS, LIKES, REG_DATE, TITLE, USER_ID) VALUES(3, '내용3', 0, 0, '2021-01-03 03:03:03.000000', '제목3', 1);
INSERT INTO NOTICE_LIKE(ID, NOTICE_ID, USER_ID) VALUES(1, 3, 1);
INSERT INTO NOTICE_LIKE(ID, NOTICE_ID, USER_ID) VALUES(2, 2, 1);
INSERT INTO BOARD_TYPE(ID, BOARD_NAME, REG_DATE, USING_YN) VALUES
(1, '게시판1', '2021-01-01 01:01:01.000000', 1),
(2, '게시판2', '2021-01-02 02:02:02.000000', 1);
INSERT INTO BOARD(ID, BOARD_TYPE_ID, USER_ID, TITLE, CONTENTS, REG_DATE, TOP_YN) VALUES
(1, 1, 1, '게시글1', '게시글내용1', '2021-01-01 01:01:01.000000', 0),
(2, 1, 1, '게시글2', '게시글내용2', '2021-01-02 02:02:02.000000', 0);
INSERT INTO BOARD_COMMENT(ID, COMMENTS, REG_DATE, BOARD_ID, USER_ID) VALUES
(1, '게시글 1번에 대한 댓글1', '2021-01-01 01:01:01.000000', 1, 1),
(2, '게시글 2번에 대한 댓글2', '2021-01-02 02:02:02.000000', 2, 1);
- BoardComment.java
package com.example.jpa.sample.board.entity;
import com.example.jpa.sample.user.entity.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Entity
public class BoardComment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne
@JoinColumn
private User user;
@ManyToOne
@JoinColumn
private Board board;
@Column
private String comments;
@Column
private LocalDateTime regDate;
}
- BoardCommentsRepository.java
package com.example.jpa.sample.board.repository;
import com.example.jpa.sample.board.entity.BoardComment;
import com.example.jpa.sample.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface BoardCommentsRepository extends JpaRepository<BoardComment, Long> {
List<BoardComment> findByUser(User user);
}
- BoardService.java
package com.example.jpa.sample.board.service;
import com.example.jpa.sample.board.entity.Board;
import com.example.jpa.sample.board.entity.BoardBadReport;
import com.example.jpa.sample.board.entity.BoardComment;
import com.example.jpa.sample.board.entity.BoardType;
import com.example.jpa.sample.board.model.*;
import java.util.List;
public interface BoardService {
ServiceResult addBoard(BoardTypeInput boardTypeInput);
ServiceResult updateBoard(Long id, BoardTypeInput boardTypeInput);
ServiceResult deleteBoard(Long id);
List<BoardType> getAllBoardType();
ServiceResult setBoardTypeUsing(Long id, BoardTypeUsing boardTypeUsing);
List<BoardTypeCount> getBoardTypeCount();
ServiceResult setBoardTop(Long id, boolean topYn);
ServiceResult setBoardPeriod(Long id, BoardPeriod boardPeriod);
ServiceResult setBoardHits(Long id, String email);
ServiceResult setBoardLike(Long id, String email);
ServiceResult setBoardUnLike(Long id, String email);
ServiceResult addBadReport(Long id, String email, BoardBadReportInput boardBadReportInput);
List<BoardBadReport> badReportList();
ServiceResult scrapBoard(Long id, String email);
ServiceResult removeScrapBoard(Long id, String email);
ServiceResult addBookmark(Long id, String email);
ServiceResult removeBookmark(Long id, String email);
List<Board> postList(String email);
List<BoardComment> commentList(String email);
}
- BoardServiceImpl.java
package com.example.jpa.sample.board.service;
import com.example.jpa.sample.board.entity.*;
import com.example.jpa.sample.board.model.*;
import com.example.jpa.sample.board.repository.*;
import com.example.jpa.sample.common.exception.BizException;
import com.example.jpa.sample.user.entity.User;
import com.example.jpa.sample.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@RequiredArgsConstructor
@Service
public class BoardServiceImpl implements BoardService {
private final BoardTypeRepository boardTypeRepository;
private final BoardRepository boardRepository;
private final BoardTypeCustomRepository boardTypeCustomRepository;
private final BoardHitsRepository boardHitsRepository;
private final BoardLikeRepository boardLikeRepository;
private final BoardBadReportRepository boardBadReportRepository;
private final BoardScrapRepository boardScrapRepository;
private final BoardBookmarkRepository boardBookmarkRepository;
private final BoardCommentsRepository boardCommentsRepository;
private final UserRepository userRepository;
@Override
public ServiceResult addBoard(BoardTypeInput boardTypeInput) {
BoardType boardType = boardTypeRepository.findByBoardName(boardTypeInput.getName());
if(boardType != null && boardTypeInput.getName().equals(boardType.getBoardName())) { // 동일한 게시판 제목이 있을 경우
return ServiceResult.fail("이미 동일한 게시판이 존재합니다.");
}
BoardType addBoardType = BoardType.builder()
.boardName(boardTypeInput.getName())
.regDate(LocalDateTime.now())
.build();
boardTypeRepository.save(addBoardType);
return ServiceResult.success();
}
@Override
public ServiceResult updateBoard(Long id, BoardTypeInput boardTypeInput) {
Optional<BoardType> optionalBoardType = boardTypeRepository.findById(id);
if(!optionalBoardType.isPresent()) {
return ServiceResult.fail("수정할 게시판 타입이 없습니다.");
}
BoardType boardType = optionalBoardType.get();
if(boardTypeInput.getName().equals(boardType.getBoardName())) { // 동일한 게시판 제목이 있을 경우
return ServiceResult.fail("수정할 이름이 동일한 게시판명 입니다.");
}
boardType.setBoardName(boardTypeInput.getName());
boardType.setUpdateDate(LocalDateTime.now());
boardTypeRepository.save(boardType);
return ServiceResult.success();
}
@Override
public ServiceResult deleteBoard(Long id) {
Optional<BoardType> optionalBoardType = boardTypeRepository.findById(id);
if(!optionalBoardType.isPresent()) {
return ServiceResult.fail("삭제할 게시판 타입이 없습니다.");
}
BoardType boardType = optionalBoardType.get();
if(boardRepository.countByBoardType(boardType) > 0) {
return ServiceResult.fail("삭제할 게시판 타입의 게시글이 존재합니다.");
}
boardTypeRepository.delete(boardType);
return ServiceResult.success();
}
@Override
public List<BoardType> getAllBoardType() {
return boardTypeRepository.findAll();
}
@Override
public ServiceResult setBoardTypeUsing(Long id, BoardTypeUsing boardTypeUsing) {
Optional<BoardType> optionalBoardType = boardTypeRepository.findById(id);
if(!optionalBoardType.isPresent()) {
return ServiceResult.fail("삭제할 게시판 타입이 없습니다.");
}
BoardType boardType = optionalBoardType.get();
boardType.setUsingYn(boardTypeUsing.isUsingYn());
boardTypeRepository.save(boardType);
return ServiceResult.success();
}
@Override
public List<BoardTypeCount> getBoardTypeCount() {
return boardTypeCustomRepository.getBoardTypeCount();
}
@Override
public ServiceResult setBoardTop(Long id, boolean topYn) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
if(board.isTopYn() == topYn) {
if(topYn) return ServiceResult.fail("이미 게시글이 최상단에 배체되어 있습니다.");
else return ServiceResult.fail("이미 게시글이 최상단에 해제되어 있습니다.");
}
board.setTopYn(topYn);
boardRepository.save(board);
return ServiceResult.success();
}
@Override
public ServiceResult setBoardPeriod(Long id, BoardPeriod boardPeriod) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
board.setPublishStartDate(boardPeriod.getStartDate());
board.setPublishEndDate(boardPeriod.getEndDate());
boardRepository.save(board);
return ServiceResult.success();
}
@Override
public ServiceResult setBoardHits(Long id, String email) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
if(boardHitsRepository.countByBoardAndUser(board, user) > 0) {
return ServiceResult.fail("이미 조회수가 있습니다.");
}
boardHitsRepository.save(BoardHits.builder()
.board(board)
.user(user)
.regDate(LocalDateTime.now())
.build());
return ServiceResult.success();
}
@Override
public ServiceResult setBoardLike(Long id, String email) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
long boardLikeCount = boardLikeRepository.countByBoardAndUser(board, user);
if(boardLikeCount > 0) {
return ServiceResult.fail("이미 좋아요한 내용이 있습니다.");
}
boardLikeRepository.save(BoardLike.builder()
.board(board)
.user(user)
.regDate(LocalDateTime.now())
.build());
return ServiceResult.success();
}
@Override
public ServiceResult setBoardUnLike(Long id, String email) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
Optional<BoardLike> optionalBoardLike = boardLikeRepository.findByBoardAndUser(board, user);
if(!optionalBoardLike.isPresent()) {
return ServiceResult.fail("좋아요한 내용이 없습니다.");
}
BoardLike boardLike = optionalBoardLike.get();
boardLikeRepository.delete(boardLike);
return ServiceResult.success();
}
@Override
public ServiceResult addBadReport(Long id, String email, BoardBadReportInput boardBadReportInput) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
boardBadReportRepository.save(BoardBadReport.builder()
.userId(user.getId())
.userName(user.getName())
.userEmail(user.getEmail())
.boardId(board.getId())
.boardUserId(board.getUser().getId())
.boardTitle(board.getTitle())
.boardContents(board.getContents())
.boardRegDate(board.getRegDate())
.comments(boardBadReportInput.getComment())
.build());
return ServiceResult.success();
}
@Override
public List<BoardBadReport> badReportList() {
return boardBadReportRepository.findAll();
}
@Override
public ServiceResult scrapBoard(Long id, String email) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
BoardScrap boardScrap = BoardScrap.builder()
.user(user)
.boardId(board.getId())
.boardTypeId(board.getBoardType().getId())
.boardTitle(board.getTitle())
.boardContents(board.getContents())
.boardRegDate(board.getRegDate())
.regDate(LocalDateTime.now())
.build();
boardScrapRepository.save(boardScrap);
return ServiceResult.success();
}
@Override
public ServiceResult removeScrapBoard(Long id, String email) {
Optional<BoardScrap> optionalBoardScrap = boardScrapRepository.findById(id);
if(!optionalBoardScrap.isPresent()) {
return ServiceResult.fail("삭제할 스크랩이 없습니다.");
}
BoardScrap boardScrap = optionalBoardScrap.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
// 내 스크랩인지를 확인
if(user.getId() != boardScrap.getUser().getId()) {
return ServiceResult.fail("본인의 스크랩만 삭제할 수 있습니다.");
}
boardScrapRepository.delete(boardScrap);
return ServiceResult.success();
}
private String getBoardUrl(Long boardId) {
return String.format("/board/%d", boardId);
}
@Override
public ServiceResult addBookmark(Long id, String email) {
Optional<Board> optionalBoard = boardRepository.findById(id);
if(!optionalBoard.isPresent()) {
return ServiceResult.fail("게시글이 존재하지 않습니다.");
}
Board board = optionalBoard.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
BoardBookmark boardBookmark = BoardBookmark.builder()
.user(user)
.boardId(board.getId())
.boardTypeId(board.getBoardType().getId())
.boardTitle(board.getTitle())
.boardUrl(getBoardUrl(board.getId()))
.regDate(LocalDateTime.now())
.build();
boardBookmarkRepository.save(boardBookmark);
return ServiceResult.success();
}
@Override
public ServiceResult removeBookmark(Long id, String email) {
Optional<BoardBookmark> optionalBoardBookmark = boardBookmarkRepository.findById(id);
if(!optionalBoardBookmark.isPresent()) {
return ServiceResult.fail("삭제할 북마크가 없습니다.");
}
BoardBookmark boardBookmark = optionalBoardBookmark.get();
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
return ServiceResult.fail("회원 정보가 존재하지 않습니다.");
}
User user = optionalUser.get();
// 내 북마크인지를 확인
if(user.getId() != boardBookmark.getUser().getId()) {
return ServiceResult.fail("본인의 북마크만 삭제할 수 있습니다.");
}
boardBookmarkRepository.delete(boardBookmark);
return ServiceResult.success();
}
@Override
public List<Board> postList(String email) {
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
throw new BizException("회원 정보가 존재하지 않습니다."); // 비즈니스 예외처리
}
User user = optionalUser.get();
return boardRepository.findByUser(user);
}
@Override
public List<BoardComment> commentList(String email) {
Optional<User> optionalUser = userRepository.findByEmail(email);
if(!optionalUser.isPresent()) {
throw new BizException("회원 정보가 존재하지 않습니다."); // 비즈니스 예외처리
}
User user = optionalUser.get();
return boardCommentsRepository.findByUser(user);
}
}
- ApiUserController.java
package com.example.jpa.sample.user.controller;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.example.jpa.sample.board.entity.Board;
import com.example.jpa.sample.board.entity.BoardComment;
import com.example.jpa.sample.board.service.BoardService;
import com.example.jpa.sample.common.model.ResponseResult;
import com.example.jpa.sample.notice.entity.Notice;
import com.example.jpa.sample.notice.entity.NoticeLike;
import com.example.jpa.sample.notice.model.NoticeResponse;
import com.example.jpa.sample.notice.model.ResponseError;
import com.example.jpa.sample.notice.repository.NoticeLikeRepository;
import com.example.jpa.sample.notice.repository.NoticeRepository;
import com.example.jpa.sample.user.entity.User;
import com.example.jpa.sample.user.exception.ExistsEmailException;
import com.example.jpa.sample.user.exception.PasswordNotMatchException;
import com.example.jpa.sample.user.exception.UserNotFoundException;
import com.example.jpa.sample.user.model.*;
import com.example.jpa.sample.user.repository.UserRepository;
import com.example.jpa.sample.util.JwtUtils;
import com.example.jpa.sample.util.PasswordUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@RequiredArgsConstructor
@RestController
public class ApiUserController {
private final UserRepository userRepository;
private final NoticeRepository noticeRepository;
private final NoticeLikeRepository noticeLikeRepository;
private final BoardService boardService;
...
//------------------------------------------------------------------------------
// 문제 3
@GetMapping("/api/user/board/post")
public ResponseEntity<?> myPost(@RequestHeader("X-ACCESS-TOKEN") String token) {
String email = "";
try {
email = JwtUtils.getIssuer(token);
} catch(JWTVerificationException e) {
return ResponseResult.fail("토큰 정보가 정확하지 않습니다.");
}
List<Board> boardList = boardService.postList(email);
return ResponseResult.success(boardList);
}
// 문제 4
@GetMapping("/api/user/board/comment")
public ResponseEntity<?> myComments(@RequestHeader("X-ACCESS-TOKEN") String token) {
String email = "";
try {
email = JwtUtils.getIssuer(token);
} catch(JWTVerificationException e) {
return ResponseResult.fail("토큰 정보가 정확하지 않습니다.");
}
List<BoardComment> boardCommentList = boardService.commentList(email);
return ResponseResult.success(boardCommentList);
}
}
728x90
'Spring > Practice' 카테고리의 다른 글
[Practice] 사용자 관련 API 만들기 (6) (0) | 2021.04.18 |
---|---|
[Practice] 사용자 관련 API 만들기 (5) (0) | 2021.04.17 |
[Practice] 사용자 관련 API 만들기 (3) (0) | 2021.04.17 |
[Practice] 사용자 관련 API 만들기 (2) (0) | 2021.04.17 |