정리하고 기록하며 성장하는

[카우치코딩] 팀프로젝트 6주차 회고 본문

팀프로젝트

[카우치코딩] 팀프로젝트 6주차 회고

개발하는묭이 2022. 7. 5. 11:34
  • [o] 스터디 참여신청 기능 개발
  • [o] 스터디 참여자 정보조회 기능 개발
  • [o] 스터디 공유로그 CR 기능 개발
  • [o] 마이스터디 Read 기능 개발
  • [o] 스터디 관심 등록 기능 개발

스터디 참여자 정보조회 기능 개발

// 스터디 참여자 정보조회
@Transactional
public List<StudyMember> studyMembers(Long studyId) {
    List<StudyMember> studyMembers = studyMemberRepository.findAllByStudyId(studyId);
    return studyMembers;
}
List<StudyMember> findAllByStudyId(Long studyId);
@Override
public List<StudyMember> findAllByStudyId(Long studyId) {
    List<StudyMember> studyMembers = queryFactory.selectFrom(studyMember)
            .where(eqStudyId(studyId)).fetch();
    return studyMembers;
}

스터디 참여신청 기능 개발

// 스터디 참여 신청 (멤버)
@Transactional
public StudyMemberResponseDto studyMemberEnroll(Member member, Long studyId) {
    Study study = studyRepository.findById(studyId).orElseThrow(() -> {
        throw new StudyNotFoundException();
    });

    StudyMember studyMember = StudyMember.builder()
            .study(study)
            .role("member")
            .member(member)
            .build();

    log.info("member techStack: {}" + member.getTechStack().toString());

    StudyMember entityResult = studyMemberRepository.saveAndFlush(studyMember);
    log.info("entityResult: {}" + entityResult);

    int updateParticipants = study.getCurrentParticipants() + 1;
    Study entity = study.updateCurrentParticipants( updateParticipants);
    StudyMemberResponseDto studyMemberResponseDto = new StudyMemberResponseDto();
    studyMemberResponseDto.setMember(entityResult.getMember());
    studyMemberResponseDto.setStudy(entity);
    return studyMemberResponseDto;
}
  • 현재 스터디 참여인원수를 update 하기 위해 현재 인원수 + 1해주는 방식
  • 이는 한번에 사람이 몰리면 락이 걸려 느려지는 문제가 발생할 수 있다
  • 이를 위해 study_id = ?일때를 디비에서 카운팅 하는 방식으로 코드를 리펙토링 할 예정이다

스터디 공유로그 Create , Read 기능 개발

스터디 공유로그 Create

public StudyBlogResponseDto  blogs(StudyBlogRequestDto studyBlogRequestDto, Member member , Long studyId) {

    Study study = studyService.getStudy(studyId);
    Member result = getMember(study, member);

    StudyBlog studyBlog = new StudyBlog(studyBlogRequestDto, result, study);
    StudyBlog entity = studyBlogRepository.save(studyBlog);
    StudyBlogResponseDto studyBlogResponseDto = new StudyBlogResponseDto(entity);
    return studyBlogResponseDto;
}

스터디 조회시 공유로그 Read

public StudyBlogListResponseDto getBlogs(Long studyId) {
   Study study =  studyService.getStudy(studyId);
   List<StudyMember> studyMembers = study.getStudyMembers();
   List<StudyBlogMemberResponseDto> studyBlogMemberResponseDtos = new ArrayList<>();
   for (StudyMember studyMember : studyMembers) {
       String uid = studyMember.getUid();
       String blogUrl = studyMember.getMember().getBlogUrl();
       String githubUrl = studyMember.getMember().getGithubUrl();
       List<String> techStack = studyMember.getMember().getTechStack();
       String role = studyMember.getRole();
       StudyBlogMemberResponseDto studyBlogMemberResponseDto = new StudyBlogMemberResponseDto(uid, blogUrl, githubUrl, techStack, role);
       studyBlogMemberResponseDtos.add(studyBlogMemberResponseDto);
   }

   StudyBlogListResponseDto studyBlogListResponseDto = new StudyBlogListResponseDto(studyBlogMemberResponseDtos, study.getStudyBlogs());
   return studyBlogListResponseDto;
}

마이스터디 조회 기능 개발

  • 내가 참여한 스터디 조회
// 마이스터디 - 내가 참여한 스터디 조회
public List<StudyProgressDto> myJoinStudies(Member member) {
    String uid = member.getUid();

    String role = "member";
    String status = "진행";
    List<StudyMember> studyMembers = studyMemberRepository.findAllByUidAndRoleAndStatus(uid, role, status);

    role = "leader";
    List<StudyMember> studyMembers2 = studyMemberRepository.findAllByUidAndRoleAndStatus(uid, role, status);

    for (StudyMember studyMember : studyMembers2) {
        studyMembers.add(studyMember);
    }
    
    List<StudyProgressDto> studyProgressDtosList  = getInfo(studyMembers);
    return studyProgressDtosList;
}
  • 내가 완료한 스터디 조회
// 마이스터디 - 내가 완료한 스터디
public List<StudyCompletionDto> myStudiesCompletion(Member member) {
    List<StudyCompletionDto> studyCompletionDtos = new ArrayList<>();
    String role = "leader";
    String uid = member.getUid();
    String status = "완료";

    List<StudyMember> studyMembers = studyMemberRepository.findAllByUidAndRoleAndStatus(uid, role, status);

    role = "member";
    List<StudyMember> studyMemberList = studyMemberRepository.findAllByUidAndRoleAndStatus(uid, role, status);

    for (StudyMember studyMember : studyMemberList) {
        studyMembers.add(studyMember);
    }

    List<StudyProgressDto> studyProgressDtos =  getInfo(studyMembers);

    for (StudyProgressDto studyProgressDto : studyProgressDtos) {
        Long studyId = studyProgressDto.getStudyId();
        Study study = studyRepository.findById(studyId).orElseThrow(() -> {
            throw new StudyNotFoundException();
        });
        Boolean likeStatus = studyProgressDto.getLikeStatus();
        StudyCompletionDto studyCompletionDto = new StudyCompletionDto(study, likeStatus);
        studyCompletionDtos.add(studyCompletionDto);
    }
    return studyCompletionDtos;
}
  • 마이스터디 - 내가 개설한 스터디 조회
// 마이스터디 - 내가 개설한 스터디 조회
public List<StudyCreationDto> mystudies(Member member) {
    List<StudyCreationDto> studyCreationDtoList = new ArrayList<>();
    String role = "leader";

    // role과 member의 uid , status 사용하여 검색
    String uid = member.getUid();
    List<StudyMember> studyMembers = studyMemberRepository.findAllByUidAndRoleAndStatus(uid, role, "진행");
    List<StudyMember> studyMembers2 = studyMemberRepository.findAllByUidAndRoleAndStatus(uid, role, "완료");

    for (StudyMember studyMember : studyMembers2) {
        studyMembers.add(studyMember);
    }
    List<StudyProgressDto> studyProgressDtos =  getInfo(studyMembers);

    for (StudyProgressDto studyProgressDto : studyProgressDtos) {
        Long studyId = studyProgressDto.getStudyId();
        Study study = studyRepository.findById(studyId).orElseThrow(() -> {
            throw new StudyNotFoundException();
        });
        Boolean likeStatus = studyProgressDto.getLikeStatus();
        StudyCreationDto studyCreationDto = new StudyCreationDto(study, likeStatus);
        studyCreationDtoList.add(studyCreationDto);
    }
    return studyCreationDtoList;
}
  • 내가 관심등록한 스터디 조회
// 관심스터디 목록 조회
public List<StudyLikeStatus> getMyStudysLikes(Member member) {
    // likeStatus가 true이고 // memberUid가 uid를 사용하여 조회
    Boolean likeStatus = true;
    List<StudyLike> studyLikes = studyLikeRepository.findAllByLikeStatusAndUid(likeStatus, member.getUid());
    List<StudyLikeStatus> studyLikeStatus = new ArrayList<>();

    for (StudyLike studyLike : studyLikes) {
        String uid = studyLike.getMember().getUid();
        Study study = studyLike.getStudy();
        Boolean status = studyLike.getLikeStatus();
        StudyLikeStatus result = new StudyLikeStatus(study, status, uid);
        studyLikeStatus.add(result);
    }
    return studyLikeStatus;
}

스터디 관심 등록 기능 개발

// 스터디 관심 등록
public StudyLikeResponseDto LikeMyStudy(Member member, Long studyId , StudyLikeRequestDto studyLikeRequestDto) {
    Study study = studyService.getStudy(studyId);
    StudyLike studyLike = new StudyLike(member, study, studyLikeRequestDto.isLikeStatus());

    for (int i = 0; i < study.getStudyLikes().size(); i++) {
        if (study.getStudyId() == study.getStudyLikes().get(i).getStudy().getStudyId() && member.getUid().equals(study.getStudyLikes().get(i).getMember().getUid())) {
            throw new StudyLikeException();
        }
    }

    StudyLike entity = studyLikeRepository.save(studyLike);
    StudyLikeResponseDto studyLikeResponseDto = new StudyLikeResponseDto(entity.getId(),member.getUid(), study.getStudyId(), entity.getLikeStatus());
    return studyLikeResponseDto;
}