From 977a371190460c4c89975e24db0f94ccdc0c9323 Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Wed, 1 Dec 2021 17:23:41 +0900 Subject: [PATCH 01/15] =?UTF-8?q?feat:=20User=EC=97=90=20Rank=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/playground/domain/Rank.java | 16 ++++++++++++++++ src/main/java/playground/domain/User.java | 7 +++++++ 2 files changed, 23 insertions(+) create mode 100644 src/main/java/playground/domain/Rank.java diff --git a/src/main/java/playground/domain/Rank.java b/src/main/java/playground/domain/Rank.java new file mode 100644 index 0000000..5ada5ef --- /dev/null +++ b/src/main/java/playground/domain/Rank.java @@ -0,0 +1,16 @@ +package playground.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Rank { + + TEAM_LEADER("팀장"), + PART_MANAGER("파트장"), + TEAM_MEMBER("팀원"); + + private final String name; + +} \ No newline at end of file diff --git a/src/main/java/playground/domain/User.java b/src/main/java/playground/domain/User.java index 0731939..273842a 100644 --- a/src/main/java/playground/domain/User.java +++ b/src/main/java/playground/domain/User.java @@ -18,6 +18,13 @@ public class User { @Id @GeneratedValue private Long id; + private String name; + private String email; + + private String password; + + private Rank rank; + } From 87b25c9f37b823672503c904b7bf1c05691057e6 Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Wed, 1 Dec 2021 17:24:41 +0900 Subject: [PATCH 02/15] =?UTF-8?q?refactor:=20ApprovalState=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=A9=B4=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/playground/domain/ApprovalState.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/playground/domain/ApprovalState.java b/src/main/java/playground/domain/ApprovalState.java index 8f66b2c..e557521 100644 --- a/src/main/java/playground/domain/ApprovalState.java +++ b/src/main/java/playground/domain/ApprovalState.java @@ -11,6 +11,6 @@ public enum ApprovalState { APPROVED("승인"), CANCELED("거절"); - private final String status; + private final String name; } \ No newline at end of file From 2685ecf6b4b391d821203eed728b3455cd4abd4b Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Wed, 1 Dec 2021 17:30:34 +0900 Subject: [PATCH 03/15] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=97=90=20Team=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/playground/domain/Team.java | 18 ++++++++++++++++++ src/main/java/playground/domain/User.java | 8 +++++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 src/main/java/playground/domain/Team.java diff --git a/src/main/java/playground/domain/Team.java b/src/main/java/playground/domain/Team.java new file mode 100644 index 0000000..47c19f3 --- /dev/null +++ b/src/main/java/playground/domain/Team.java @@ -0,0 +1,18 @@ +package playground.domain; + +import lombok.AllArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +@AllArgsConstructor +public class Team { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String name; +} diff --git a/src/main/java/playground/domain/User.java b/src/main/java/playground/domain/User.java index 273842a..911936d 100644 --- a/src/main/java/playground/domain/User.java +++ b/src/main/java/playground/domain/User.java @@ -5,9 +5,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; +import javax.persistence.*; @NoArgsConstructor @Getter @@ -27,4 +25,8 @@ public class User { private Rank rank; + @ManyToOne + @JoinColumn(name = "team_id") + private Team team; + } From 962a7e229b7b5e297f891ece056371aaeb6a4857 Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Wed, 1 Dec 2021 18:00:54 +0900 Subject: [PATCH 04/15] =?UTF-8?q?fix:=20=EB=B3=80=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/playground/dto/DocumentOutboxResponse.java | 2 +- src/main/java/playground/dto/DocumentResponse.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/playground/dto/DocumentOutboxResponse.java b/src/main/java/playground/dto/DocumentOutboxResponse.java index 5e94535..dff8872 100644 --- a/src/main/java/playground/dto/DocumentOutboxResponse.java +++ b/src/main/java/playground/dto/DocumentOutboxResponse.java @@ -20,6 +20,6 @@ public DocumentOutboxResponse(Document document) { this.category = document.getCategory().name(); this.approvalState = document.getApprovalState().name(); this.categoryText = document.getCategory().getCategory(); - this.approvalStateText = document.getApprovalState().getStatus(); + this.approvalStateText = document.getApprovalState().getName(); } } diff --git a/src/main/java/playground/dto/DocumentResponse.java b/src/main/java/playground/dto/DocumentResponse.java index f6880f5..3315631 100644 --- a/src/main/java/playground/dto/DocumentResponse.java +++ b/src/main/java/playground/dto/DocumentResponse.java @@ -26,7 +26,7 @@ public DocumentResponse(Document document, String userName) { this.approvalState = document.getApprovalState().name(); this.userName = document.getDrafter().getName(); this.categoryText = document.getCategory().getCategory(); - this.approvalStateText = document.getApprovalState().getStatus(); + this.approvalStateText = document.getApprovalState().name(); this.userName = userName; } @@ -39,7 +39,7 @@ public DocumentResponse(Document document) { this.approvalState = document.getApprovalState().name(); this.userName = document.getDrafter().getName(); this.categoryText = document.getCategory().getCategory(); - this.approvalStateText = document.getApprovalState().getStatus(); + this.approvalStateText = document.getApprovalState().getName(); this.userName = document.getDrafter().getName(); } } From 859b9abb64fd92b0375b601bf9a8ff8d22f7f8cd Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Wed, 1 Dec 2021 18:01:27 +0900 Subject: [PATCH 05/15] =?UTF-8?q?feat:=20=ED=8C=80=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playground/controller/TeamController.java | 23 ++++++++++++ src/main/java/playground/domain/Team.java | 7 ++-- .../java/playground/dto/TeamResponse.java | 19 ++++++++++ .../repository/TeamRepositiory.java | 7 ++++ .../java/playground/service/TeamService.java | 35 +++++++++++++++++++ src/main/resources/data.sql | 5 ++- 6 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 src/main/java/playground/controller/TeamController.java create mode 100644 src/main/java/playground/dto/TeamResponse.java create mode 100644 src/main/java/playground/repository/TeamRepositiory.java create mode 100644 src/main/java/playground/service/TeamService.java diff --git a/src/main/java/playground/controller/TeamController.java b/src/main/java/playground/controller/TeamController.java new file mode 100644 index 0000000..e19b56f --- /dev/null +++ b/src/main/java/playground/controller/TeamController.java @@ -0,0 +1,23 @@ +package playground.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import playground.dto.TeamResponse; +import playground.service.TeamService; + +import java.util.List; + +@RestController +@RequestMapping("/api/teams") +public class TeamController { + + @Autowired + TeamService teamService; + + @GetMapping() + public List getTeams(){ + return teamService.findAll(); + } +} diff --git a/src/main/java/playground/domain/Team.java b/src/main/java/playground/domain/Team.java index 47c19f3..5f6acf2 100644 --- a/src/main/java/playground/domain/Team.java +++ b/src/main/java/playground/domain/Team.java @@ -1,6 +1,7 @@ package playground.domain; -import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -8,11 +9,13 @@ import javax.persistence.Id; @Entity -@AllArgsConstructor +@Getter +@NoArgsConstructor public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; + } diff --git a/src/main/java/playground/dto/TeamResponse.java b/src/main/java/playground/dto/TeamResponse.java new file mode 100644 index 0000000..8fbda5b --- /dev/null +++ b/src/main/java/playground/dto/TeamResponse.java @@ -0,0 +1,19 @@ +package playground.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; +import playground.domain.Team; + +@NoArgsConstructor +@Data +public class TeamResponse { + + private Long id; + + private String name; + + public TeamResponse(Team team){ + this.id = team.getId(); + this.name = team.getName(); + } +} diff --git a/src/main/java/playground/repository/TeamRepositiory.java b/src/main/java/playground/repository/TeamRepositiory.java new file mode 100644 index 0000000..dbf672e --- /dev/null +++ b/src/main/java/playground/repository/TeamRepositiory.java @@ -0,0 +1,7 @@ +package playground.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import playground.domain.Team; + +public interface TeamRepositiory extends JpaRepository { +} diff --git a/src/main/java/playground/service/TeamService.java b/src/main/java/playground/service/TeamService.java new file mode 100644 index 0000000..2f5ff0b --- /dev/null +++ b/src/main/java/playground/service/TeamService.java @@ -0,0 +1,35 @@ +package playground.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import playground.domain.Category; +import playground.domain.Document; +import playground.domain.Team; +import playground.domain.User; +import playground.dto.DocumentOutboxResponse; +import playground.dto.DocumentRequest; +import playground.dto.DocumentResponse; +import playground.dto.TeamResponse; +import playground.repository.TeamRepositiory; +import playground.repository.UserRepository; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class TeamService { + @Autowired + TeamRepositiory teamRepositiory; + + @Autowired + UserRepository userRepository; + + public List findAll() { + List teams = teamRepositiory.findAll(); + List teamResponses = new ArrayList<>(); + for (Team team : teams) { + teamResponses.add(new TeamResponse(team)); + } + return teamResponses; + } +} diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 9d9e205..f903aa9 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -2,4 +2,7 @@ insert into user(id, name) values (1, '박우빈'); insert into user(id, name) values (2, '이다은'); --insert into document(id, title, category, contents, drafter_id, approval_state) --- values (1, '첫번째 문서제목', 'EDUCATION', '문서내용', 1, 'DRAFTING'); \ No newline at end of file +-- values (1, '첫번째 문서제목', 'EDUCATION', '문서내용', 1, 'DRAFTING'); + +insert into team(id, name) values (1, '정산시스템팀'); +insert into team(id, name) values (2, '서비스개발팀'); \ No newline at end of file From 8981e9b78e8471cf26528f72474ddcf393e72377 Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Wed, 1 Dec 2021 18:45:40 +0900 Subject: [PATCH 06/15] =?UTF-8?q?feat:=20=ED=8A=B9=EC=A0=95=20=ED=8C=80?= =?UTF-8?q?=EC=9D=98=20=EC=86=8D=ED=95=9C=20=EC=82=AC=EB=9E=8C=EB=93=A4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playground/controller/TeamController.java | 4 +-- .../playground/controller/UserController.java | 26 +++++++++++++++ src/main/java/playground/domain/User.java | 1 + .../java/playground/dto/UserResponse.java | 28 ++++++++++++++++ .../playground/repository/UserRepository.java | 4 +++ .../java/playground/service/UserService.java | 33 +++++++++++++++++++ src/main/resources/data.sql | 11 ++++--- 7 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 src/main/java/playground/controller/UserController.java create mode 100644 src/main/java/playground/dto/UserResponse.java create mode 100644 src/main/java/playground/service/UserService.java diff --git a/src/main/java/playground/controller/TeamController.java b/src/main/java/playground/controller/TeamController.java index e19b56f..3c2649d 100644 --- a/src/main/java/playground/controller/TeamController.java +++ b/src/main/java/playground/controller/TeamController.java @@ -17,7 +17,7 @@ public class TeamController { TeamService teamService; @GetMapping() - public List getTeams(){ - return teamService.findAll(); + public List getTeams() { + return teamService.findAll(); } } diff --git a/src/main/java/playground/controller/UserController.java b/src/main/java/playground/controller/UserController.java new file mode 100644 index 0000000..8b4c14a --- /dev/null +++ b/src/main/java/playground/controller/UserController.java @@ -0,0 +1,26 @@ +package playground.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import playground.dto.UserResponse; +import playground.service.UserService; + +import java.util.List; + +@RestController +@RequestMapping("/api/users") +public class UserController { + + @Autowired + UserService userService; + + @GetMapping + public List getUserBy( + @RequestParam Long teamId + ) { + return userService.findBy(teamId); + } +} diff --git a/src/main/java/playground/domain/User.java b/src/main/java/playground/domain/User.java index 911936d..3d6bf15 100644 --- a/src/main/java/playground/domain/User.java +++ b/src/main/java/playground/domain/User.java @@ -23,6 +23,7 @@ public class User { private String password; + @Enumerated(EnumType.STRING) private Rank rank; @ManyToOne diff --git a/src/main/java/playground/dto/UserResponse.java b/src/main/java/playground/dto/UserResponse.java new file mode 100644 index 0000000..9a2b8ca --- /dev/null +++ b/src/main/java/playground/dto/UserResponse.java @@ -0,0 +1,28 @@ +package playground.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; +import playground.domain.User; + +@Data +@NoArgsConstructor +public class UserResponse { + + private Long id; + + private String jobPosition; + + private String teamName; + + private String name; + + private String jobPositionText; + + public UserResponse(User user) { + this.id = user.getId(); + this.jobPosition = user.getRank().toString(); + this.teamName = user.getTeam().getName(); + this.name = user.getName(); + this.jobPositionText = user.getRank().getName(); + } +} diff --git a/src/main/java/playground/repository/UserRepository.java b/src/main/java/playground/repository/UserRepository.java index 083b629..3772dd5 100644 --- a/src/main/java/playground/repository/UserRepository.java +++ b/src/main/java/playground/repository/UserRepository.java @@ -1,7 +1,11 @@ package playground.repository; import org.springframework.data.jpa.repository.JpaRepository; +import playground.domain.Team; import playground.domain.User; +import java.util.List; + public interface UserRepository extends JpaRepository { + List findByTeam(Team team); } diff --git a/src/main/java/playground/service/UserService.java b/src/main/java/playground/service/UserService.java new file mode 100644 index 0000000..36d130d --- /dev/null +++ b/src/main/java/playground/service/UserService.java @@ -0,0 +1,33 @@ +package playground.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import playground.domain.Team; +import playground.domain.User; +import playground.dto.UserResponse; +import playground.repository.TeamRepositiory; +import playground.repository.UserRepository; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class UserService { + + @Autowired + UserRepository userRepository; + + @Autowired + TeamRepositiory teamRepository; + + public List findBy(Long teamId) { + Team team = teamRepository.findById(teamId).get(); + System.out.println(team.getName()); + List users = userRepository.findByTeam(team); + List usersResponse = new ArrayList<>(); + for (User user : users) { + usersResponse.add(new UserResponse(user)); + } + return usersResponse; + } +} diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index f903aa9..c9d19d0 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,8 +1,11 @@ -insert into user(id, name) values (1, '박우빈'); -insert into user(id, name) values (2, '이다은'); +insert into team(id, name) values (1, '정산시스템팀'); +insert into team(id, name) values (2, '서비스개발팀'); + +insert into user(id, name, rank, team_id, email, password) values (1, '박우빈', 'TEAM_LEADER', 1, 'aa@naver.com', '1212'); +insert into user(id, name, rank, team_id, email, password) values (2, '이다은', 'PART_MANAGER', 1, 'aa@naver.com', '1212'); +insert into user(id, name, rank, team_id, email, password) values (3, '박우빈2', 'TEAM_LEADER', 2, 'aa@naver.com', '1212'); +insert into user(id, name, rank, team_id, email, password) values (4, '이다은2', 'PART_MANAGER', 2, 'aa@naver.com', '1212'); --insert into document(id, title, category, contents, drafter_id, approval_state) -- values (1, '첫번째 문서제목', 'EDUCATION', '문서내용', 1, 'DRAFTING'); -insert into team(id, name) values (1, '정산시스템팀'); -insert into team(id, name) values (2, '서비스개발팀'); \ No newline at end of file From b0bd8690d7177955453530422e7bb4dfc81fa367 Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Wed, 1 Dec 2021 18:48:33 +0900 Subject: [PATCH 07/15] =?UTF-8?q?feat:=20=EB=AC=B8=EC=84=9C=20=EC=B9=B4?= =?UTF-8?q?=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playground/controller/DocumentController.java | 13 +++++++++---- src/main/java/playground/domain/Category.java | 2 +- src/main/java/playground/domain/Document.java | 3 +-- src/main/java/playground/dto/CategoryResponse.java | 14 ++++++++++++++ .../playground/dto/DocumentOutboxResponse.java | 2 +- src/main/java/playground/dto/DocumentResponse.java | 4 ++-- .../java/playground/service/DocumentService.java | 12 +++++++++++- 7 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 src/main/java/playground/dto/CategoryResponse.java diff --git a/src/main/java/playground/controller/DocumentController.java b/src/main/java/playground/controller/DocumentController.java index 4c158eb..d338882 100644 --- a/src/main/java/playground/controller/DocumentController.java +++ b/src/main/java/playground/controller/DocumentController.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import playground.dto.CategoryResponse; import playground.dto.DocumentOutboxResponse; import playground.dto.DocumentRequest; import playground.dto.DocumentResponse; @@ -11,26 +12,30 @@ import java.util.List; @RestController -@RequestMapping("/api") +@RequestMapping("/api/documents") public class DocumentController { @Autowired DocumentService documentService; - @GetMapping("/document/{documentId}") + @GetMapping("/{documentId}") public ResponseEntity getDocumentById(@PathVariable Long documentId) { DocumentResponse DocumentResponse = documentService.findDocumentBy(documentId); return ResponseEntity.ok().body(DocumentResponse); } - @GetMapping("/documents/outbox") + @GetMapping("/outbox") public ResponseEntity> getDocumentsOutbox(@RequestParam Long userId) { List DocumentOutboxResponse = documentService.findDocumentsOutbox(userId); return ResponseEntity.ok().body(DocumentOutboxResponse); } - @PostMapping("/document") + @PostMapping public ResponseEntity insertDocument(@RequestBody DocumentRequest documentRequest) { Long id = documentService.insertDocument(documentRequest); return ResponseEntity.ok().body(id); } + @GetMapping("/categories") + public List getCategories(){ + return documentService.getCatcories(); + } } diff --git a/src/main/java/playground/domain/Category.java b/src/main/java/playground/domain/Category.java index 393d284..e73cc4b 100644 --- a/src/main/java/playground/domain/Category.java +++ b/src/main/java/playground/domain/Category.java @@ -11,7 +11,7 @@ public enum Category { EDUCATION("교육"), PRODUCT_PURCHASING("물품구매"); - private final String category; + private final String name; } \ No newline at end of file diff --git a/src/main/java/playground/domain/Document.java b/src/main/java/playground/domain/Document.java index b18e06c..b1d26d5 100644 --- a/src/main/java/playground/domain/Document.java +++ b/src/main/java/playground/domain/Document.java @@ -5,7 +5,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.data.annotation.CreatedDate; -import playground.dto.DocumentRequest; import javax.persistence.*; import java.sql.Date; @@ -59,7 +58,7 @@ public void addApprovers(List approvals) { AtomicInteger index = new AtomicInteger(); index.getAndIncrement(); approvalIndex = 0; - approvals.forEach(approver-> addDocumetApprovals(approver, index.getAndIncrement())); + approvals.forEach(approver -> addDocumetApprovals(approver, index.getAndIncrement())); } public List getDocumentApprovals() { diff --git a/src/main/java/playground/dto/CategoryResponse.java b/src/main/java/playground/dto/CategoryResponse.java new file mode 100644 index 0000000..fa7160c --- /dev/null +++ b/src/main/java/playground/dto/CategoryResponse.java @@ -0,0 +1,14 @@ +package playground.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CategoryResponse { + private String value; + + private String text; +} diff --git a/src/main/java/playground/dto/DocumentOutboxResponse.java b/src/main/java/playground/dto/DocumentOutboxResponse.java index dff8872..a6ea262 100644 --- a/src/main/java/playground/dto/DocumentOutboxResponse.java +++ b/src/main/java/playground/dto/DocumentOutboxResponse.java @@ -19,7 +19,7 @@ public DocumentOutboxResponse(Document document) { this.title = document.getTitle(); this.category = document.getCategory().name(); this.approvalState = document.getApprovalState().name(); - this.categoryText = document.getCategory().getCategory(); + this.categoryText = document.getCategory().getName(); this.approvalStateText = document.getApprovalState().getName(); } } diff --git a/src/main/java/playground/dto/DocumentResponse.java b/src/main/java/playground/dto/DocumentResponse.java index 3315631..bafae89 100644 --- a/src/main/java/playground/dto/DocumentResponse.java +++ b/src/main/java/playground/dto/DocumentResponse.java @@ -25,7 +25,7 @@ public DocumentResponse(Document document, String userName) { this.userId = document.getDrafter().getId(); this.approvalState = document.getApprovalState().name(); this.userName = document.getDrafter().getName(); - this.categoryText = document.getCategory().getCategory(); + this.categoryText = document.getCategory().getName(); this.approvalStateText = document.getApprovalState().name(); this.userName = userName; } @@ -38,7 +38,7 @@ public DocumentResponse(Document document) { this.userId = document.getDrafter().getId(); this.approvalState = document.getApprovalState().name(); this.userName = document.getDrafter().getName(); - this.categoryText = document.getCategory().getCategory(); + this.categoryText = document.getCategory().getName(); this.approvalStateText = document.getApprovalState().getName(); this.userName = document.getDrafter().getName(); } diff --git a/src/main/java/playground/service/DocumentService.java b/src/main/java/playground/service/DocumentService.java index 8f83201..827c609 100644 --- a/src/main/java/playground/service/DocumentService.java +++ b/src/main/java/playground/service/DocumentService.java @@ -5,6 +5,7 @@ import playground.domain.Category; import playground.domain.Document; import playground.domain.User; +import playground.dto.CategoryResponse; import playground.dto.DocumentOutboxResponse; import playground.dto.DocumentRequest; import playground.dto.DocumentResponse; @@ -41,7 +42,8 @@ public long insertDocument(DocumentRequest documentRequest) { documentRepository.save(document); return document.getId(); } - private Document getDocumentBy(DocumentRequest documentRequest){ + + private Document getDocumentBy(DocumentRequest documentRequest) { User drafter = userRepository.findById(documentRequest.getDrafterId()).get(); return Document.builder() .title(documentRequest.getTitle()) @@ -50,4 +52,12 @@ private Document getDocumentBy(DocumentRequest documentRequest){ .drafter(drafter) .build(); } + + public List getCatcories() { + List categoryResponses = new ArrayList<>(); + for (Category category : Category.values()) { + categoryResponses.add(new CategoryResponse(category.toString(), category.getName())); + } + return categoryResponses; + } } From aa2b79621bef2678205930a01a9dfa05518a695c Mon Sep 17 00:00:00 2001 From: daeun_lee Date: Thu, 2 Dec 2021 16:32:24 +0900 Subject: [PATCH 08/15] =?UTF-8?q?feat:=20=EB=AC=B8=EC=84=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/playground/dto/ApprovalResponse.java | 35 ++++++++++++ .../java/playground/dto/DocumentResponse.java | 56 +++++++++++-------- .../DocumentApprovalRepository.java | 12 ++++ .../playground/service/DocumentService.java | 22 ++++++-- 4 files changed, 98 insertions(+), 27 deletions(-) create mode 100644 src/main/java/playground/dto/ApprovalResponse.java create mode 100644 src/main/java/playground/repository/DocumentApprovalRepository.java diff --git a/src/main/java/playground/dto/ApprovalResponse.java b/src/main/java/playground/dto/ApprovalResponse.java new file mode 100644 index 0000000..6411f21 --- /dev/null +++ b/src/main/java/playground/dto/ApprovalResponse.java @@ -0,0 +1,35 @@ +package playground.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import playground.domain.DocumentApproval; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ApprovalResponse { + + private String approvarTeamName; + + private String approvarName; + + private int approvalOrder; + + private String approvalComment; + + private String approvalStateText; + + public ApprovalResponse(DocumentApproval approvar) { + + this.approvarTeamName = approvar.getApprover().getTeam().getName(); + + this.approvarName = approvar.getApprover().getName(); + + this.approvalOrder = approvar.getApprovalOrder(); + + this.approvalComment = approvar.getApprovalComment(); + + this.approvalStateText = approvar.getApprovalState().getName(); + } +} diff --git a/src/main/java/playground/dto/DocumentResponse.java b/src/main/java/playground/dto/DocumentResponse.java index bafae89..5589ccc 100644 --- a/src/main/java/playground/dto/DocumentResponse.java +++ b/src/main/java/playground/dto/DocumentResponse.java @@ -1,8 +1,10 @@ package playground.dto; -import playground.domain.Document; import lombok.Getter; import lombok.Setter; +import playground.domain.Document; + +import java.util.List; @Getter @Setter @@ -11,35 +13,45 @@ public class DocumentResponse { private String title; private String category; private String contents; - private long userId; - private String approvalState; - private String userName; + private UserResponse drafter; + private List approvers; private String categoryText; private String approvalStateText; - public DocumentResponse(Document document, String userName) { + public DocumentResponse(Document document, UserResponse drafter, List approvers) { this.id = document.getId(); this.title = document.getTitle(); this.category = document.getCategory().name(); this.contents = document.getContents(); - this.userId = document.getDrafter().getId(); - this.approvalState = document.getApprovalState().name(); - this.userName = document.getDrafter().getName(); - this.categoryText = document.getCategory().getName(); - this.approvalStateText = document.getApprovalState().name(); - this.userName = userName; - } - - public DocumentResponse(Document document) { - this.id = document.getId(); - this.title = document.getTitle(); - this.category = document.getCategory().name(); - this.contents = document.getContents(); - this.userId = document.getDrafter().getId(); - this.approvalState = document.getApprovalState().name(); - this.userName = document.getDrafter().getName(); + this.drafter = drafter; + this.approvers = approvers; this.categoryText = document.getCategory().getName(); this.approvalStateText = document.getApprovalState().getName(); - this.userName = document.getDrafter().getName(); } + +// public DocumentResponse(Document document, String userName) { +// this.id = document.getId(); +// this.title = document.getTitle(); +// this.category = document.getCategory().name(); +// this.contents = document.getContents(); +// this.userId = document.getDrafter().getId(); +// this.approvalState = document.getApprovalState().name(); +// this.userName = document.getDrafter().getName(); +// this.categoryText = document.getCategory().getName(); +// this.approvalStateText = document.getApprovalState().name(); +// this.userName = userName; +// } +// +// public DocumentResponse(Document document) { +// this.id = document.getId(); +// this.title = document.getTitle(); +// this.category = document.getCategory().name(); +// this.contents = document.getContents(); +// this.userId = document.getDrafter().getId(); +// this.approvalState = document.getApprovalState().name(); +// this.userName = document.getDrafter().getName(); +// this.categoryText = document.getCategory().getName(); +// this.approvalStateText = document.getApprovalState().getName(); +// this.userName = document.getDrafter().getName(); +// } } diff --git a/src/main/java/playground/repository/DocumentApprovalRepository.java b/src/main/java/playground/repository/DocumentApprovalRepository.java new file mode 100644 index 0000000..e5ab3f7 --- /dev/null +++ b/src/main/java/playground/repository/DocumentApprovalRepository.java @@ -0,0 +1,12 @@ +package playground.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import playground.domain.Document; +import playground.domain.DocumentApproval; + +import java.util.List; + +public interface DocumentApprovalRepository extends JpaRepository { + + List findByDocument(Document document); +} diff --git a/src/main/java/playground/service/DocumentService.java b/src/main/java/playground/service/DocumentService.java index 827c609..69990b8 100644 --- a/src/main/java/playground/service/DocumentService.java +++ b/src/main/java/playground/service/DocumentService.java @@ -4,11 +4,10 @@ import org.springframework.stereotype.Component; import playground.domain.Category; import playground.domain.Document; +import playground.domain.DocumentApproval; import playground.domain.User; -import playground.dto.CategoryResponse; -import playground.dto.DocumentOutboxResponse; -import playground.dto.DocumentRequest; -import playground.dto.DocumentResponse; +import playground.dto.*; +import playground.repository.DocumentApprovalRepository; import playground.repository.DocumentRepository; import playground.repository.UserRepository; @@ -23,9 +22,22 @@ public class DocumentService { @Autowired UserRepository userRepository; + @Autowired + DocumentApprovalRepository documentApprovalRepository; + public DocumentResponse findDocumentBy(Long documentId) { Document document = documentRepository.findById(documentId).get(); - return new DocumentResponse(document); + //Drafter + //approvers + //categoryText + //approvalStatText + User drafter = userRepository.findById(document.getDrafter().getId()).get(); + List approvars = documentApprovalRepository.findByDocument(document); + List approvalsResponse = new ArrayList<>(); + for (DocumentApproval approvar : approvars) { + approvalsResponse.add(new ApprovalResponse(approvar)); + } + return new DocumentResponse(document, new UserResponse(drafter), approvalsResponse); } public List findDocumentsOutbox(Long userId) { From 8574f2f8c2fcbe579f4c58eb010e487d245bc6e4 Mon Sep 17 00:00:00 2001 From: eunii Date: Fri, 3 Dec 2021 20:49:32 +0900 Subject: [PATCH 09/15] =?UTF-8?q?feat:=20=EB=AC=B8=EC=84=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20=EC=96=91=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/playground/domain/Document.java | 12 ++++-- .../playground/domain/DocumentApproval.java | 18 +++++++- src/main/java/playground/domain/User.java | 2 +- .../java/playground/dto/DocumentResponse.java | 41 ++++++------------- .../playground/service/DocumentService.java | 25 ++++++----- 5 files changed, 53 insertions(+), 45 deletions(-) diff --git a/src/main/java/playground/domain/Document.java b/src/main/java/playground/domain/Document.java index b1d26d5..47df6d5 100644 --- a/src/main/java/playground/domain/Document.java +++ b/src/main/java/playground/domain/Document.java @@ -18,7 +18,7 @@ @AllArgsConstructor public class Document { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @@ -35,7 +35,7 @@ public class Document { @Enumerated(EnumType.STRING) private ApprovalState approvalState = ApprovalState.DRAFTING; - @Transient + @OneToMany(mappedBy = "document", cascade = CascadeType.ALL, orphanRemoval = true) private List documentApprovals = new ArrayList<>(); @Transient @@ -45,15 +45,21 @@ public class Document { private Date createdAt; @Builder - public Document(Long id, String title, Category category, String contents, User drafter, Date createdAt) { + public Document(Long id, String title, Category category, String contents, User drafter, List documentApprovals, Date createdAt) { this.id = id; this.title = title; this.category = category; this.contents = contents; this.drafter = drafter; + this.documentApprovals = documentApprovals; this.createdAt = createdAt; } + public void addDocumentApproval(final DocumentApproval documentApproval){ + documentApprovals.add(documentApproval); + documentApproval.setDocument(this); + } + public void addApprovers(List approvals) { AtomicInteger index = new AtomicInteger(); index.getAndIncrement(); diff --git a/src/main/java/playground/domain/DocumentApproval.java b/src/main/java/playground/domain/DocumentApproval.java index 2d29c41..f8d3251 100644 --- a/src/main/java/playground/domain/DocumentApproval.java +++ b/src/main/java/playground/domain/DocumentApproval.java @@ -2,14 +2,18 @@ import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import javax.persistence.*; @Getter +@Setter @Entity +@NoArgsConstructor public class DocumentApproval { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @@ -23,13 +27,23 @@ public class DocumentApproval { private String approvalComment; + @ManyToOne + @JoinColumn(name = "document_id") + private Document document; + @Builder public DocumentApproval(User approver, ApprovalState approvalState, int approvalOrder) { this.approver = approver; this.approvalState = approvalState; this.approvalOrder = approvalOrder; } - + @Builder + public DocumentApproval(User approver, int approvalOrder, Document document) { + this.approver = approver; + this.approvalState = ApprovalState.DRAFTING; + this.approvalOrder = approvalOrder; + this.document = document; + } public DocumentApproval approveBy(User approver, String approvalComment) { this.approvalComment = approvalComment; this.approver = approver; diff --git a/src/main/java/playground/domain/User.java b/src/main/java/playground/domain/User.java index 3d6bf15..cf34fbd 100644 --- a/src/main/java/playground/domain/User.java +++ b/src/main/java/playground/domain/User.java @@ -14,7 +14,7 @@ @Entity public class User { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; diff --git a/src/main/java/playground/dto/DocumentResponse.java b/src/main/java/playground/dto/DocumentResponse.java index 5589ccc..cfaec22 100644 --- a/src/main/java/playground/dto/DocumentResponse.java +++ b/src/main/java/playground/dto/DocumentResponse.java @@ -3,7 +3,9 @@ import lombok.Getter; import lombok.Setter; import playground.domain.Document; +import playground.domain.DocumentApproval; +import java.util.ArrayList; import java.util.List; @Getter @@ -18,40 +20,23 @@ public class DocumentResponse { private String categoryText; private String approvalStateText; - public DocumentResponse(Document document, UserResponse drafter, List approvers) { + public DocumentResponse(Document document) { this.id = document.getId(); this.title = document.getTitle(); this.category = document.getCategory().name(); this.contents = document.getContents(); - this.drafter = drafter; - this.approvers = approvers; + this.drafter = new UserResponse(document.getDrafter()); + this.approvers = getApprovars(document.getDocumentApprovals()); this.categoryText = document.getCategory().getName(); this.approvalStateText = document.getApprovalState().getName(); } -// public DocumentResponse(Document document, String userName) { -// this.id = document.getId(); -// this.title = document.getTitle(); -// this.category = document.getCategory().name(); -// this.contents = document.getContents(); -// this.userId = document.getDrafter().getId(); -// this.approvalState = document.getApprovalState().name(); -// this.userName = document.getDrafter().getName(); -// this.categoryText = document.getCategory().getName(); -// this.approvalStateText = document.getApprovalState().name(); -// this.userName = userName; -// } -// -// public DocumentResponse(Document document) { -// this.id = document.getId(); -// this.title = document.getTitle(); -// this.category = document.getCategory().name(); -// this.contents = document.getContents(); -// this.userId = document.getDrafter().getId(); -// this.approvalState = document.getApprovalState().name(); -// this.userName = document.getDrafter().getName(); -// this.categoryText = document.getCategory().getName(); -// this.approvalStateText = document.getApprovalState().getName(); -// this.userName = document.getDrafter().getName(); -// } + private List getApprovars(List approvars) { + System.out.println("---------------"+approvars.size()); + List approvarsResponse = new ArrayList<>(); + for (DocumentApproval documentApproval : approvars) { + approvarsResponse.add(new ApprovalResponse(documentApproval)); + } + return approvarsResponse; + } } diff --git a/src/main/java/playground/service/DocumentService.java b/src/main/java/playground/service/DocumentService.java index 69990b8..2d7dc61 100644 --- a/src/main/java/playground/service/DocumentService.java +++ b/src/main/java/playground/service/DocumentService.java @@ -11,6 +11,7 @@ import playground.repository.DocumentRepository; import playground.repository.UserRepository; +import javax.transaction.Transactional; import java.util.ArrayList; import java.util.List; @@ -27,17 +28,7 @@ public class DocumentService { public DocumentResponse findDocumentBy(Long documentId) { Document document = documentRepository.findById(documentId).get(); - //Drafter - //approvers - //categoryText - //approvalStatText - User drafter = userRepository.findById(document.getDrafter().getId()).get(); - List approvars = documentApprovalRepository.findByDocument(document); - List approvalsResponse = new ArrayList<>(); - for (DocumentApproval approvar : approvars) { - approvalsResponse.add(new ApprovalResponse(approvar)); - } - return new DocumentResponse(document, new UserResponse(drafter), approvalsResponse); + return new DocumentResponse(document); } public List findDocumentsOutbox(Long userId) { @@ -49,9 +40,12 @@ public List findDocumentsOutbox(Long userId) { return documentOutboxDtos; } + @Transactional public long insertDocument(DocumentRequest documentRequest) { Document document = getDocumentBy(documentRequest); documentRepository.save(document); + List documentApprovals = getDocumentApprovals(documentRequest.getApproverIds(), document); + documentApprovals.stream().forEach((documentApproval) -> documentApprovalRepository.save(documentApproval)); return document.getId(); } @@ -72,4 +66,13 @@ public List getCatcories() { } return categoryResponses; } + + private List getDocumentApprovals(List approvars, Document document) { + List documentApprovals = new ArrayList<>(); + for (int i = 0; i < approvars.size(); i++) { + User approvar = userRepository.findById(approvars.get(i)).get(); + documentApprovals.add(new DocumentApproval(approvar, i, document)); + } + return documentApprovals; + } } From 5851468d0e9e4f36b6b752e37a278c7abe90f782 Mon Sep 17 00:00:00 2001 From: eunii Date: Fri, 3 Dec 2021 20:50:17 +0900 Subject: [PATCH 10/15] =?UTF-8?q?config:=20db=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 6097658..4cfee43 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -6,7 +6,7 @@ spring: active: local datasource: driver-class-name: org.h2.Driver - url: jdbc:h2:mem:userdb;DB_CLOSE_DELAY=-1 + url: jdbc:h2:mem:playground;DB_CLOSE_DELAY=-1 username: sa password: sql-script-encoding: UTF-8 From 4d8efa770ea657969959245b3794b6d9b12ea167 Mon Sep 17 00:00:00 2001 From: eunii Date: Fri, 3 Dec 2021 21:03:55 +0900 Subject: [PATCH 11/15] =?UTF-8?q?refector:=20manyToOne=20fetchType=20Lazy?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=BC=EA=B4=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/playground/domain/Document.java | 2 +- src/main/java/playground/domain/DocumentApproval.java | 4 ++-- src/main/java/playground/domain/User.java | 2 +- src/main/java/playground/dto/DocumentResponse.java | 1 - src/main/java/playground/service/UserService.java | 1 - 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/playground/domain/Document.java b/src/main/java/playground/domain/Document.java index 47df6d5..3e5dadf 100644 --- a/src/main/java/playground/domain/Document.java +++ b/src/main/java/playground/domain/Document.java @@ -28,7 +28,7 @@ public class Document { private String contents; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "drafter_id") private User drafter; diff --git a/src/main/java/playground/domain/DocumentApproval.java b/src/main/java/playground/domain/DocumentApproval.java index f8d3251..0bdb8b8 100644 --- a/src/main/java/playground/domain/DocumentApproval.java +++ b/src/main/java/playground/domain/DocumentApproval.java @@ -16,7 +16,7 @@ public class DocumentApproval { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User approver; @@ -27,7 +27,7 @@ public class DocumentApproval { private String approvalComment; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "document_id") private Document document; diff --git a/src/main/java/playground/domain/User.java b/src/main/java/playground/domain/User.java index cf34fbd..38ba484 100644 --- a/src/main/java/playground/domain/User.java +++ b/src/main/java/playground/domain/User.java @@ -26,7 +26,7 @@ public class User { @Enumerated(EnumType.STRING) private Rank rank; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; diff --git a/src/main/java/playground/dto/DocumentResponse.java b/src/main/java/playground/dto/DocumentResponse.java index cfaec22..b570a86 100644 --- a/src/main/java/playground/dto/DocumentResponse.java +++ b/src/main/java/playground/dto/DocumentResponse.java @@ -32,7 +32,6 @@ public DocumentResponse(Document document) { } private List getApprovars(List approvars) { - System.out.println("---------------"+approvars.size()); List approvarsResponse = new ArrayList<>(); for (DocumentApproval documentApproval : approvars) { approvarsResponse.add(new ApprovalResponse(documentApproval)); diff --git a/src/main/java/playground/service/UserService.java b/src/main/java/playground/service/UserService.java index 36d130d..b179481 100644 --- a/src/main/java/playground/service/UserService.java +++ b/src/main/java/playground/service/UserService.java @@ -22,7 +22,6 @@ public class UserService { public List findBy(Long teamId) { Team team = teamRepository.findById(teamId).get(); - System.out.println(team.getName()); List users = userRepository.findByTeam(team); List usersResponse = new ArrayList<>(); for (User user : users) { From e1e40817f60910e1889935af0d7e203e792b34bf Mon Sep 17 00:00:00 2001 From: eunii Date: Fri, 3 Dec 2021 21:58:45 +0900 Subject: [PATCH 12/15] =?UTF-8?q?refactor:=20BaseEntity=EC=97=90=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1/=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=20=EC=B6=94=EA=B0=80,=20=EC=A0=84=20entity?= =?UTF-8?q?=20=EC=83=81=EC=86=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playground/PlaygroundApplication.java | 2 ++ .../java/playground/domain/BaseEntity.java | 21 +++++++++++++++++++ src/main/java/playground/domain/Document.java | 17 ++++++++------- .../playground/domain/DocumentApproval.java | 4 +++- src/main/java/playground/domain/Team.java | 7 ++++++- src/main/java/playground/domain/User.java | 9 +++++++- .../repository/DocumentRepository.java | 3 +++ .../playground/service/DocumentService.java | 2 +- 8 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 src/main/java/playground/domain/BaseEntity.java diff --git a/src/main/java/playground/PlaygroundApplication.java b/src/main/java/playground/PlaygroundApplication.java index bea3f7f..f3b38df 100644 --- a/src/main/java/playground/PlaygroundApplication.java +++ b/src/main/java/playground/PlaygroundApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing public class PlaygroundApplication { public static void main(String[] args) { SpringApplication.run(PlaygroundApplication.class, args); diff --git a/src/main/java/playground/domain/BaseEntity.java b/src/main/java/playground/domain/BaseEntity.java new file mode 100644 index 0000000..2d6e330 --- /dev/null +++ b/src/main/java/playground/domain/BaseEntity.java @@ -0,0 +1,21 @@ +package playground.domain; + +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; +import java.time.LocalDateTime; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class BaseEntity { + @CreatedDate + private LocalDateTime createdDate; + + @LastModifiedDate + private LocalDateTime modifiedDate; +} diff --git a/src/main/java/playground/domain/Document.java b/src/main/java/playground/domain/Document.java index 3e5dadf..a4f5ef4 100644 --- a/src/main/java/playground/domain/Document.java +++ b/src/main/java/playground/domain/Document.java @@ -16,7 +16,7 @@ @Entity @NoArgsConstructor @AllArgsConstructor -public class Document { +public class Document extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @@ -39,20 +39,23 @@ public class Document { private List documentApprovals = new ArrayList<>(); @Transient - private int approvalIndex; - - @CreatedDate - private Date createdAt; + private int approvalIndex = 0; @Builder - public Document(Long id, String title, Category category, String contents, User drafter, List documentApprovals, Date createdAt) { + public Document(Long id, String title, Category category, String contents, User drafter, List documentApprovals) { this.id = id; this.title = title; this.category = category; this.contents = contents; this.drafter = drafter; this.documentApprovals = documentApprovals; - this.createdAt = createdAt; + } + + public Document(String title, Category category, String contents, User drafter) { + this.title = title; + this.category = category; + this.contents = contents; + this.drafter = drafter; } public void addDocumentApproval(final DocumentApproval documentApproval){ diff --git a/src/main/java/playground/domain/DocumentApproval.java b/src/main/java/playground/domain/DocumentApproval.java index 0bdb8b8..bcbfdec 100644 --- a/src/main/java/playground/domain/DocumentApproval.java +++ b/src/main/java/playground/domain/DocumentApproval.java @@ -11,7 +11,7 @@ @Setter @Entity @NoArgsConstructor -public class DocumentApproval { +public class DocumentApproval extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @@ -37,6 +37,7 @@ public DocumentApproval(User approver, ApprovalState approvalState, int approval this.approvalState = approvalState; this.approvalOrder = approvalOrder; } + @Builder public DocumentApproval(User approver, int approvalOrder, Document document) { this.approver = approver; @@ -44,6 +45,7 @@ public DocumentApproval(User approver, int approvalOrder, Document document) { this.approvalOrder = approvalOrder; this.document = document; } + public DocumentApproval approveBy(User approver, String approvalComment) { this.approvalComment = approvalComment; this.approver = approver; diff --git a/src/main/java/playground/domain/Team.java b/src/main/java/playground/domain/Team.java index 5f6acf2..0fd84fe 100644 --- a/src/main/java/playground/domain/Team.java +++ b/src/main/java/playground/domain/Team.java @@ -1,5 +1,6 @@ package playground.domain; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -11,11 +12,15 @@ @Entity @Getter @NoArgsConstructor -public class Team { +public class Team extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; + @Builder + public Team(String name) { + this.name = name; + } } diff --git a/src/main/java/playground/domain/User.java b/src/main/java/playground/domain/User.java index 38ba484..26a62cb 100644 --- a/src/main/java/playground/domain/User.java +++ b/src/main/java/playground/domain/User.java @@ -12,7 +12,7 @@ @AllArgsConstructor @Builder @Entity -public class User { +public class User extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @@ -30,4 +30,11 @@ public class User { @JoinColumn(name = "team_id") private Team team; + public User(String name, String email, String password, Rank rank, Team team) { + this.name = name; + this.email = email; + this.password = password; + this.rank = rank; + this.team = team; + } } diff --git a/src/main/java/playground/repository/DocumentRepository.java b/src/main/java/playground/repository/DocumentRepository.java index 9652fd0..7d27fac 100644 --- a/src/main/java/playground/repository/DocumentRepository.java +++ b/src/main/java/playground/repository/DocumentRepository.java @@ -1,10 +1,13 @@ package playground.repository; import org.springframework.data.jpa.repository.JpaRepository; +import playground.domain.ApprovalState; import playground.domain.Document; import java.util.List; public interface DocumentRepository extends JpaRepository { List findByDrafterId(Long userId); + + List findByDrafterIdOrderByCreatedDateDesc(Long id); } diff --git a/src/main/java/playground/service/DocumentService.java b/src/main/java/playground/service/DocumentService.java index 2d7dc61..4bfec5a 100644 --- a/src/main/java/playground/service/DocumentService.java +++ b/src/main/java/playground/service/DocumentService.java @@ -32,7 +32,7 @@ public DocumentResponse findDocumentBy(Long documentId) { } public List findDocumentsOutbox(Long userId) { - List documents = documentRepository.findByDrafterId(userId); + List documents = documentRepository.findByDrafterIdOrderByCreatedDateDesc(userId); List documentOutboxDtos = new ArrayList<>(); for (Document document : documents) { documentOutboxDtos.add(new DocumentOutboxResponse(document)); From 0fbfc3d5765bb688257e46e13409eb3add7f5b58 Mon Sep 17 00:00:00 2001 From: eunii Date: Fri, 3 Dec 2021 22:16:31 +0900 Subject: [PATCH 13/15] =?UTF-8?q?test:=20Repository=20Layer=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/DocumentRepository.java | 1 - .../repository/DocumentRepositoryTest.java | 54 +++++++++++++++++++ .../repository/UserRepositoryTest.java | 46 ++++++++++++++++ 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/test/java/playground/repository/DocumentRepositoryTest.java create mode 100644 src/test/java/playground/repository/UserRepositoryTest.java diff --git a/src/main/java/playground/repository/DocumentRepository.java b/src/main/java/playground/repository/DocumentRepository.java index 7d27fac..acecf4c 100644 --- a/src/main/java/playground/repository/DocumentRepository.java +++ b/src/main/java/playground/repository/DocumentRepository.java @@ -7,7 +7,6 @@ import java.util.List; public interface DocumentRepository extends JpaRepository { - List findByDrafterId(Long userId); List findByDrafterIdOrderByCreatedDateDesc(Long id); } diff --git a/src/test/java/playground/repository/DocumentRepositoryTest.java b/src/test/java/playground/repository/DocumentRepositoryTest.java new file mode 100644 index 0000000..0d4475e --- /dev/null +++ b/src/test/java/playground/repository/DocumentRepositoryTest.java @@ -0,0 +1,54 @@ +package playground.repository; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import playground.domain.Document; +import playground.domain.Team; +import playground.domain.User; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static playground.domain.Category.EDUCATION; +import static playground.domain.Category.PRODUCT_PURCHASING; +import static playground.domain.Rank.TEAM_MEMBER; + +@DataJpaTest +public class DocumentRepositoryTest { + + @Autowired + private TeamRepositiory teamRepositiory; + + @Autowired + private UserRepository userRepository; + + @Autowired + private DocumentRepository documentRepository; + + @DisplayName("기안자 id의 모든 문서를 작성일 역순 조회한다.") + @Test + void findByDrafterIdAndOrderByCreatedDateDesc() { + // given + Team team = teamRepositiory.save(new Team("서비스개발팀")); + User user1 = userRepository.save(new User("김우빈", "wbluke@abc.com", "p@ssw0rd", TEAM_MEMBER, team)); + User user2 = userRepository.save(new User("김우빈2", "wbluke2@abc.com", "p@ssw0rd", TEAM_MEMBER, team)); + + Document document1 = new Document("title1", EDUCATION, "content", user1); + Document document2 = new Document("title2", PRODUCT_PURCHASING, "content", user1); + Document document3 = new Document("title3", EDUCATION, "content", user1); + Document document4 = new Document("title4", PRODUCT_PURCHASING, "content", user2); + documentRepository.saveAll(Arrays.asList(document1, document2, document3, document4)); + + // when + List documents = documentRepository.findByDrafterIdOrderByCreatedDateDesc(user1.getId()); + + // then + assertThat(documents).hasSize(3) + .extracting("title") + .containsExactly("title3", "title2", "title1"); + } + +} diff --git a/src/test/java/playground/repository/UserRepositoryTest.java b/src/test/java/playground/repository/UserRepositoryTest.java new file mode 100644 index 0000000..4a1aa97 --- /dev/null +++ b/src/test/java/playground/repository/UserRepositoryTest.java @@ -0,0 +1,46 @@ +package playground.repository; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import playground.domain.Document; +import playground.domain.Team; +import playground.domain.User; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static playground.domain.Rank.TEAM_MEMBER; + +@DataJpaTest +public class UserRepositoryTest { + + @Autowired + private TeamRepositiory teamRepositiory; + + @Autowired + private UserRepository userRepository; + + @DisplayName("특정 팀의 모든 사용자를 조회한다.") + @Test + void findByTeam() { + // given + Team team1 = teamRepositiory.save(new Team("서비스개발팀")); + Team team2 = teamRepositiory.save(new Team("서비스개발팀2")); + User user1 = userRepository.save(new User("김우빈", "wbluke@abc.com", "p@ssw0rd", TEAM_MEMBER, team1)); + User user2 = userRepository.save(new User("김우빈2", "wbluke2@abc.com", "p@ssw0rd", TEAM_MEMBER, team1)); + User user3 = userRepository.save(new User("김우빈3", "wbluke@abc.com", "p@ssw0rd", TEAM_MEMBER, team2)); + User user4 = userRepository.save(new User("김우빈4", "wbluke2@abc.com", "p@ssw0rd", TEAM_MEMBER, team2)); + + // when + List users = userRepository.findByTeam(team1); + + // then + assertThat(users).hasSize(2) + .extracting("name") + .contains("김우빈", "김우빈2"); + } + +} From 450b6ead5e80ee8d07e3ef779fa95e75d682e436 Mon Sep 17 00:00:00 2001 From: eunii Date: Fri, 3 Dec 2021 22:26:14 +0900 Subject: [PATCH 14/15] =?UTF-8?q?feat:=20service=EC=97=90=20Transactioal?= =?UTF-8?q?=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DocumentController.java | 2 +- .../playground/service/DocumentService.java | 6 +- .../java/playground/service/TeamService.java | 2 + .../java/playground/service/UserService.java | 2 + .../service/DocumentServiceTest.java | 60 +++++++++++++++++++ 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/test/java/playground/service/DocumentServiceTest.java diff --git a/src/main/java/playground/controller/DocumentController.java b/src/main/java/playground/controller/DocumentController.java index d338882..0b6c36e 100644 --- a/src/main/java/playground/controller/DocumentController.java +++ b/src/main/java/playground/controller/DocumentController.java @@ -36,6 +36,6 @@ public ResponseEntity insertDocument(@RequestBody DocumentRequest document } @GetMapping("/categories") public List getCategories(){ - return documentService.getCatcories(); + return documentService.getCategories(); } } diff --git a/src/main/java/playground/service/DocumentService.java b/src/main/java/playground/service/DocumentService.java index 4bfec5a..bb81b01 100644 --- a/src/main/java/playground/service/DocumentService.java +++ b/src/main/java/playground/service/DocumentService.java @@ -26,11 +26,13 @@ public class DocumentService { @Autowired DocumentApprovalRepository documentApprovalRepository; + @Transactional public DocumentResponse findDocumentBy(Long documentId) { Document document = documentRepository.findById(documentId).get(); return new DocumentResponse(document); } + @Transactional public List findDocumentsOutbox(Long userId) { List documents = documentRepository.findByDrafterIdOrderByCreatedDateDesc(userId); List documentOutboxDtos = new ArrayList<>(); @@ -49,6 +51,7 @@ public long insertDocument(DocumentRequest documentRequest) { return document.getId(); } + @Transactional private Document getDocumentBy(DocumentRequest documentRequest) { User drafter = userRepository.findById(documentRequest.getDrafterId()).get(); return Document.builder() @@ -59,7 +62,8 @@ private Document getDocumentBy(DocumentRequest documentRequest) { .build(); } - public List getCatcories() { + @Transactional + public List getCategories() { List categoryResponses = new ArrayList<>(); for (Category category : Category.values()) { categoryResponses.add(new CategoryResponse(category.toString(), category.getName())); diff --git a/src/main/java/playground/service/TeamService.java b/src/main/java/playground/service/TeamService.java index 2f5ff0b..77f7e43 100644 --- a/src/main/java/playground/service/TeamService.java +++ b/src/main/java/playground/service/TeamService.java @@ -13,6 +13,7 @@ import playground.repository.TeamRepositiory; import playground.repository.UserRepository; +import javax.transaction.Transactional; import java.util.ArrayList; import java.util.List; @@ -24,6 +25,7 @@ public class TeamService { @Autowired UserRepository userRepository; + @Transactional public List findAll() { List teams = teamRepositiory.findAll(); List teamResponses = new ArrayList<>(); diff --git a/src/main/java/playground/service/UserService.java b/src/main/java/playground/service/UserService.java index b179481..0e493c5 100644 --- a/src/main/java/playground/service/UserService.java +++ b/src/main/java/playground/service/UserService.java @@ -8,6 +8,7 @@ import playground.repository.TeamRepositiory; import playground.repository.UserRepository; +import javax.transaction.Transactional; import java.util.ArrayList; import java.util.List; @@ -20,6 +21,7 @@ public class UserService { @Autowired TeamRepositiory teamRepository; + @Transactional public List findBy(Long teamId) { Team team = teamRepository.findById(teamId).get(); List users = userRepository.findByTeam(team); diff --git a/src/test/java/playground/service/DocumentServiceTest.java b/src/test/java/playground/service/DocumentServiceTest.java new file mode 100644 index 0000000..b45d520 --- /dev/null +++ b/src/test/java/playground/service/DocumentServiceTest.java @@ -0,0 +1,60 @@ +package playground.service; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import playground.domain.Document; +import playground.domain.Team; +import playground.domain.User; +import playground.dto.DocumentResponse; +import playground.repository.DocumentApprovalRepository; +import playground.repository.DocumentRepository; +import playground.repository.TeamRepositiory; +import playground.repository.UserRepository; + +import static org.assertj.core.api.Assertions.assertThat; +import static playground.domain.Rank.TEAM_MEMBER; +import static playground.domain.Category.*; + +@SpringBootTest +public class DocumentServiceTest { + @Autowired + private DocumentService documentService; + + @Autowired + private DocumentRepository documentRepository; + + @Autowired + private TeamRepositiory teamRepositiory; + + @Autowired + private UserRepository userRepository; + + @AfterEach + public void cleanup() { + documentRepository.deleteAllInBatch(); + userRepository.deleteAllInBatch(); + teamRepositiory.deleteAllInBatch(); + // deleteAll() 과 차이점은 무엇일까? + } + + @DisplayName("id로 Document 단건을 조회한다") + @Test + void fetchDocumentById() { + // given + Team team = teamRepositiory.save(new Team("서비스개발팀")); + User user = userRepository.save(new User("김우빈", "wbluke@abc.com", "p@ssw0rd", TEAM_MEMBER, team)); + Document document = new Document("제목", EDUCATION, "내용", user); // private method + Document savedDocument = documentRepository.save(document); + + // when + DocumentResponse result = documentService.findDocumentBy(savedDocument.getId()); + + // then + assertThat(result) + .extracting("title", "contents", "category", "drafter.name") + .containsExactly("제목", "내용", "EDUCATION", "김우빈"); + } +} From 82e4ef2dc0697f5e8548ec01cb7e84494472a15f Mon Sep 17 00:00:00 2001 From: eunii Date: Fri, 3 Dec 2021 22:27:31 +0900 Subject: [PATCH 15/15] =?UTF-8?q?fix:=20=EC=A3=BC=EC=84=9D=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/playground/service/DocumentServiceTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/playground/service/DocumentServiceTest.java b/src/test/java/playground/service/DocumentServiceTest.java index b45d520..9bd8fcd 100644 --- a/src/test/java/playground/service/DocumentServiceTest.java +++ b/src/test/java/playground/service/DocumentServiceTest.java @@ -9,14 +9,13 @@ import playground.domain.Team; import playground.domain.User; import playground.dto.DocumentResponse; -import playground.repository.DocumentApprovalRepository; import playground.repository.DocumentRepository; import playground.repository.TeamRepositiory; import playground.repository.UserRepository; import static org.assertj.core.api.Assertions.assertThat; +import static playground.domain.Category.EDUCATION; import static playground.domain.Rank.TEAM_MEMBER; -import static playground.domain.Category.*; @SpringBootTest public class DocumentServiceTest { @@ -37,7 +36,6 @@ public void cleanup() { documentRepository.deleteAllInBatch(); userRepository.deleteAllInBatch(); teamRepositiory.deleteAllInBatch(); - // deleteAll() 과 차이점은 무엇일까? } @DisplayName("id로 Document 단건을 조회한다")