그램그램 - 중복호감표시 금지, 10명이상 호감 금지

JIWOO YUN·2024년 6월 2일
0

GramGram

목록 보기
10/11
post-custom-banner
  • 중복 호감 표시를 금지시키려면 해당호감표시를 했는 지 확인이 필요하다.

중복 호감 금지

  • 내가 호감을 표현한 목록에 인스타 이름이 있는지 확인하여 있는 경우 호감표시가 불가능하도록 하면 되는 간단한 요소
if(fromInstaMember.getFromLikeablePeople().size() >= AppConfig.getLikeablePersonFromMax()){
    return RsData.of("F-1","%d명 이상에게 호감을 표시할 수 없습니다.".formatted(AppConfig.getLikeablePersonFromMax()));

}

    private boolean canLike(InstaMember fromInstaMember, InstaMember toInstaMember) {
        List<LikeablePerson> fromLikeablePeople = fromInstaMember.getFromLikeablePeople();

        LikeablePerson likeablePerson = fromLikeablePeople.stream()
                .filter(e -> e.getToInstaMember().getUsername().equals(toInstaMember.getUsername()))
                .findFirst()
                .orElse(null);

        if (likeablePerson != null) {
            return false;
        }

        return true;

    }

중복 호감을 보내는데 만약 typeCode가 다른 경우

  • 호감 표시만 수정하는 방식으로 진행
    • 만약 호감 typecode 까지 똑같은 경우에만 중복 호감을 보낸다고 처리.
  • 비교해야 할 것들
    • 인스타 이름 + 호감 코드
if (searchLikeablePerson != null) {
    if (searchLikeablePerson.getAttractiveTypeCode() == attractiveTypeCode) {
        log.info("중복 호감 표시");
        return RsData.of("F-1", "이미 호감을 표시한 상대입니다.");
    }

    searchLikeablePerson.modifyAttractiveTypCode(attractiveTypeCode);
    return RsData.of("S-2", "호감 수정 완료");
  • 호감리스트에 있는 경우
    • 호감 표시 코드 비교후 같으면 중복 호감으로 불가능하게 진행
  • 호감표시 코드는 다른 경우
    • 호감 수정 진행.

10명 이상 호감표시 금지

  • 내가 호감을 표현한 리스트의 크기가 10이면 더이상 불가능
if(fromInstaMember.getFromLikeablePeople().size() >= AppConfig.getLikeablePersonFromMax()){
    return RsData.of("F-1","%d명 이상에게 호감을 표시할 수 없습니다.".formatted(AppConfig.getLikeablePersonFromMax()));

}

추가로 할 부분

  • 호감 수정 부분

현재 호감 표시를 할때 중복으로 들어온 회원에 대해서 처리를 했었는데 호감 목록에서 호감을표시한 대상의 호감 이유를 바꿀 수 있어야 하기 때문에.

호감 수정 부분으로 이동하는 부분

    @PreAuthorize("isAuthenticated()")
    @GetMapping("/modify/{id}")
    public String modify(@PathVariable("id") Long id, Model model) {
        LikeablePerson likeablePerson = likeablePersonService.findById(id).orElseThrow();

        RsData modifyLikeData = likeablePersonService.canModifyLike(rq.getMember(), likeablePerson);

        if (modifyLikeData.isFail()) {
            rq.historyBack(modifyLikeData.getMsg());
        }

        model.addAttribute("likeablePerson", likeablePerson);


        return "/likeablePerson/modify";
    }
  • 수정이 가능한지 확인 후 가능하면 modifty 폼으로 이동

호감 수정 진행

@PreAuthorize("isAuthenticated()")
@GetMapping("modify/{id}")
public String modifyLike(@PathVariable("id") Long id, @Valid ModifyForm modifyForm) {

    RsData likeData = likeablePersonService.modifyLike(rq.getMember(), id, modifyForm.getAttractiveTypeCode());

    if (likeData.isFail()) {
        return rq.historyBack(likeData.getMsg());
    }

    return rq.redirectWithMsg("/likeablePerson/list", likeData.getMsg());

}
  • 호감이 실패하는 경우 오류를 내보내면서 historyback 진행
  • 변경이 되면 호감리스트로 리다이렉트되며 호감이 완료되었다고 알림 메시지 남기기.

호감 수정 서비스단

@Transactional
public RsData modifyLike(Member member, Long id, int attractiveTypeCode) {

    LikeablePerson likeablePerson = likeablePersonRepository.findById(id).orElseThrow();

    RsData rsData = canModifyLike(member, likeablePerson);

    if (rsData.isFail()) {
        return rsData;
    }

    likeablePerson.modifyAttractiveTypCode(attractiveTypeCode);


    return RsData.of("S-2", "호감 사유 수정이 완료되었습니다.");


}

public RsData canModifyLike(Member member, LikeablePerson likeablePerson) {
    if (!member.hasConnectedInstaMember()) {
        return RsData.of("F-1", "먼저 본인의 인스타그램 아이디를 입력해주세요.");
    }

    InstaMember fromInstaMember = member.getInstaMember();

    if (!Objects.equals(fromInstaMember.getId(), likeablePerson.getFromInstaMember().getId())) {
        log.info("권한이 없습니다.");
        return RsData.of("F-1", "권한이 없습니다.");
    }


    return RsData.of("S-1", "수정 가능");
}
  • 해당 권한이 있는지 확인하는 부분과 수정이 진행되는 부분
    • 수정이 진행되는 부분은 transaction내에서 돌아가게 진행.
      • 데이터의 변경이 생기기 때문에.
profile
열심히하자
post-custom-banner

0개의 댓글