포트폴리오/AutoReview

게시글 공개 여부 기능 추가

do_hyuk 2025. 5. 8. 09:27
728x90
반응형

수정될 부분

  1. [BE] code post Entity 필드에 isPublic 멤버변수 추가

  2. [BE] flyway.sql 스크립트에 code_post table에 is_public 컬럼 추가하는 명령어 작성
    1. 기존에 존재하던 게시글들에는 is_public 컬럼의 기본값을 true로 설정

  3. [BE] 관련된 DTO 필드에 isPublic 멤버변수 추가

  4. [BE] service Layer에서 조회 로직 변경
    1. 게시물 작성자일 경우 - public
    2. 다른 회원일 경우 - private

CodePostEntity
@Entity
public class CodePost {
	...
    @Column(nullable = false)
    @ColumnDefault("true")
    private boolean isPublic;
    ...
}

Flyway Script
ALTER TABLE code_post
ADD COLUMN is_public TINYINT(1) NOT NULL DEFAULT 1;

MySQL은 boolean 타입을 TinyInt 로 저장한다.

 

UPDATE code_post SET is_public = 1 WHERE is_public IS NULL;

기본값 1이 저장안될 수 있는 예외 상황을 처리하기 위한 명령어이다.


RequesetDto
public record CodePostSaveRequestDto(
	...
    @Schema(description = "공개여부", example = "true")
    boolean isPublic,
    ...
)

Service Layer
@Query("SELECT c FROM CodePost c WHERE ... c.writerId = :memberId OR c.isPublic IS TRUE")

조회하는 모든 쿼리 조건문에 isPublic이 true이거나 작성자일 경우 조회되도록 변경

 

@Query(value = "SELECT * FROM code_post c WHERE c.is_public = TRUE AND MATCH(c.title) AGAINST(:keyword IN BOOLEAN MODE)",
        countQuery = "SELECT COUNT(*) FROM code_post c WHERE MATCH(c.title) AGAINST(:keyword IN BOOLEAN MODE)",
        nativeQuery = true)

search 메서드에 쓰이는 쿼리문으로 nativeQuery를 쓰기 때문에 c.isPublic으로 작성할 경우 해당 컬럼이 없다는 에러가 발생한다.

MySQL에 저장된 컬럼 이름인 is_public으로 작성해야된다.

 

전체 조회같은 경우 다른 사용자의 게시물과 함께 조회되기 때문에 작성자여도 비공개일 경우 조회되지 않도록 구현했다.

작성자는 자신의 비공개 게시물을 자신의 post만을 조회하는 로직에서 볼 수 있다.

728x90
반응형