feat(notice): 예약 공개 모델과 신규 컬럼을 추가한다

This commit is contained in:
2026-10-30 22:50:42 +09:00
parent e66512c055
commit 4f4c842ccf
3 changed files with 34 additions and 1 deletions
@@ -0,0 +1,9 @@
-- 수동 배포용 additive schema이며 운영 DB에서 자동 실행하지 않는다.
-- 서버/JDBC/DB UTC 확인 후 schema를 먼저 적용하고, 공개 필터가 포함된 앱으로 모든 reader를 교체한다.
-- 이전 reader가 하나라도 남아 있으면 예약 공지를 노출하므로 전체 교체 전에는 예약 쓰기/admin 사용을 금지한다.
-- 기존 row는 NULL/FALSE를 유지하며 created_at 변경이나 backfill을 수행하지 않는다.
ALTER TABLE service_notice
ADD COLUMN publish_at TIMESTAMP NULL DEFAULT NULL COMMENT '예약 공개 시각(UTC)';
ALTER TABLE service_notice
ADD COLUMN is_scheduled BOOLEAN NOT NULL DEFAULT FALSE COMMENT '예약 공개 여부';
@@ -1,6 +1,7 @@
package kr.co.vividnext.sodalive.notice
import kr.co.vividnext.sodalive.common.BaseEntity
import java.time.LocalDateTime
import javax.persistence.Column
import javax.persistence.Entity
@@ -11,5 +12,9 @@ data class ServiceNotice(
@Column(columnDefinition = "TEXT", nullable = false)
var content: String,
@Column(nullable = false)
var isActive: Boolean = true
var isActive: Boolean = true,
@Column(columnDefinition = "TIMESTAMP", nullable = true)
var publishAt: LocalDateTime? = null,
@Column(nullable = false)
var isScheduled: Boolean = false
) : BaseEntity()
@@ -0,0 +1,19 @@
package kr.co.vividnext.sodalive.notice
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
class ServiceNoticeTest {
@Test
@DisplayName("기존 엔티티 생성은 활성·즉시 공개 기본값과 미지정 등록 시각을 유지한다")
fun shouldDefaultToImmediateActiveNotice() {
val notice = ServiceNotice("공지", "본문")
assertEquals(true, notice.isActive)
assertEquals(false, notice.isScheduled)
assertNull(notice.publishAt)
assertNull(notice.createdAt)
}
}