Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ bin/
out/
!**/src/main/**/out/
!**/src/test/**/out/
*.yml
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

적용 중이던 .gitignore에 추가로 작성하면 적용이 안됩니다! 방법을 찾아보세요..!


### NetBeans ###
/nbproject/private/
Expand Down
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,15 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
compileOnly 'org.projectlombok:lombok:1.18.30'
runtimeOnly 'com.mysql:mysql-connector-j'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation "org.springframework.boot:spring-boot-starter-data-jpa"
implementation "org.springframework.boot:spring-boot-starter-security"
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
}

tasks.named('test') {
Expand Down
Empty file modified gradlew
100755 → 100644
Empty file.
3 changes: 2 additions & 1 deletion src/main/java/com/example/demo/DemoApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

@SpringBootApplication
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class DemoApplication {

public static void main(String[] args) {
Expand Down
37 changes: 30 additions & 7 deletions src/main/java/com/example/demo/controller/ArticleController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
import java.net.URI;
import java.util.List;

import com.example.demo.validate.ArticleValidate;
import com.example.demo.validate.BoardValidate;
import com.example.demo.validate.MemberValidate;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -22,47 +26,66 @@
public class ArticleController {

private final ArticleService articleService;
private final ArticleValidate articleValidate;
private final BoardValidate boardValidate;
private final MemberValidate memberValidate;

public ArticleController(ArticleService articleService) {
public ArticleController(ArticleService articleService,
ArticleValidate articleValidate,
BoardValidate boardValidate,
MemberValidate memberValidate) {
this.articleService = articleService;
this.articleValidate = articleValidate;
this.boardValidate = boardValidate;
this.memberValidate = memberValidate;
}

@GetMapping("/articles")
public ResponseEntity<List<ArticleResponse>> getArticles(
@RequestParam Long boardId
@RequestParam Long boardId
) {
List<ArticleResponse> response = articleService.getByBoardId(boardId);

articleValidate.validateResponseIsEmpty(response);

return ResponseEntity.ok(response);
}
Comment on lines 43 to 52
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

controller에 articleValidate.validateResponseIsEmpty(response);와 같이 검증 메서드를 사용하는 로직이 있네요!
검증해야 할 게 바뀌거나 추가될 때마다 controller에서 수정을 해야 하는 문제가 생길 것 같아요

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그러면 컨트롤러에서는 validateResponseIsEmpty 같은 메소드를 사용하는 것이 아니라 validateCreateArticle, validateUpdateArticle과 같은 메소드를 호출하게 만들고 그 메소드 속에서 validateResponseIsEmpty를 호출하게 만들면 나중에 검증 로직에 수정사항이 있을 때 컨트롤러에서 수정할 일이 없을 것 같습니다! 위와 같은 방식으로 수정해두겠습니다.


@GetMapping("/articles/{id}")
public ResponseEntity<ArticleResponse> getArticle(
@PathVariable Long id
@PathVariable Long id
) {
articleValidate.validateContainId(id);

ArticleResponse response = articleService.getById(id);
return ResponseEntity.ok(response);
}

@PostMapping("/articles")
public ResponseEntity<ArticleResponse> crateArticle(
@RequestBody ArticleCreateRequest request
@Valid @RequestBody ArticleCreateRequest request
) {
boardValidate.validateCreateContainId(request.boardId());
memberValidate.validateCreateContainId(request.authorId());

ArticleResponse response = articleService.create(request);
return ResponseEntity.created(URI.create("/articles/" + response.id())).body(response);
}

@PutMapping("/articles/{id}")
public ResponseEntity<ArticleResponse> updateArticle(
@PathVariable Long id,
@RequestBody ArticleUpdateRequest request
@PathVariable Long id,
@Valid @RequestBody ArticleUpdateRequest request
) {
boardValidate.validateUpdateContainId(request.boardId());

ArticleResponse response = articleService.update(id, request);
return ResponseEntity.ok(response);
}

@DeleteMapping("/articles/{id}")
public ResponseEntity<Void> updateArticle(
@PathVariable Long id
@PathVariable Long id
) {
articleService.delete(id);
return ResponseEntity.noContent().build();
Expand Down
47 changes: 47 additions & 0 deletions src/main/java/com/example/demo/controller/AuthController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.example.demo.controller;

import com.example.demo.controller.dto.request.MemberCreateRequest;
import com.example.demo.controller.dto.request.LogInRequest;
import com.example.demo.security.JwtUtil;
import com.example.demo.service.AuthService;
import com.example.demo.validate.MemberValidate;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@Controller
public class AuthController {
private final AuthService authService;
private final MemberValidate memberValidate;
private final JwtUtil jwtUtil;

AuthController(AuthService authService,
MemberValidate memberValidate,
JwtUtil jwtUtil) {
this.authService = authService;
this.memberValidate = memberValidate;
this.jwtUtil = jwtUtil;
}

@PostMapping("/register")
public ResponseEntity<String> signUp(@RequestBody MemberCreateRequest request) {
memberValidate.validateExistEmail(request.email());
authService.register(request);

System.out.println("회원가입 성공");
return ResponseEntity.status(201).build();
}

@PostMapping("/login")
public ResponseEntity<String> signIn(HttpServletResponse httpServletResponse, @RequestBody LogInRequest request) {
authService.logIn(request);

String token = jwtUtil.createJwt(request.email(), "USER", 60*60*1000L);
httpServletResponse.addHeader("Authorization", "Bearer " + token);
System.out.println("로그인 성공");

return ResponseEntity.status(200).build();
}
}
31 changes: 23 additions & 8 deletions src/main/java/com/example/demo/controller/BoardController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import java.util.List;

import com.example.demo.validate.ArticleValidate;
import com.example.demo.validate.BoardValidate;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -18,45 +21,57 @@

@RestController
public class BoardController {

private final BoardService boardService;
private final BoardValidate boardValidate;
private final ArticleValidate articleValidate;

public BoardController(BoardService boardService) {
public BoardController(BoardService boardService,
BoardValidate boardValidate,
ArticleValidate articleValidate) {
this.boardService = boardService;
this.boardValidate = boardValidate;
this.articleValidate = articleValidate;
}

@GetMapping("/boards")
public List<BoardResponse> getBoards() {
return boardService.getBoards();
List<BoardResponse> response = boardService.getBoards();

boardValidate.validateResponseIsEmpty(response);

return response;
}

@GetMapping("/boards/{id}")
public BoardResponse getBoard(
@PathVariable Long id
@PathVariable Long id
) {
boardValidate.validateReadContainId(id);

return boardService.getBoardById(id);
}

@PostMapping("/boards")
public BoardResponse createBoard(
@RequestBody BoardCreateRequest request
@Valid @RequestBody BoardCreateRequest request
) {
return boardService.createBoard(request);
}

@PutMapping("/boards/{id}")
public BoardResponse updateBoard(
@PathVariable Long id,
@RequestBody BoardUpdateRequest updateRequest
@PathVariable Long id,
@Valid @RequestBody BoardUpdateRequest updateRequest
) {
return boardService.update(id, updateRequest);
}

@DeleteMapping("/boards/{id}")
public ResponseEntity<Void> deleteBoard(
@PathVariable Long id
@PathVariable Long id
) {
boardService.deleteBoard(id);

return ResponseEntity.noContent().build();
}
}
25 changes: 22 additions & 3 deletions src/main/java/com/example/demo/controller/MemberController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import java.util.List;

import com.example.demo.validate.ArticleValidate;
import com.example.demo.validate.MemberValidate;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -20,46 +23,62 @@
public class MemberController {

private final MemberService memberService;
private final MemberValidate memberValidate;
private final ArticleValidate articleValidate;

public MemberController(MemberService memberService) {
public MemberController(MemberService memberService,
MemberValidate memberValidate,
ArticleValidate articleValidate) {
this.memberService = memberService;
this.memberValidate = memberValidate;
this.articleValidate = articleValidate;
}

@GetMapping("/members")
public ResponseEntity<List<MemberResponse>> getMembers() {
List<MemberResponse> response = memberService.getAll();
memberValidate.validateResponseIsEmpty(response);

return ResponseEntity.ok(response);
}

@GetMapping("/members/{id}")
public ResponseEntity<MemberResponse> getMember(
@PathVariable Long id
) {
memberValidate.validateReadContainId(id);
MemberResponse response = memberService.getById(id);

return ResponseEntity.ok(response);
}

@PostMapping("/members")
public ResponseEntity<MemberResponse> create(
@RequestBody MemberCreateRequest request
@Valid @RequestBody MemberCreateRequest request
) {
memberValidate.validateExistEmail(request.email());
MemberResponse response = memberService.create(request);

return ResponseEntity.ok(response);
}

@PutMapping("/members/{id}")
public ResponseEntity<MemberResponse> updateMember(
@PathVariable Long id,
@RequestBody MemberUpdateRequest request
@Valid @RequestBody MemberUpdateRequest request
) {
memberValidate.validateExistEmail(request.email());
MemberResponse response = memberService.update(id, request);

return ResponseEntity.ok(response);
}

@DeleteMapping("/members/{id}")
public ResponseEntity<Void> deleteMember(
@PathVariable Long id
) {
articleValidate.validateExistAuthorId(id);

memberService.delete(id);
return ResponseEntity.noContent().build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.example.demo.controller.dto.request;

import jakarta.validation.constraints.NotNull;

public record ArticleCreateRequest(
Long authorId,
Long boardId,
String title,
String description
@NotNull Long authorId,
@NotNull Long boardId,
@NotNull String title,
@NotNull String description
) {

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.example.demo.controller.dto.request;

import jakarta.validation.constraints.NotNull;

public record ArticleUpdateRequest(
Long boardId,
String title,
String description
) {
@NotNull Long boardId,
@NotNull String title,
@NotNull String description
) {

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.example.demo.controller.dto.request;

import jakarta.validation.constraints.NotNull;

public record BoardCreateRequest(
String name
@NotNull String name
) {

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.example.demo.controller.dto.request;

import jakarta.validation.constraints.NotNull;

public record BoardUpdateRequest(
String name
@NotNull String name
) {

}
Loading