Skip to content

Commit

Permalink
Merge branch 'fdm' into dev-fix
Browse files Browse the repository at this point in the history
  • Loading branch information
aiaiaiai1 committed Jan 19, 2025
2 parents 236a941 + 8ac08d7 commit d27750f
Show file tree
Hide file tree
Showing 8 changed files with 35 additions and 19 deletions.
10 changes: 10 additions & 0 deletions src/main/java/gymmi/workspace/domain/ObjectionManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@ public Vote createVote(Worker worker, boolean isApproved) {
return new Vote(worker, objection, isApproved);
}

public void apply(Vote vote) {
objection.add(vote);
}

public void applyAll(List<Vote> votes) {
for (Vote vote : votes) {
apply(vote);
}
}

public boolean closeIfOnMajorityOrDone(int workerCount) {
int majority = getMajority(workerCount);
if (objection.getApprovalCount() >= majority) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ public WorkspaceResult draw() {
Worker winner = pickOneInTie(first);
Worker loser = pickOneInTie(last);
WorkspaceResult workspaceResult = new WorkspaceResult(workspace, winner, loser);
workspace.changeStatusTo(WorkspaceStatus.FULLY_COMPLETED);
return workspaceResult;
}

Expand Down
10 changes: 5 additions & 5 deletions src/main/java/gymmi/workspace/domain/entity/WorkspaceResult.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package gymmi.workspace.domain.entity;

import gymmi.exceptionhandler.exception.InvalidRangeException;
import gymmi.exceptionhandler.exception.NotHavePermissionException;
import gymmi.exceptionhandler.message.ErrorCode;
import gymmi.workspace.domain.entity.Worker;
import gymmi.workspace.domain.entity.Workspace;
import gymmi.workspace.domain.WorkspaceStatus;
import jakarta.persistence.*;
import lombok.*;

Expand Down Expand Up @@ -35,4 +31,8 @@ public WorkspaceResult(Workspace workspace, Worker winner, Worker loser) {
this.winner = winner;
this.loser = loser;
}

public void apply() {
workspace.changeStatusTo(WorkspaceStatus.FULLY_COMPLETED);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,9 @@ public void voteToObjection(User loginedUser, Long workspaceId, Long objectionId

ObjectionManager objectionManager = new ObjectionManager(objection);
Vote vote = objectionManager.createVote(worker, request.getWillApprove());

voteRepository.save(vote);
objectionManager.apply(vote);

List<Worker> workers = workerRepository.getAllByWorkspaceId(workspaceId);

Expand All @@ -256,6 +258,7 @@ public void terminateExpiredObjection(User loginedUser, Long workspaceId) {
ObjectionManager objectionManager = new ObjectionManager(expiredObjection);
List<Vote> votes = objectionManager.createAutoVote(workers);
voteRepository.saveAll(votes);
objectionManager.applyAll(votes);
if (objectionManager.closeIfOnMajorityOrDone(workers.size())) {
WorkoutHistory workoutHistory = workoutHistoryRepository.getByWorkoutConfirmationId(expiredObjection.getWorkoutConfirmation().getId());
rejectWorkoutHistory(objectionManager, workoutHistory);
Expand All @@ -278,6 +281,7 @@ public WorkspaceResultResponse getWorkspaceResult(User loginedUser, Long workspa

WorkspaceDrawManger workspaceDrawManger = new WorkspaceDrawManger(workspace, workers);
WorkspaceResult workspaceResult = workspaceDrawManger.draw();
workspaceResult.apply();

workspaceResultRepository.save(workspaceResult);
return getWorkspaceResultResponse(workspace, workers, workspaceResult);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rename table workspace_task to workspace_result
10 changes: 5 additions & 5 deletions src/test/java/gymmi/workspace/domain/ObjectionManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,23 +76,23 @@ class 투표_참여 {
"5,2,2,false, false",
"4,2,2,true, false",
})
void 투표에_따라_투표가_종료된다(int workerCount, int agreeCount, int disagreeCount, boolean isClosed, boolean isApproved) {
void 투표에_따라_이의신청이_종료된다(int workerCount, int agreeCount, int disagreeCount, boolean isClosed, boolean isApproved) {
// given
Objection objection = getObjection(true);
List<Vote> agreeVotes = getVotes(agreeCount, objection, true);
List<Vote> disagreeVotes = getVotes(disagreeCount, objection, false);
agreeVotes.addAll(disagreeVotes);
addVoteToObjection(objection, agreeVotes);

ObjectionManager tackleManager = new ObjectionManager(objection);
ObjectionManager objectionManager = new ObjectionManager(objection);

// when
boolean result = tackleManager.closeIfOnMajorityOrDone(workerCount);
boolean result = objectionManager.closeIfOnMajorityOrDone(workerCount);

// then
assertThat(!tackleManager.getObjection().isInProgress()).isEqualTo(isClosed);
assertThat(!objectionManager.getObjection().isInProgress()).isEqualTo(isClosed);
assertThat(result).isEqualTo(isClosed);
assertThat(tackleManager.isApproved()).isEqualTo(isApproved);
assertThat(objectionManager.isApproved()).isEqualTo(isApproved);
}

private List<Vote> getVotes(int size, Objection objection, boolean isApproved) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class WorkspaceDrawMangerTest {
@Nested
class 뽑기 {
@Test
void 일등과_꼴등을_뽑은후_워크스페이스는_완전히_종료된다() {
void 일등과_꼴등을_뽑은후_결과를_적용한다면_워크스페이스는_완전히_종료된다() {
// given
Workspace workspace = Instancio.of(Workspace.class)
.set(Select.field(Workspace::getStatus), WorkspaceStatus.COMPLETED)
Expand All @@ -50,9 +50,11 @@ class 뽑기 {
workers.add(worker);
}
WorkspaceDrawManger workspaceDrawManger = new WorkspaceDrawManger(workspace, workers);
WorkspaceResult result = workspaceDrawManger.draw();
assertThat(workspace.isFullyCompleted()).isFalse();

// when
WorkspaceResult result = workspaceDrawManger.draw();
result.apply();

// then
assertThat(workspace.isFullyCompleted()).isTrue();
Expand Down Expand Up @@ -94,7 +96,6 @@ class 뽑기 {
System.out.println("losers = " + losers);

// then
assertThat(workspace.isFullyCompleted()).isTrue();
assertThat(winners).containsAnyOf(workers.get(4), workers.get(9));
assertThat(losers).containsAnyOf(workers.get(0), workers.get(5));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;
Expand Down Expand Up @@ -256,7 +255,6 @@ class 워크스페이스_운동 {
}

@Test
@Transactional
void 투표가_안되었지만_시간이_지난_이의신청은_찬성표를_통해_자동으로_종료시킨다() {
// given
User creator = persister.persistUser();
Expand All @@ -280,9 +278,12 @@ class 워크스페이스_운동 {
workspaceCommandService.terminateExpiredObjection(creator, workspace.getId());

// then
assertThat(objection.isInProgress()).isFalse();
assertThat(objection.getVoteCount()).isEqualTo(4);
assertThat(objection.getApprovalCount()).isEqualTo(3);
entityManager.flush();
entityManager.clear();
Objection refreshObjection = objectionRepository.getByObjectionId(objection.getId());
assertThat(refreshObjection.isInProgress()).isFalse();
assertThat(refreshObjection.getVoteCount()).isEqualTo(4);
assertThat(refreshObjection.getApprovalCount()).isEqualTo(3);

}

Expand Down

0 comments on commit d27750f

Please sign in to comment.