From 0733a1fb0e9e170b78b336bdb47ec04f7f6867c2 Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:36:38 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20Milestone=20domain=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../milestone/domain/Milestone.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestone.java diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestone.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestone.java new file mode 100644 index 000000000..b14fe3cca --- /dev/null +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestone.java @@ -0,0 +1,30 @@ +package com.codesquad.issuetracker.milestone.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import java.time.LocalDate; + +@Builder +@Getter +@AllArgsConstructor +public class Milestone { + private Long id; + private String name; + private String description; + private LocalDate dueDate; + private boolean isClosed; + private int openedIssueCount; + private int closedIssueCount; + + public Milestone update(Milestone milestoneForUpdate) { + name = milestoneForUpdate.getName(); + description = milestoneForUpdate.getDescription(); + dueDate = milestoneForUpdate.getDueDate(); + isClosed = milestoneForUpdate.isClosed(); + openedIssueCount = milestoneForUpdate.getClosedIssueCount(); + closedIssueCount = milestoneForUpdate.getClosedIssueCount(); + + return this; + } +} From d672bde2d680b7d50be9bc6b3004fa70eef1d461 Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:36:55 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20Milestones=20domain=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../milestone/domain/Milestones.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestones.java diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestones.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestones.java new file mode 100644 index 000000000..318993643 --- /dev/null +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/domain/Milestones.java @@ -0,0 +1,23 @@ +package com.codesquad.issuetracker.milestone.domain; + +import com.codesquad.issuetracker.label.domain.Label; +import com.codesquad.issuetracker.label.domain.Labels; +import lombok.Data; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +@Data(staticConstructor = "from") +public class Milestones { + private final List milestones; + + public static Milestones of(Milestone... milestones) { + return from(new ArrayList<>(Arrays.asList(milestones))); + } + + public Stream stream() { + return milestones.stream(); + } +} From 25bb63941787349937cf0920201b4fe6f6029bc3 Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:37:48 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20MilestoneRequest=20dto=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../issuetracker/milestone/dto/MilestoneRequest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneRequest.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneRequest.java index 01b386822..4ce02ace8 100644 --- a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneRequest.java +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneRequest.java @@ -1,5 +1,6 @@ package com.codesquad.issuetracker.milestone.dto; +import com.codesquad.issuetracker.milestone.domain.Milestone; import lombok.Data; import javax.validation.constraints.NotEmpty; @@ -13,4 +14,13 @@ public class MilestoneRequest { private String description; private LocalDate dueDate; private boolean isClosed; + + public Milestone toEntity() { + return Milestone.builder() + .name(name) + .description(description) + .dueDate(dueDate) + .isClosed(isClosed) + .build(); + } } From 1217561802eadbad16e652614d1355c569285a46 Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:38:03 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20MilestoneResponse=20dto=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../milestone/dto/MilestoneResponse.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponse.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponse.java index 7db12d126..4483091f7 100644 --- a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponse.java +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponse.java @@ -1,5 +1,6 @@ package com.codesquad.issuetracker.milestone.dto; +import com.codesquad.issuetracker.milestone.domain.Milestone; import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; @@ -17,4 +18,16 @@ public class MilestoneResponse { private boolean isClosed; private int openedIssueCount; private int closedIssueCount; + + public static MilestoneResponse from(Milestone milestone) { + return MilestoneResponse.builder() + .id(milestone.getId()) + .name(milestone.getName()) + .description(milestone.getDescription()) + .dueDate(milestone.getDueDate()) + .isClosed(milestone.isClosed()) + .openedIssueCount(milestone.getOpenedIssueCount()) + .closedIssueCount(milestone.getClosedIssueCount()) + .build(); + } } From a829b46d618a4eb1464fe1d54aa9fe96c9132242 Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:38:24 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20MilestoneResponses=20dto=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../issuetracker/milestone/dto/MilestoneResponses.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponses.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponses.java index b2974e960..4f1aa766b 100644 --- a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponses.java +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/dto/MilestoneResponses.java @@ -1,11 +1,13 @@ package com.codesquad.issuetracker.milestone.dto; +import com.codesquad.issuetracker.milestone.domain.Milestones; import com.fasterxml.jackson.annotation.JsonValue; import lombok.Data; import java.util.Collection; import java.util.HashSet; import java.util.Set; +import java.util.stream.Collectors; @Data(staticConstructor = "from") public class MilestoneResponses { @@ -16,4 +18,12 @@ public class MilestoneResponses { public static MilestoneResponses from(Collection milestoneResponses) { return new MilestoneResponses(new HashSet<>(milestoneResponses)); } + + public static MilestoneResponses from(Milestones milestoneEntities) { + Set milestoneResponses = milestoneEntities.stream() + .map(MilestoneResponse::from) + .collect(Collectors.toSet()); + + return MilestoneResponses.from(milestoneResponses); + } } From c70b6ec910e6bca2d9707efcc15fbda94b694802 Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:39:55 +0900 Subject: [PATCH 6/9] feat: MilestoneService.java MilestoneService.create MilestoneService.readAll MilestoneService.update MilestoneService.delete --- .../milestone/service/MilestoneService.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/service/MilestoneService.java diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/service/MilestoneService.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/service/MilestoneService.java new file mode 100644 index 000000000..68ae617ac --- /dev/null +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/service/MilestoneService.java @@ -0,0 +1,45 @@ +package com.codesquad.issuetracker.milestone.service; + +import com.codesquad.issuetracker.common.exception.EntityNotFoundException; +import com.codesquad.issuetracker.milestone.domain.Milestone; +import com.codesquad.issuetracker.milestone.domain.Milestones; +import com.codesquad.issuetracker.milestone.dto.MilestoneRequest; +import com.codesquad.issuetracker.milestone.dto.MilestoneResponse; +import com.codesquad.issuetracker.milestone.dto.MilestoneResponses; +import com.codesquad.issuetracker.milestone.repository.MilestoneRepositoryImpl; +import org.springframework.stereotype.Service; + +@Service +public class MilestoneService { + + private final MilestoneRepositoryImpl milestoneRepository; + + public MilestoneService(MilestoneRepositoryImpl milestoneRepository) { + this.milestoneRepository = milestoneRepository; + } + + public MilestoneResponses readAll() { + Milestones milestones = milestoneRepository.readAll(); + + return MilestoneResponses.from(milestones); + } + + public MilestoneResponse create(MilestoneRequest milestoneRequest) { + Milestone savedMilestone = milestoneRepository.save(milestoneRequest.toEntity()); + + return MilestoneResponse.from(savedMilestone); + } + + public MilestoneResponse update(long id, MilestoneRequest milestoneRequest) { + Milestone savedMilestone = milestoneRepository.readById(id) + .orElseThrow(() -> new EntityNotFoundException()); + + Milestone updatedMilestone = milestoneRepository.save(savedMilestone.update(milestoneRequest.toEntity())); + + return MilestoneResponse.from(updatedMilestone); + } + + public void delete(long id) { + milestoneRepository.deleteById(id); + } +} From ce3460f32c8fed024e41c944aba470e4b4dc7f1f Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:41:24 +0900 Subject: [PATCH 7/9] feat: MilestoneRepository.java --- .../repository/MilestoneRepository.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepository.java diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepository.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepository.java new file mode 100644 index 000000000..326ce9d3a --- /dev/null +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepository.java @@ -0,0 +1,16 @@ +package com.codesquad.issuetracker.milestone.repository; + +import com.codesquad.issuetracker.milestone.domain.Milestone; +import com.codesquad.issuetracker.milestone.domain.Milestones; + +import java.util.Optional; + +public interface MilestoneRepository { + Milestones readAll(); + + Optional readById(long id); + + Milestone save(Milestone milestone); + + void deleteById(long id); +} From daaa8499c25108671e5073e2f0d2d9db2060e1ce Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:41:34 +0900 Subject: [PATCH 8/9] feat: MilestoneRepositoryImpl.java --- .../repository/MilestoneRepositoryImpl.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepositoryImpl.java diff --git a/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepositoryImpl.java b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepositoryImpl.java new file mode 100644 index 000000000..1b3a93bde --- /dev/null +++ b/be/issue-tracker-be/src/main/java/com/codesquad/issuetracker/milestone/repository/MilestoneRepositoryImpl.java @@ -0,0 +1,30 @@ +package com.codesquad.issuetracker.milestone.repository; + +import com.codesquad.issuetracker.milestone.domain.Milestone; +import com.codesquad.issuetracker.milestone.domain.Milestones; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public class MilestoneRepositoryImpl implements MilestoneRepository{ + @Override + public Milestones readAll() { + return null; + } + + @Override + public Optional readById(long id) { + return Optional.empty(); + } + + @Override + public Milestone save(Milestone milestone) { + return null; + } + + @Override + public void deleteById(long id) { + + } +} From c87bad26325438a7916490ec0fbcb82797458289 Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 22 Jun 2021 14:41:56 +0900 Subject: [PATCH 9/9] feat: MilestoneServiceTest --- .../milestone/service/MilestoneServiceTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 be/issue-tracker-be/src/test/java/com/codesquad/issuetracker/milestone/service/MilestoneServiceTest.java diff --git a/be/issue-tracker-be/src/test/java/com/codesquad/issuetracker/milestone/service/MilestoneServiceTest.java b/be/issue-tracker-be/src/test/java/com/codesquad/issuetracker/milestone/service/MilestoneServiceTest.java new file mode 100644 index 000000000..51da902d1 --- /dev/null +++ b/be/issue-tracker-be/src/test/java/com/codesquad/issuetracker/milestone/service/MilestoneServiceTest.java @@ -0,0 +1,10 @@ +package com.codesquad.issuetracker.milestone.service; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + +class MilestoneServiceTest { + + +}