Skip to content

Commit

Permalink
feat: isManualConfirmed 제거 및 도메인 로직 확인 (#377)
Browse files Browse the repository at this point in the history
* refactor: isManualConfirmed 칼럼 삭제 및 관련 로직 분리

* refactor: 더미 데이터 수정

---------

Co-authored-by: fromitive <fromitive@gmail.com>
  • Loading branch information
masonkimseoul and fromitive authored Aug 19, 2024
1 parent e924260 commit b46bdd0
Show file tree
Hide file tree
Showing 11 changed files with 381 additions and 421 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,8 @@ public CommentRoomStatusResponse updateCommentRoomStatus(Long offeringId, Member
.orElseThrow(() -> new MarketException(OfferingErrorCode.NOT_FOUND));
validateIsProposer(member, offering);
CommentRoomStatus updatedStatus = offering.moveCommentRoomStatus();
if (updatedStatus.isBuying()) {
if (updatedStatus.isBuying()) { // TODO : 도메인으로 정리
offering.updateOfferingStatus(OfferingStatus.CONFIRMED);
offering.manuallyConfirm();
}
return new CommentRoomStatusResponse(updatedStatus);
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.zzang.chongdae.offering.domain;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class OfferingJoinedCount {

private final int totalCount;
private final int currentCount;

public OfferingStatus decideOfferingStatus() {
return OfferingStatus.decideByJoinedCount(this);
}

public boolean isCountFull() {
return this.totalCount == this.currentCount;
}

public boolean isCountAlmostFull() {
if (totalCount <= 3) {
return (totalCount - currentCount) < 2;
}
return (totalCount - currentCount) < 3;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,11 @@ public enum OfferingStatus {
CONFIRMED,
AVAILABLE;

public static OfferingStatus decideBy(OfferingCondition offeringCondition) {
if (offeringCondition.isManualConfirmed() || (offeringCondition.isMeetingDateOver())) {
return CONFIRMED;
}
if (offeringCondition.isCountFull()) {
public static OfferingStatus decideByJoinedCount(OfferingJoinedCount offeringJoinedCount) {
if (offeringJoinedCount.isCountFull()) {
return FULL;
}
if (offeringCondition.isCountAlmostFull() || offeringCondition.isMeetingDateAlmostOver()) {
if (offeringJoinedCount.isCountAlmostFull()) {
return IMMINENT;
}
return AVAILABLE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.zzang.chongdae.global.repository.entity.BaseTimeEntity;
import com.zzang.chongdae.member.repository.entity.MemberEntity;
import com.zzang.chongdae.offering.domain.CommentRoomStatus;
import com.zzang.chongdae.offering.domain.OfferingCondition;
import com.zzang.chongdae.offering.domain.OfferingJoinedCount;
import com.zzang.chongdae.offering.domain.OfferingMeeting;
import com.zzang.chongdae.offering.domain.OfferingPrice;
import com.zzang.chongdae.offering.domain.OfferingStatus;
Expand Down Expand Up @@ -77,9 +77,6 @@ public class OfferingEntity extends BaseTimeEntity {
@Positive
private Integer currentCount = INITIAL_COUNT;

@NotNull
private Boolean isManualConfirmed; // TODO: remove

@NotNull
@Positive
private Integer totalPrice;
Expand All @@ -101,11 +98,11 @@ public class OfferingEntity extends BaseTimeEntity {
public OfferingEntity(MemberEntity member, String title, String description, String thumbnailUrl, String productUrl,
LocalDateTime meetingDate, String meetingAddress, String meetingAddressDetail,
String meetingAddressDong,
Integer totalCount, Integer currentCount, Boolean isManualConfirmed, Integer totalPrice,
Integer totalCount, Integer currentCount, Integer totalPrice,
Integer originPrice, Double discountRate,
OfferingStatus offeringStatus, CommentRoomStatus roomStatus) {
this(null, member, title, description, thumbnailUrl, productUrl, meetingDate, meetingAddress,
meetingAddressDetail, meetingAddressDong, totalCount, currentCount, isManualConfirmed, totalPrice,
meetingAddressDetail, meetingAddressDong, totalCount, currentCount, totalPrice,
originPrice, discountRate, offeringStatus, roomStatus);
}

Expand All @@ -122,16 +119,12 @@ public CommentRoomStatus moveCommentRoomStatus() {
return this.roomStatus;
}

public void manuallyConfirm() {
this.isManualConfirmed = true;
}

public OfferingPrice toOfferingPrice() {
return new OfferingPrice(totalCount, totalPrice, originPrice);
}

public OfferingCondition toOfferingCondition() {
return new OfferingCondition(meetingDate, totalCount, isManualConfirmed, currentCount);
public OfferingJoinedCount toOfferingJoinedCount() {
return new OfferingJoinedCount(totalCount, currentCount);
}

public OfferingMeeting toOfferingMeeting() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.zzang.chongdae.global.exception.MarketException;
import com.zzang.chongdae.member.repository.entity.MemberEntity;
import com.zzang.chongdae.offering.domain.OfferingCondition;
import com.zzang.chongdae.offering.domain.OfferingJoinedCount;
import com.zzang.chongdae.offering.domain.OfferingFilter;
import com.zzang.chongdae.offering.domain.OfferingMeeting;
import com.zzang.chongdae.offering.domain.OfferingPrice;
Expand Down Expand Up @@ -46,10 +46,11 @@ public OfferingDetailResponse getOfferingDetail(Long offeringId, MemberEntity me
OfferingEntity offering = offeringRepository.findById(offeringId)
.orElseThrow(() -> new MarketException(OfferingErrorCode.NOT_FOUND));
OfferingPrice offeringPrice = offering.toOfferingPrice();
OfferingCondition offeringCondition = offering.toOfferingCondition();
OfferingJoinedCount offeringJoinedCount = offering.toOfferingJoinedCount();
Boolean isProposer = offering.isProposedBy(member); // TODO: 추후 도메인으로 분리
Boolean isParticipated = offeringMemberRepository.existsByOfferingAndMember(offering, member);
return new OfferingDetailResponse(offering, offeringPrice, offeringCondition, isProposer, isParticipated);
return new OfferingDetailResponse(
offering, offeringPrice, offeringJoinedCount, isProposer, isParticipated);
}

public OfferingAllResponse getAllOffering(String filterName, String searchKeyword, Long lastId, Integer pageSize) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.zzang.chongdae.offering.service.dto;

import com.zzang.chongdae.offering.domain.OfferingCondition;
import com.zzang.chongdae.offering.domain.OfferingJoinedCount;
import com.zzang.chongdae.offering.domain.OfferingPrice;
import com.zzang.chongdae.offering.domain.OfferingStatus;
import com.zzang.chongdae.offering.repository.entity.OfferingEntity;
Expand All @@ -26,7 +26,7 @@ public record OfferingDetailResponse(Long id,

public OfferingDetailResponse(OfferingEntity offering,
OfferingPrice offeringPrice,
OfferingCondition offeringCondition,
OfferingJoinedCount offeringJoinedCount,
Boolean isProposer,
Boolean isParticipated) {
this(offering.getId(),
Expand All @@ -36,12 +36,12 @@ public OfferingDetailResponse(OfferingEntity offering,
offering.getMeetingAddressDetail(),
offering.getDescription(),
offering.getMeetingDate(),
offeringCondition.getCurrentCount(),
offeringJoinedCount.getCurrentCount(),
offering.getTotalCount(),
offering.getThumbnailUrl(),
offeringPrice.calculateDividedPrice(),
offering.getTotalPrice(),
offeringCondition.decideOfferingStatus(),
offering.getOfferingStatus(),
offering.getMember().getId(),
offering.getMember().getNickname(),
isProposer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public OfferingEntity toEntity(MemberEntity member) {
Double discountRate = offeringPrice.calculateDiscountRate();

return new OfferingEntity(member, title, description, thumbnailUrl, productUrl, meetingDate, meetingAddress,
meetingAddressDetail, meetingAddressDong, totalCount, 1, false,
meetingAddressDetail, meetingAddressDong, totalCount, 1,
totalPrice, originPrice, discountRate, OfferingStatus.AVAILABLE, CommentRoomStatus.GROUPING);
// TODO : 각자 맡은 팀에서 계산하는 로직 생각하기, 객체로 빼서 만드셈~
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public Long participate(ParticipationRequest request, MemberEntity member) {
offeringMemberRepository.save(offeringMember);

offering.participate();
OfferingStatus offeringStatus = offering.toOfferingCondition().decideOfferingStatus();
OfferingStatus offeringStatus = offering.toOfferingJoinedCount().decideOfferingStatus();
offering.updateOfferingStatus(offeringStatus);
return offeringMember.getId();
}
Expand Down Expand Up @@ -71,7 +71,7 @@ public void cancelParticipate(Long offeringId, MemberEntity member) {
validateCancel(offeringMember);
offeringMemberRepository.delete(offeringMember);
offering.leave();
OfferingStatus offeringStatus = offering.toOfferingCondition().decideOfferingStatus();
OfferingStatus offeringStatus = offering.toOfferingJoinedCount().decideOfferingStatus();
offering.updateOfferingStatus(offeringStatus);
}

Expand Down
Loading

0 comments on commit b46bdd0

Please sign in to comment.