[클론 코딩] 네이버 카페 - 카페 생성시 기본 게시판

2024. 5. 28. 14:45Project/Naver Cafe

  네이버 카페에는 게시글을 작성할 수 있고 이를 분류하는 게시판이라는 기능이 존재한다. 해당 기능이 존재하기 때문에 사용자들은 '카페에는 게시판이 있고 게시판 마다 게시글이 있다'라고 서비스를 이해하고 사용할 수 있는 것이다.

 

  네이버 카페는 기본적으로 생성시 '자유게시판'이라는 게시판이 생성된다. 그래서 이번에는 게시판에 대한 서비스(게시판 추가, 수정 등)를 구현하기 전에 카페 생성시 자동적으로 생성되는 게시판에 대한 구현을 먼저 하고자 한다.


BulletinBoard

package CloneCoding.NaverCafe.domain.bulletinBoard;

import static CloneCoding.NaverCafe.domain.bulletinBoard.enums.BasicBulletinBoardData.*;
import static CloneCoding.NaverCafe.domain.cafeMember.enums.CafeMemberPosition.*;

@Entity
@Table(name = "BULLETIN_BOARD")
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class BulletinBoard {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "SEQUENCE")
    private int sequence;

    @Column(name = "NAME")
    private String name;

    @Column(name = "DESCRIPTION")
    private String description;

    @Column(name = "WRITE_AUTH")
    private String writeAuth;

    @Column(name = "READ_AUTH")
    private String readAuth;

    @Column(name = "COMMENT_AUTH")
    private String commentAuth;

    @Column(name = "USE_FAVORITE")
    private boolean useFavorite;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CAFE_ID")
    private Cafe cafeId;

    public static BulletinBoard createBasicBulletinBoard(Cafe cafe) {
        return BulletinBoard.builder()
                .sequence(1)
                .name(BASIC_NAME.getValue())
                .description(BASIC_DESCRIPTION.getValue())
                .writeAuth(CAFE_MEMBER.getPosition())
                .readAuth(CAFE_MEMBER.getPosition())
                .commentAuth(CAFE_MEMBER.getPosition())
                .useFavorite(true)
                .cafeId(cafe)
                .build();
    }

}

 

  • id : 식별키(PK)
  • sequence : 게시판 노출 순서
  • name : 게시판 이름
  • description : 게시판에 대한 설명
  • writeAuth : 게시판 글쓰기 가능 등급(최소 기준)
  • readAuth : 게시판 읽기 가능 등급(최소 기준)
  • commentAuth : 게시판 댓글 작성 가능 등급(최소 기준)
  • useFavorite : 좋아요 기능 사용 여부
  • cafeId : 참조키(FK)
  • createBasicBulletinBoard() : 카페 ID 정보를 받아 기본 게시판을 생성하는 메서드

BasicBulletinBoardData

package CloneCoding.NaverCafe.domain.bulletinBoard.enums;

@Getter
@RequiredArgsConstructor
public enum BasicBulletinBoardData {

    BASIC_NAME("자유게시판"),
    BASIC_DESCRIPTION(""),
    ;

    private final String value;

    }

 

  기본 게시판에 사용되는 정보를 상수로 갖는 Enum 클래스, 카페 생성시 기본 게시판이 생성될 때 해당 정보들을 사용해 기본 게시판을 생성하게 된다.


CafeServiceImpl

package CloneCoding.NaverCafe.domain.cafe.service;

@Service
@RequiredArgsConstructor
public class CafeServiceImpl implements CafeService {

    private final CafeRepository cafeRepository;
    private final MemberRepository memberRepository;
    private final KeywordRepository keywordRepository;
    private final CafeMemberRepository cafeMemberRepository;
    private final BulletinBoardRepository bulletinBoardRepository;
    private final AesUtil aesUtil;

    @Override
    public String createCafe(RequestCreateCafe request, String token) {

        Cafe cafe = Cafe.createCafe(request.getCafeInfo());

        Member member = checkMember(token);

        List<Keyword> keywords = createKeywords(request.getKeywords(), cafe);

        CafeMember cafeManager = CafeMember.createCafeManager(
                member.getAccountId(), member.getNickname(),
                member.getGender(), member.getBirthday(), cafe
        );

        BulletinBoard basicBulletinBoard = BulletinBoard.createBasicBulletinBoard(cafe);

        cafeRepository.save(cafe);
        keywordRepository.saveAll(keywords);
        cafeMemberRepository.save(cafeManager);
        bulletinBoardRepository.save(basicBulletinBoard);

        return CREATE_CAFE_COMPLETE.getMessage();

    }

}

 

  카페 생성시에 사용되는 CafeServiceImpl의 createCafe() 메서드에 기본 게시판을 생성(게시판 객체)하고 DB에 저장(엔티티 저장)하는 부분을 추가하였다. 이로써 카페를 생성하면 기본 게시판도 자동으로 생성된다.


API TEST

API TEST - 기본 게시판 확인 테스트

 

DB - 기본 게시판 추가

 

  기본 게시판이 잘 생성되는지 기존 API 요청(카페 생성)을 통해 확인한 결과이다. 카페 정상 생성 후에 DB를 확인해 보니 기본 게시판(=자유게시판)이 잘 생성된 걸 확인할 수 있었다.