Skip to content

Commit

Permalink
fix: 조직 회원도 크루로 인식되도록 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
gracefulBrown committed Feb 2, 2025
1 parent 4e88292 commit 6121679
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,23 @@ public Member findOrCreateMember(GithubProfileResponse githubProfile) {
.orElseGet(() -> createMember(githubProfile));
}

@Transactional
public Member createMember(GithubProfileResponse githubProfile) {
Member member = memberRepository.save(githubProfile.toMember());
eventPublisher.publishEvent(new MemberCreatedEvent(member));
return member;
}

@Transactional
public Member findById(Long id) {
return memberRepository.findById(id)
Member member = memberRepository.findById(id)
.orElseThrow(() -> new BadRequestException(MEMBER_NOT_FOUND));

boolean isMemberOfOrganization = organizationService.isMemberOfOrganization(member);
if (isMemberOfOrganization && member.getRole().equals(Role.GUEST)) {
member.updateRole(Role.CREW);
}
return member;
}

public Member findByUsername(String username) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import wooteco.prolog.member.domain.Member;
import wooteco.prolog.member.domain.MemberCreatedEvent;
import wooteco.prolog.organization.domain.Organization;
import wooteco.prolog.organization.domain.OrganizationGroup;
Expand Down Expand Up @@ -106,4 +107,8 @@ public List<OrganizationGroup> findOrganizationGroupsByMemberId(Long memberId) {
memberId).stream().map(OrganizationGroupMember::getOrganizationGroupId).collect(Collectors.toList());
return organizationGroupRepository.findByIdInOrderByIdDesc(organizationGroupIds);
}

public boolean isMemberOfOrganization(Member member) {
return organizationGroupMemberRepository.existsByUsername(member.getUsername());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ public interface OrganizationGroupMemberRepository extends JpaRepository<Organiz

List<OrganizationGroupMember> findByMemberId(Long memberId);

boolean existsByUsername(String username);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import org.springframework.transaction.annotation.Transactional;
import wooteco.prolog.common.exception.BadRequestException;
import wooteco.prolog.login.ui.LoginMember;
import wooteco.prolog.member.domain.Member;
import wooteco.prolog.member.domain.repository.MemberRepository;
import wooteco.prolog.organization.application.OrganizationService;
import wooteco.prolog.organization.domain.OrganizationGroupSession;
import wooteco.prolog.session.application.dto.SessionRequest;
Expand All @@ -31,6 +33,7 @@ public class SessionService {
private final SessionMemberService sessionMemberService;
private final OrganizationService organizationService;
private final SessionRepository sessionRepository;
private final MemberRepository memberRepository;

@Transactional
public SessionResponse create(SessionRequest sessionRequest) {
Expand Down Expand Up @@ -72,12 +75,15 @@ public List<SessionResponse> findAllOrderByDesc() {
}

public List<SessionResponse> findMySessions(LoginMember loginMember) {
List<SessionResponse> mySessionResponses = findMySessionOnlyMine(loginMember);
List<OrganizationGroupSession> organizationGroupSessions = organizationService.findOrganizationGroupSessionsByMemberId(
loginMember.getId());
Member member = memberRepository.findById(loginMember.getId())
.orElseThrow(() -> new RuntimeException("존재하지 않는 회원입니다."));
List<OrganizationGroupSession> organizationGroupSessions = organizationService.findOrganizationGroupSessionsByMemberUsername(
member.getUsername());
List<SessionResponse> organizationSessions = organizationGroupSessions.stream()
.map(it -> SessionResponse.of(it.getSession()))
.collect(Collectors.toList());

List<SessionResponse> mySessionResponses = findMySessionOnlyMine(loginMember);
mySessionResponses.removeAll(organizationSessions);

return Stream.of(mySessionResponses, organizationSessions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import wooteco.prolog.member.application.MemberTagService;
import wooteco.prolog.member.domain.Member;
import wooteco.prolog.member.domain.Role;
import wooteco.prolog.organization.application.OrganizationService;
import wooteco.prolog.session.application.AnswerService;
import wooteco.prolog.session.application.MissionService;
import wooteco.prolog.session.application.SessionService;
Expand Down Expand Up @@ -79,6 +80,7 @@ public class StudylogService {
private final AnswerService answerService;
private final SessionService sessionService;
private final MissionService missionService;
private final OrganizationService organizationService;
private final StudylogRepository studylogRepository;
private final StudylogScrapRepository studylogScrapRepository;
private final StudylogReadRepository studylogReadRepository;
Expand Down Expand Up @@ -133,7 +135,10 @@ private List<Answer> saveAnswers(Long memberId, List<AnswerRequest> answers, Stu
}

private void validateMemberIsCrew(final Member member) {
if (member.hasLowerImportanceRoleThan(Role.CREW)) {
boolean isOrganizationMember = organizationService.isMemberOfOrganization(member);
boolean isMember = member.hasLowerImportanceRoleThan(Role.CREW);

if (!isOrganizationMember && !isMember) {
throw new BadRequestException(MEMBER_NOT_ALLOWED);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package wooteco.prolog.organization.domain;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import wooteco.prolog.organization.domain.repository.OrganizationGroupMemberRepository;

@Transactional
@SpringBootTest
public class OrganizationGroupMemberRepositoryTest {

@Autowired
private OrganizationGroupMemberRepository repository;

@Test
public void existsByUsername_shouldReturnTrue_whenUsernameExists() {
// given
String username = "existingUser";
OrganizationGroupMember member = new OrganizationGroupMember(1L, username, "nickname");
repository.save(member);

// when
boolean exists = repository.existsByUsername(username);

// then
assertThat(exists).isTrue();
}

@Test
public void existsByUsername_shouldReturnFalse_whenUsernameDoesNotExist() {
// given
String username = "nonExistingUser";

// when
boolean exists = repository.existsByUsername(username);

// then
assertThat(exists).isFalse();
}
}

0 comments on commit 6121679

Please sign in to comment.