diff --git a/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java b/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java index 527873e..2c59f2e 100644 --- a/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java +++ b/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java @@ -86,4 +86,23 @@ public class Inquiry extends Auditable { @Column(name = "ATTACH_FILE") private String attachFile; + + /** + * 공개범위 (전체공개/법인공개/비공개). 기본값 ORG. + * PTL_PROPERTY 기관 기본값이 상한(ceiling)이며 읽기/쓰기 시 clamp 된다. + */ + @Enumerated(EnumType.STRING) + @Column(name = "VISIBILITY", length = 16) + private VisibilityScope visibility = VisibilityScope.ORG; + + /** + * 조회수. sessionStorage 기반 dedup 후 POST 요청으로만 증가한다. + */ + @Column(name = "VIEW_COUNT") + private long viewCount = 0L; + + /** 조회수 1 증가. */ + public void increaseViewCount() { + this.viewCount++; + } } diff --git a/src/main/java/com/eactive/apim/portal/qna/entity/InquiryComment.java b/src/main/java/com/eactive/apim/portal/qna/entity/InquiryComment.java index d66f4a5..9ef7bbe 100644 --- a/src/main/java/com/eactive/apim/portal/qna/entity/InquiryComment.java +++ b/src/main/java/com/eactive/apim/portal/qna/entity/InquiryComment.java @@ -36,6 +36,18 @@ public class InquiryComment extends Auditable implements Serializable { @Column(name = "ADMIN_YN", length = 1) private String adminYn = "N"; + /** + * 댓글 공개범위. 개념상 공개(ALL)/비공개(PRIVATE) 2단계. + * 비공개 댓글은 작성자·같은 법인 corp-manager·관리자만 열람 가능. + */ + @Enumerated(EnumType.STRING) + @Column(name = "VISIBILITY", length = 16) + private VisibilityScope visibility = VisibilityScope.ALL; + + public boolean isPrivate() { + return this.visibility == VisibilityScope.PRIVATE; + } + public void markDeleted() { this.delYn = "Y"; } diff --git a/src/main/java/com/eactive/apim/portal/qna/entity/VisibilityScope.java b/src/main/java/com/eactive/apim/portal/qna/entity/VisibilityScope.java new file mode 100644 index 0000000..fa24673 --- /dev/null +++ b/src/main/java/com/eactive/apim/portal/qna/entity/VisibilityScope.java @@ -0,0 +1,67 @@ +package com.eactive.apim.portal.qna.entity; + +/** + * 문의(Q&A) 게시물/댓글의 공개범위. + * + *
{@code width}는 공개 범위의 넓이 랭크로, 값이 클수록 더 넓게 공개된다. + * {@code PTL_PROPERTY}에 설정된 기관 기본값이 상한(ceiling)이 되며, 게시물이 상한보다 + * 넓게 설정될 수 없다({@link #clampTo}). property가 항상 우선한다.
+ * + *