GroupMember.java
package qwerty.chaekit.domain.group.groupmember;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import qwerty.chaekit.domain.BaseEntity;
import qwerty.chaekit.domain.group.ReadingGroup;
import qwerty.chaekit.domain.member.user.UserProfile;
import java.time.LocalDateTime;
@Entity
@Getter
@Table(name = "group_member")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class GroupMember extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group_id", nullable = false)
private ReadingGroup readingGroup;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name ="user_id", nullable = false)
private UserProfile user;
@Column(name = "is_accepted", nullable = false)
private boolean accepted = false;
private LocalDateTime approvedAt;
@Builder
public GroupMember(ReadingGroup readingGroup, UserProfile user) {
this.readingGroup = readingGroup;
this.user = user;
this.accepted = false; // 초기에는 미승인 상태
}
public ReadingGroup getGroup() {
return this.readingGroup;
}
public UserProfile getMember() {
return this.user;
}
public void approve() {
this.accepted = true;
this.approvedAt = LocalDateTime.now();
}
public void reject() {
this.accepted = false;
}
public boolean matchesUser(UserProfile user) {
return matchesUserId(user.getId());
}
public boolean matchesUserId(Long userId) {
return this.user.getId().equals(userId);
}
public boolean isLeader(){
return readingGroup.isLeader(user);
}
}