2024. 5. 22. 23:33ㆍProject/Naver Cafe
카페를 생성을 구현했으니 이번에는 카페 회원 가입을 구현해보려 한다. 카페 가입을 위해서는 당연하지만 네이버 계정이 있어야하며 로그인 상태여야 한다. 로그인 상태야 토큰을 통해 체크하고 토큰 정보를 통해 로그인 사용자의 네이버 계정 정보를 조회해 해당 정보와 카페 회원 가입 정보로 카페 회원 가입이 이루어진다.
CafeMember
package CloneCoding.NaverCafe.domain.cafeMember;
@Entity
@Table(name = "CAFE_MEMBER")
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class CafeMember {
public static CafeMember createCafeMember(RequestJoinCafeMember.CafeMemberInfo request,
Cafe cafe, Member member) {
String nickname = checkNickname(request.getNickname(), member.getNickname());
return CafeMember.builder()
.accountId(member.getAccountId())
.nickname(nickname)
.profileImage(request.getProfileImage())
.openSetting(request.isOpenSetting())
.gender(member.getGender())
.birthday(member.getBirthday())
.cafeId(cafe)
.build();
}
private static String checkNickname(String request, String basic) {
if (request.isEmpty()) return basic;
return request;
}
}
CafeMember 클래스에는 요청 정보로 객체를 생성할 수 있는 메서드를 추가하였다.
- createCafeMember() : 카페 가입 정보와 카페 정보, 네이버 계정 정보를 통해 CafeMember 객체를 생성 후 반환
- checkNickname() : 카페에서 사용할 별명을 체크하며 카페 가입 정보의 별명이 있다면 해당 별명을 없다면 네이버 계정의 별명을 반환
RequestJoinCafeMember
package CloneCoding.NaverCafe.domain.cafeMember.dto;
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class RequestJoinCafeMember {
@NotNull
private String url;
@NotNull
private CafeMemberInfo cafeMemberInfo;
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class CafeMemberInfo {
private String profileImage = "default_image";
private String nickname = "";
private boolean openSetting = true;
}
}
카페 가입 정보를 전달하는 DTO이다. 전달하는 정보는 크게 2가지로 카페 URL와 가입 입력 정보이다. 두 정보는 반드시 있어야 하며, 가입 입력 정보의 경우 기본 값들을 가진다. 정보를 2가지로 나눈 이유는 CafeMember 클래스가 아닌 CafeMemberServiceImpl 클래스에서 카페 URL로 카페를 조회해 카페 정보를 전달하기 위해서이다.
CafeMemberController
package CloneCoding.NaverCafe.domain.cafeMember.controller;
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/cafeMember")
public class CafeMemberController {
private final CafeMemberService cafeMemberService;
@PostMapping("/join")
public String joinCafeMember(@RequestBody @Valid RequestJoinCafeMember request,
@RequestHeader("Authorization") String token) {
log.info("카페 회원 가입 요청");
return cafeMemberService.joinCafeMember(request, token);
}
}
- joinCafeMember() : 요청 정보를 파라미터로 joinCafeMember()를 호출해 해당 메서드의 결과 값을 반환
CafeMemberServiceImpl
package CloneCoding.NaverCafe.domain.cafeMember.service;
@Service
@RequiredArgsConstructor
public class CafeMemberServiceImpl implements CafeMemberService {
private final CafeMemberRepository cafeMemberRepository;
private final CafeRepository cafeRepository;
private final MemberRepository memberRepository;
private final AesUtil aesUtil;
@Override
public String joinCafeMember(RequestJoinCafeMember request, String token) {
Cafe findCafe = cafeRepository.findByUrl(request.getUrl());
String accountId = aesUtil.aesDecode(token);
Member findMember = memberRepository.findByAccountId(accountId);
CafeMember cafeMember = CafeMember.createCafeMember(request.getCafeMemberInfo(), findCafe, findMember);
cafeMemberRepository.save(cafeMember);
return JOIN_COMPLETE_CAFE.getMessage();
}
}
카페 회원 등록을 위해서는 URL을 통해 카페를 식별해야하고 토큰을 통해 네이버 계정을 식별해 CafeMember 객체를 생성해야 한다. 그래서 cafeRepository와 memberRepository를 의존관계로 주입하였고 토큰을 복호화하기 위해 AesUtil 또한 주입하였다.
- joinCafeMember() : 요청 정보와 토큰 정보로 CafeMember 객체를 생성하고 엔티티를 저장한 후 시스템 메시지를 반환
QueryCafeRepositoryImpl
package CloneCoding.NaverCafe.domain.cafe.repository;
@Repository
@RequiredArgsConstructor
public class QueryCafeRepositoryImpl implements QueryCafeRepository {
private final JPAQueryFactory query;
@Override
public Cafe findByUrl(String url) {
return Optional.ofNullable(query
.selectFrom(cafe)
.where(cafe.url.eq(url))
.fetchOne())
.orElseThrow(() -> new NoSuchElementException("유효하지 않은 카페 URL 주소입니다."));
}
}
카페 회원 가입을 위해서는 URL로 카페를 식별할 필요가 있다. 그래서 QueryCafeRepositoryImpl에 URL을 통해 카페를 조회할 수 있는 메서드를 추가하였다.
- findByUrl() : URL 정보로 카페를 조회하며 조회한 Cafe 객체를 반환
API TEST
맨 위 이미지는 포스트맨을 통해 API 요청에 대한 결과로 가입 정보에 아무것도 입력하지 않아 기본 값으로 가입이 진행 되었다. 아래 이미지는 API 요청 이후 DB의 CAFE_MEMBER 테이블로 카페 생성시 자동 가입된 카페 매니저와 새로 가입된 회원 정보를 확인할 수 있다.
수정사항(24.05.26)
단순히 기능을 추가한다고 빼먹은 내용이 있다. 바로 카페 회원가입 양식에 필요한 데이터를 반환하는 기능이다. 한 마디로 카페 가입하기 버튼을 누르면 가입에 필요한 정보를 입력하는 부분이 사용자에게 제공되어야 하고 그 때 필요한 데이터를 제공하는 기능이 필요한데 그 부분을 생략하였다. 이렇게 되니 가입 기능을 구현시 어떠한 데이터가 서버에 전달될지 예상하고 이를 코드에 적용하는 것이 애매해졌고 해당 부분의 구현이 필요하다는 걸 깨달았다.
결국 카페 회원가입 양식에 필요한 데이터를 반환하는 기능을 구현하였고 더 이상 어떤 데이터를 사용자에게 전달 받게 되고 어떤 데이터만을 수용해 DB에 반영할지 고민하지 않게 되었다
'Project > Naver Cafe' 카테고리의 다른 글
[클론 코딩] 네이버 카페 - 카페 탈퇴 (0) | 2024.05.26 |
---|---|
[클론 코딩] 네이버 카페 - 카페 회원정보 수정 (0) | 2024.05.26 |
[클론 코딩] 네이버 카페 - 카페 만들기 (0) | 2024.05.22 |
[클론 코딩] 네이버 카페 - 메모 (0) | 2024.05.12 |
[클론 코딩] 네이버 카페 - 네이버 회원 탈퇴 (0) | 2024.05.12 |