Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Be/102/milestone update #139

Open
wants to merge 9 commits into
base: be/main
Choose a base branch
from
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
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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<Milestone> milestones;

public static Milestones of(Milestone... milestones) {
return from(new ArrayList<>(Arrays.asList(milestones)));
}

public Stream<Milestone> stream() {
return milestones.stream();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -16,4 +18,12 @@ public class MilestoneResponses {
public static MilestoneResponses from(Collection<MilestoneResponse> milestoneResponses) {
return new MilestoneResponses(new HashSet<>(milestoneResponses));
}

public static MilestoneResponses from(Milestones milestoneEntities) {
Set<MilestoneResponse> milestoneResponses = milestoneEntities.stream()
.map(MilestoneResponse::from)
.collect(Collectors.toSet());

return MilestoneResponses.from(milestoneResponses);
}
}
Original file line number Diff line number Diff line change
@@ -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<Milestone> readById(long id);

Milestone save(Milestone milestone);

void deleteById(long id);
}
Original file line number Diff line number Diff line change
@@ -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<Milestone> readById(long id) {
return Optional.empty();
}

@Override
public Milestone save(Milestone milestone) {
return null;
}

@Override
public void deleteById(long id) {

}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.codesquad.issuetracker.milestone.service;

import java.util.Arrays;

import static org.junit.jupiter.api.Assertions.*;

class MilestoneServiceTest {


}