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] refactor: 도메인 의존 관계 분리 draft #597

Closed
wants to merge 3 commits into from
Closed
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
@@ -1,17 +1,11 @@
package com.yigongil.backend.domain;
package com.yigongil.backend.domain.base;

import com.yigongil.backend.domain.event.DomainEvent;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.domain.AfterDomainEventPublication;
import org.springframework.data.domain.DomainEvents;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@EntityListeners(AuditingEntityListener.class)
Expand All @@ -25,23 +19,6 @@ public abstract class BaseEntity {
@LastModifiedDate
protected LocalDateTime updatedAt;

@Transient
private Collection<DomainEvent> domainEvents = new ArrayList<>();

@DomainEvents
public Collection<DomainEvent> events() {
return domainEvents;
}

@AfterDomainEventPublication
public void clear() {
domainEvents.clear();
}

protected void register(DomainEvent event) {
domainEvents.add(event);
}

public LocalDateTime getCreatedAt() {
return createdAt;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.yigongil.backend.domain.base;

import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.domain.AbstractAggregateRoot;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class BaseRootEntity extends AbstractAggregateRoot<BaseRootEntity> {

@CreatedDate
@Column(nullable = false)
protected LocalDateTime createdAt;

@LastModifiedDate
protected LocalDateTime updatedAt;

public LocalDateTime getCreatedAt() {
return createdAt;
}

public LocalDateTime getUpdatedAt() {
return updatedAt;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.yigongil.backend.domain.certification;

import com.yigongil.backend.domain.BaseEntity;
import com.yigongil.backend.domain.base.BaseEntity;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.round.Round;
import com.yigongil.backend.domain.study.Study;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.certification;

import com.yigongil.backend.domain.certification.Certification;
import com.yigongil.backend.domain.certification.CertificationRepository;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.study.Study;
import com.yigongil.backend.exception.NoCertificationException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.yigongil.backend.domain.feedpost;

import com.yigongil.backend.domain.BaseEntity;
import com.yigongil.backend.domain.base.BaseEntity;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.study.Study;
import java.time.LocalDateTime;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.feedpost;

import com.yigongil.backend.domain.feedpost.FeedPost;
import com.yigongil.backend.domain.feedpost.FeedPostRepository;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.study.Study;
import com.yigongil.backend.request.FeedPostCreateRequest;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.yigongil.backend.ui;
package com.yigongil.backend.domain.image;

import com.yigongil.backend.application.ImageResourceService;
import java.net.URI;
import org.springframework.context.annotation.Profile;
import org.springframework.http.ResponseEntity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.image;

import com.yigongil.backend.exception.ImageToBytesException;
import com.yigongil.backend.exception.InvalidImageExtensionException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.yigongil.backend.domain.meetingdayoftheweek;

import com.yigongil.backend.domain.BaseEntity;
import com.yigongil.backend.domain.base.BaseEntity;
import com.yigongil.backend.domain.study.Study;
import java.time.DayOfWeek;
import javax.persistence.Entity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.yigongil.backend.ui;
package com.yigongil.backend.domain.member;

import com.yigongil.backend.application.RoundService;
import com.yigongil.backend.config.auth.Authorization;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.round.RoundService;
import com.yigongil.backend.response.UpcomingStudyResponse;
import com.yigongil.backend.ui.doc.HomeApi;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.yigongil.backend.domain.member;

import com.yigongil.backend.domain.BaseEntity;
import com.yigongil.backend.domain.base.BaseRootEntity;
import com.yigongil.backend.domain.event.MemberDeleteEvent;
import java.util.Objects;
import javax.persistence.Column;
Expand All @@ -17,11 +17,7 @@
@Getter
@SQLDelete(sql = Member.DELETE_QUERY)
@Entity
public class Member extends BaseEntity {

private static final int MASTER_NUMBER = 0;
private static final int PARTICIPANT_NUMBER = 1;
private static final int MAXIMUM_TIER = 5;
public class Member extends BaseRootEntity {

protected static final String DELETE_QUERY = """
update member
Expand All @@ -32,7 +28,9 @@ public class Member extends BaseEntity {
deleted = true
where id = ?
""";

private static final int MASTER_NUMBER = 0;
private static final int PARTICIPANT_NUMBER = 1;
private static final int MAXIMUM_TIER = 5;
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private Long id;
Expand Down Expand Up @@ -103,7 +101,7 @@ public String getIntroduction() {

@PreRemove
public void registerDeleteEvent() {
register(new MemberDeleteEvent(id));
registerEvent(new MemberDeleteEvent(id));
}

public void addExperience(int exp) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.yigongil.backend.ui;
package com.yigongil.backend.domain.member;

import com.yigongil.backend.application.MemberService;
import com.yigongil.backend.config.auth.Authorization;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.request.ProfileUpdateRequest;
import com.yigongil.backend.response.MyProfileResponse;
import com.yigongil.backend.response.NicknameValidationResponse;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.member;

import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.member.MemberRepository;
import com.yigongil.backend.domain.member.Nickname;
import com.yigongil.backend.domain.study.Study;
import com.yigongil.backend.domain.study.StudyService;
import com.yigongil.backend.domain.studymember.StudyMember;
import com.yigongil.backend.domain.studymember.StudyMemberRepository;
import com.yigongil.backend.exception.MemberNotFoundException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.yigongil.backend.domain.report;

import com.yigongil.backend.domain.BaseEntity;
import com.yigongil.backend.domain.base.BaseEntity;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.exception.InvalidReportContentLengthException;
import com.yigongil.backend.exception.InvalidReportTitleLengthException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.yigongil.backend.ui;
package com.yigongil.backend.domain.report;

import com.yigongil.backend.application.ReportService;
import com.yigongil.backend.config.auth.Authorization;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.request.MemberReportCreateRequest;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.report;

import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.report.MemberReport;
import com.yigongil.backend.domain.report.ReportRepository;
import com.yigongil.backend.domain.report.StudyReport;
import com.yigongil.backend.domain.member.MemberService;
import com.yigongil.backend.domain.study.Study;
import com.yigongil.backend.domain.study.StudyService;
import com.yigongil.backend.request.MemberReportCreateRequest;
import com.yigongil.backend.request.StudyReportCreateRequest;
import org.springframework.stereotype.Service;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.yigongil.backend.ui;
package com.yigongil.backend.domain.round;

import com.yigongil.backend.application.MustDoService;
import com.yigongil.backend.config.auth.Authorization;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.request.MustDoUpdateRequest;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.round;

import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.round.Round;
import com.yigongil.backend.domain.round.RoundRepository;
import com.yigongil.backend.exception.RoundNotFoundException;
import com.yigongil.backend.request.MustDoUpdateRequest;
import org.springframework.stereotype.Service;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.yigongil.backend.domain.round;

import com.yigongil.backend.domain.BaseEntity;
import com.yigongil.backend.domain.meetingdayoftheweek.MeetingDayOfTheWeek;
import com.yigongil.backend.domain.base.BaseEntity;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.roundofmember.RoundOfMember;
import com.yigongil.backend.domain.study.Study;
Expand Down Expand Up @@ -60,9 +59,8 @@ public class Round extends BaseEntity {
@JoinColumn(name = "round_id", nullable = false)
private List<RoundOfMember> roundOfMembers = new ArrayList<>();

@Cascade(CascadeType.PERSIST)
@ManyToOne(fetch = FetchType.LAZY)
private MeetingDayOfTheWeek meetingDayOfTheWeek;
@Enumerated(EnumType.ORDINAL)
private DayOfWeek dayOfWeek;

@Column(nullable = false)
private Integer weekNumber;
Expand All @@ -80,22 +78,22 @@ public Round(
String mustDo,
Member master,
List<RoundOfMember> roundOfMembers,
MeetingDayOfTheWeek meetingDayOfTheWeek,
DayOfWeek dayOfWeek,
Integer weekNumber
) {
this.id = id;
this.study = study;
this.mustDo = mustDo;
this.master = master;
this.roundOfMembers = roundOfMembers == null ? new ArrayList<>() : roundOfMembers;
this.meetingDayOfTheWeek = meetingDayOfTheWeek;
this.dayOfWeek = dayOfWeek;
this.weekNumber = weekNumber;
}

public static Round of(MeetingDayOfTheWeek meetingDayOfTheWeek, Study study, Integer weekNumber) {
public static Round of(DayOfWeek dayOfWeek, Study study, Integer weekNumber) {
return Round.builder()
.study(study)
.meetingDayOfTheWeek(meetingDayOfTheWeek)
.dayOfWeek(dayOfWeek)
.weekNumber(weekNumber)
.master(study.getMaster())
.roundOfMembers(RoundOfMember.from(study))
Expand Down Expand Up @@ -140,7 +138,7 @@ public boolean isMustDoDone(Member member) {
}

public boolean isEndAt(LocalDate date) {
return meetingDayOfTheWeek.isSameDayOfWeek(date.getDayOfWeek());
return dayOfWeek == date.getDayOfWeek();
}

public RoundOfMember findRoundOfMemberBy(Member member) {
Expand Down Expand Up @@ -180,30 +178,26 @@ public boolean isSameWeek(Integer weekNumber) {
return this.weekNumber == weekNumber;
}

public boolean isSameDayOfWeek(MeetingDayOfTheWeek meetingDayOfTheWeek) {
return this.meetingDayOfTheWeek.equals(meetingDayOfTheWeek);
public boolean isSameDayOfWeek(DayOfWeek dayOfWeek) {
return this.dayOfWeek.equals(dayOfWeek);
}

public boolean isNextDayOfWeek(DayOfWeek dayOfWeek) {
return this.meetingDayOfTheWeek.comesNext(dayOfWeek);
return this.dayOfWeek.getValue() > dayOfWeek.getValue();
}

public boolean isInProgress() {
return roundStatus == RoundStatus.IN_PROGRESS;
}

public int calculateLeftDaysFrom(LocalDate date) {
int gap = meetingDayOfTheWeek.getDayOfWeek().getValue() - date.getDayOfWeek().getValue();
int gap = dayOfWeek.getValue() - date.getDayOfWeek().getValue();
if (gap < 0) {
return gap + DayOfWeek.values().length;
}
return gap;
}

public DayOfWeek getDayOfWeek() {
return meetingDayOfTheWeek.getDayOfWeek();
}

public boolean isBeforeOrSame(Integer minimumWeeks) {
return weekNumber <= minimumWeeks;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.round;

import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.round.Round;
import com.yigongil.backend.domain.round.RoundRepository;
import com.yigongil.backend.domain.study.ProcessingStatus;
import com.yigongil.backend.domain.study.Study;
import com.yigongil.backend.domain.study.StudyRepository;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.yigongil.backend.domain.roundofmember;

import com.yigongil.backend.domain.BaseEntity;
import com.yigongil.backend.domain.base.BaseEntity;
import com.yigongil.backend.domain.member.Member;
import com.yigongil.backend.domain.study.Study;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.yigongil.backend.application;
package com.yigongil.backend.domain.study;

import java.time.LocalDate;
import org.springframework.scheduling.annotation.Scheduled;
Expand Down
Loading