Skip to content

Commit 31eb2f6

Browse files
committed
[feature] implement simple CRUD board
1 parent 500e454 commit 31eb2f6

File tree

9 files changed

+157
-25
lines changed

9 files changed

+157
-25
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,65 @@
11
package codeview.main.controller;
22

3+
import codeview.main.dto.ApiResponse;
4+
import codeview.main.dto.BoardRequest;
5+
import codeview.main.dto.BoardResponse;
36
import codeview.main.entity.Board;
47
import codeview.main.service.BoardService;
58
import lombok.RequiredArgsConstructor;
6-
import org.springframework.stereotype.Controller;
7-
import org.springframework.web.bind.annotation.PostMapping;
8-
import org.springframework.web.bind.annotation.RequestBody;
9+
import org.springframework.http.HttpStatus;
10+
import org.springframework.http.ResponseEntity;
11+
import org.springframework.web.bind.annotation.*;
912

10-
@Controller
13+
import java.util.Optional;
14+
15+
16+
@RestController
1117
@RequiredArgsConstructor
18+
@RequestMapping("/board")
1219
public class BoardController {
1320
private final BoardService boardService;
21+
@GetMapping("/{id}")
22+
public ResponseEntity<BoardResponse> getBoardById(@PathVariable Long id) {
23+
Optional<Board> findBoardObj = boardService.findBoardById(id);
24+
if (findBoardObj.isPresent()) {
25+
BoardResponse response = new BoardResponse(findBoardObj.get());
26+
return ResponseEntity.ok(response);
27+
} else {
28+
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
29+
}
30+
}
1431

32+
@PostMapping("/write")
33+
public ResponseEntity<ApiResponse<BoardResponse>> boardSave(@RequestBody Board board) {
34+
Board saveBoard = boardService.save(board);
35+
BoardResponse boardResponse = new BoardResponse(saveBoard);
36+
ApiResponse<BoardResponse> response = new ApiResponse<>(HttpStatus.CREATED, "Board Write Success", boardResponse);
37+
return ResponseEntity.status(HttpStatus.CREATED)
38+
.body(response);
39+
}
40+
@PutMapping("/{id}")
41+
public ResponseEntity<BoardResponse> updateBoard(
42+
@PathVariable Long id,
43+
@RequestBody BoardRequest boardRequest) {
44+
Board updatedBoard = new Board();
45+
updatedBoard.setTitle(boardRequest.getTitle());
46+
47+
try {
48+
Board savedBoard = boardService.updateBoard(id, updatedBoard);
49+
BoardResponse responseDto = new BoardResponse(savedBoard);
50+
return ResponseEntity.ok(responseDto);
51+
} catch (RuntimeException e) {
52+
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
53+
}
54+
}
1555

16-
@PostMapping("/board/write")
17-
public void boardSave(@RequestBody Board board) {
18-
boardService.save(board);
56+
@DeleteMapping("/{id}")
57+
public ResponseEntity<BoardResponse> deleteBoard(@PathVariable Long id) {
58+
try {
59+
boardService.deleteBoard(id);
60+
return ResponseEntity.noContent().build();
61+
}catch (RuntimeException e){
62+
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
63+
}
1964
}
2065
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package codeview.main.dto;
2+
3+
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
import org.springframework.http.HttpStatus;
7+
8+
@Getter
9+
@Setter
10+
public class ApiResponse<T> {
11+
private HttpStatus httpStatus;
12+
private String message;
13+
private T data;
14+
15+
public ApiResponse(HttpStatus httpStatus, String message, T data) {
16+
this.httpStatus = httpStatus;
17+
this.message = message;
18+
this.data = data;
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package codeview.main.dto;
2+
import lombok.Getter;
3+
import lombok.Setter;
4+
5+
@Getter
6+
@Setter
7+
public class BoardRequest {
8+
private String title;
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package codeview.main.dto;
2+
3+
import codeview.main.entity.Board;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
@Getter
8+
@Setter
9+
public class BoardResponse {
10+
private Long id;
11+
private String title;
12+
13+
public BoardResponse(Board board) {
14+
this.id = board.getId();
15+
this.title = board.getTitle();
16+
}
17+
}
+15-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
package codeview.main.entity;
22

33
import jakarta.persistence.*;
4-
import lombok.Getter;
5-
import lombok.Setter;
4+
import lombok.*;
5+
6+
import java.util.List;
67

78
@Entity
89
@Getter @Setter
10+
@NoArgsConstructor
911
public class Board {
1012
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
1113
@Column
1214
private String title;
13-
}
15+
//
16+
// @Column @OneToOne
17+
// private Content content;
18+
//
19+
// @Column @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
20+
// private List<Comment> commentList;
21+
22+
public Board(String title) {
23+
this.title = title;
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package codeview.main.entity;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.Id;
5+
6+
@Entity
7+
public class Comment {
8+
@Id
9+
private Long id;
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package codeview.main.entity;
2+
3+
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.Id;
6+
7+
@Entity
8+
public class Content {
9+
@Id
10+
private Long id;
11+
12+
}

src/main/java/codeview/main/service/BoardService.java

+22-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,31 @@
55
import lombok.RequiredArgsConstructor;
66
import org.springframework.stereotype.Service;
77

8+
import java.util.Optional;
9+
810
@Service
911
@RequiredArgsConstructor
1012
public class BoardService {
1113
private final BoardRepository boardRepository;
12-
public void save(Board board) {
13-
boardRepository.save(board);
14+
public Board save(Board board) {
15+
return boardRepository.save(board);
16+
}
17+
public Optional<Board> findBoardById(Long id) {
18+
return boardRepository.findById(id);
19+
}
20+
public Board updateBoard(Long id, Board updateBoard) {
21+
return boardRepository.findById(id)
22+
.map(board -> {
23+
board.setTitle(updateBoard.getTitle());
24+
return board;
25+
})
26+
.orElseThrow(() -> new RuntimeException("Board not found"));
27+
}
28+
public void deleteBoard(Long id) {
29+
if (boardRepository.existsById(id)) {
30+
boardRepository.deleteById(id);
31+
} else {
32+
throw new RuntimeException("Board not found");
33+
}
1434
}
1535
}

src/test/java/codeview/main/MainApplicationTests.java

-13
This file was deleted.

0 commit comments

Comments
 (0)